System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact d679554e540a068189c2a5c7b18b2f7eb2620740:

• File lib/System.Data.SQLite/common.eagle — part of check-in [a5895007d1] at 2016-03-23 17:52:49 on branch trunk — Adjust tests related to extension loading to make them work better for POSIX. (user: mistachkin size: 157712)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 32 30 31 32 2c 20 32 30 31   2010, 2012, 201
0460: 33 2c 20 6f 72 20 32 30 31 35 20 62 75 69 6c 64  3, or 2015 build
0470: 20 73 79 73 74 65 6d 73 2e 20 20 54 6f 20 6f 76   systems.  To ov
0480: 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20  erride..      #
0490: 20 20 20 20 20 20 74 68 69 73 20 76 61 6c 75 65        this value
04a0: 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64   via the command
04b0: 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 63   line, enter a c
04c0: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74  ommand similar t
04d0: 6f 20 6f 6e 65 0d 0a 20 20 20 20 20 20 23 20 20  o one..      #
04e0: 20 20 20 20 20 6f 66 20 74 68 65 20 66 6f 6c 6c       of the foll
04f0: 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e  owing (all on on
0500: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20  e line):..
0510: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0520: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0530: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
0540: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0550: 30 35 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  05"..      #
0560: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0570: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0580: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0590: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
05a0: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
05b0: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
05c0: 65 61 72 20 32 30 30 38 22 0d 0a 20 20 20 20 20  ear 2008"..
05d0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
05e0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
05f0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0600: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0610: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0620: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
0630: 74 65 73 74 5f 79 65 61 72 20 32 30 31 30 22 0d  test_year 2010".
0640: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
0650: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
0660: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
0670: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
0680: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0690: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
06a0: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
06b0: 32 30 31 32 22 0d 0a 20 20 20 20 20 20 23 20 20  2012"..      #
06c0: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
06d0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
06e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
06f0: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0700: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0710: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
0720: 5f 79 65 61 72 20 32 30 31 33 22 0d 0a 20 20 20  _year 2013"..
0730: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
0740: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
0750: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
0760: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
0770: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61  agleShell.exe -a
0780: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65  nyInitialize "se
0790: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 31 35  t test_year 2015
07a0: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  "..      #
07b0: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c     -file .\path\
07c0: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20  to\all.eagle..
07d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
07e0: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
07f0: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69  exe -anyInitiali
0800: 7a 65 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ze "unset -nocom
0810: 70 6c 61 69 6e 20 74 65 73 74 5f 79 65 61 72 22  plain test_year"
0820: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
0830: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
0840: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
0850: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
0860: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
0870: 65 73 74 5f 79 65 61 72 5d 20 26 26 20 5b 73 74  est_year] && [st
0880: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74  ring length $::t 0890: 65 73 74 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 est_year] > 0} t 08a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 08b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 08c0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 08d0: 69 65 64 20 74 65 73 74 20 79 65 61 72 2e 20 20 ied test year. 08e0: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 If this variable 08f0: 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 is not set, the 0900: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 0910: 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 default value 0920: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e will be based on 0930: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 whether or not 0940: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a Eagle has been.. 0950: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0960: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 compiled against 0970: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 the CLR v2.0 or 0980: 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 CLR v4.0... 0990: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 09a0: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
09b0: 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ar..      } else
09c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
09d0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
09e0: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  f Eagle has been
09f0: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
0a00: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2c 20  t the CLR v4.0,
0a10: 75 73 65 20 22 32 30 31 30 22 20 62 79 0d 0a 20  use "2010" by..
0a20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
0a30: 65 66 61 75 6c 74 20 28 77 65 20 63 6f 75 6c 64  efault (we could
0a40: 20 75 73 65 20 22 32 30 31 32 22 2c 20 22 32 30   use "2012", "20
0a50: 31 33 22 2c 20 6f 72 20 22 32 30 31 35 22 20 69  13", or "2015" i
0a60: 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 0d 0a  n that case as..
0a70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
0a80: 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74 65 73  well) as the tes
0a90: 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77 69 73  t year; otherwis
0aa0: 65 2c 20 75 73 65 20 22 32 30 30 38 22 20 62 79  e, use "2008" by
0ab0: 20 64 65 66 61 75 6c 74 20 28 77 65 0d 0a 20 20   default (we..
0ac0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
0ad0: 75 6c 64 20 75 73 65 20 22 32 30 30 35 22 20 69  uld use "2005" i
0ae0: 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 20 77  n that case as w
0af0: 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74 68 65  ell).  If anothe
0b00: 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20 20 20  r major..
0b10: 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f 6d 70   #       [incomp
0b20: 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f 6e 20  atible] version
0b30: 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20 72 65  of the CLR is re
0b40: 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 68 65  leased, this che
0b50: 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ck will..
0b60: 20 23 20 20 20 20 20 20 20 68 61 76 65 20 74 6f   #       have to
0b70: 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 54 68   be changed.  Th
0b80: 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79  e default test y
0b90: 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72 20 61  ear to use for a
0ba0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0bb0: 20 20 70 61 72 74 69 63 75 6c 61 72 20 43 4c 52    particular CLR
0bc0: 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62 65 20   version may be
0bd0: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 73 65  overridden by se
0be0: 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62 61 6c  tting the global
0bf0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0c00: 20 20 76 61 72 69 61 62 6c 65 20 22 74 65 73 74    variable "test
0c10: 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22 2c 20  _year_clr_v$X", 0c20: 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 20 5b where "$X" may [
0c30: 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d 0a 20  currently] be..
0c40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65         #       e
0c50: 69 74 68 65 72 20 22 32 22 20 6f 72 20 22 34 22  ither "2" or "4"
0c60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
0c70: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43        if {[haveC
0c80: 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67 65 52  onstraint imageR
0c90: 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65 6e 20  untime40]} then
0ca0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
0cb0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
0cc0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34  test_year_clr_v4
0cd0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
0ce0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
0cf0: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61  ngth $::test_yea 0d00: 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d 20 74 r_clr_v4] > 0} t 0d10: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 0d20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 0d30: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 0d40: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 0d50: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c year for the CL 0d60: 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 R v4.0... 0d70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 0d80: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
0d90: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 0d 0a  st_year_clr_v4..
0da0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
0db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
0dc0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
0dd0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0de0: 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 61 72  efault test year
0df0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e   for the CLR v4.
0e00: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...
0e10: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  #..            r
0e20: 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20 54 4f  eturn 2010; # TO
0e30: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
0e40: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
0e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0e60: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
0e70: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
0e80: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 79   exists ::test_y
0e90: 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26 20 5c  ear_clr_v2] && \
0ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
0eb0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $0ec0: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f ::test_year_clr_ 0ed0: 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d v2] > 0} then {. 0ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 0f00: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 0f10: 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 20 ified test year 0f20: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 for the CLR v2.0 0f30: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 0f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 0f50: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 turn$::test_yea
0f60: 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20 20 20  r_clr_v2..
0f70: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
0f80: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
0f90: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
0fa0: 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
0fb0: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74   test year for t
0fc0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20  he CLR v2.0...
0fd0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
0fe0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
0ff0: 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20 47 6f  2008; # TODO: Go
1000: 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65  od "fallback" de
1010: 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20  fault?..
1020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1030: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1040: 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    #
1050: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
1060: 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  dure is only use
1070: 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20 73 68  d when adding sh
1080: 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e 73 74  immed test const
1090: 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a  raints...    #..
10a0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
10b0: 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d 20 7b  dClrVersion {} {
10c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
10d0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
10e0: 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e 67 20  clr] && [string
10f0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63  length $::test_c 1100: 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d lr] > 0} then {. 1110: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1120: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 1130: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 1140: 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 st version for t 1150: 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68 69 73 he CLR. If this 1160: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 1170: 20 20 20 23 20 20 20 20 20 20 20 69 73 20 6e 6f # is no 1180: 74 20 73 65 74 2c 20 74 68 65 20 64 65 66 61 75 t set, the defau 1190: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 lt value will be 11a0: 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 based on whethe 11b0: 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20 20 20 r or not.. 11c0: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 # Eagle 11d0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65 has been compile 11e0: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c d against the CL 11f0: 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 R v2.0 or CLR v4 1200: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a .0... #.. 1210: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
1220: 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20 20 20  ::test_clr..
1230: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1240: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1250: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
1260: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63  Eagle has been c
1270: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against
1280: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49  the CLR v4.0.  I
1290: 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 20 23  f so,..        #
12a0: 20 20 20 20 20 20 20 6a 75 73 74 20 75 73 65 20         just use
12b0: 74 68 61 74 20 43 4c 52 20 76 65 72 73 69 6f 6e  that CLR version
12c0: 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 75 73  .  Otherwise, us
12d0: 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20 66 6f  e the version fo
12e0: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  r the..        #
12f0: 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e 30 2e         CLR v2.0.
1300: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
1310: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
1320: 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  ] version of the
1330: 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 23 20   CLR..        #
1340: 20 20 20 20 20 20 69 73 20 72 65 6c 65 61 73 65        is release
1350: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
1360: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 63 68  ll have to be ch
1370: 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66 61  anged.  The defa
1380: 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ult..        #
1390: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76 61 6c       version val
13a0: 75 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  ue for a particu
13b0: 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20  lar CLR version
13c0: 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65  may be overridde
13d0: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
13e0: 20 20 20 62 79 20 73 65 74 74 69 6e 67 20 74 68     by setting th
13f0: 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
1400: 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 58 22  e "test_clr_v$X" 1410: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 , where "$X" may
1420: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1430: 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65    [currently] be
1440: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22   either "2" or "
1450: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  4"...        #..
1460: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76          if {[hav
1470: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67  eConstraint imag
1480: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65  eRuntime40]} the
1490: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
14a0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
14b0: 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d 20 26  ::test_clr_v4] &
14c0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
14d0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
14e0: 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34  h $::test_clr_v4 14f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 1500: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1510: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1520: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 1530: 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f 6e ied test version 1540: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 1550: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 1560: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 1570: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6c eturn$::test_cl
1580: 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20  r_v4..
1590: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
15a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
15c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73   the default tes
15d0: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
15e0: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20  e CLR v4.0...
15f0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 34          return 4
1610: 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 44 4f  .0.30319; # TODO
1620: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
1630: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
1640: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1650: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1660: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
1670: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72  xists ::test_clr
1680: 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  _v2] && \..
1690: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
16a0: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 16b0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 16c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 16d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 16e0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 16f0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76 specified test v 1700: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 ersion for the C 1710: 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 LR v2.0... 1720: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1730: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 return$::t
1740: 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20  est_clr_v2..
1750: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1760: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1770: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
1780: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
1790: 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f 6e 20  lt test version
17a0: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
17b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
17c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
17d0: 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 3b 20  turn 2.0.50727;
17e0: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
17f0: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
1800: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1810: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1820: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1830: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59 65   proc getBuildYe
1840: 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ars {} {..
1850: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1860: 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74   See if the list
1870: 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20 68   of test years h
1880: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
1890: 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d 0a  en by the user..
18a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 65        #       (e
18b0: 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  .g. on the comma
18c0: 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20  nd line)...
18d0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
18e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
18f0: 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c 65  t_years] && [lle
1900: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61  ngth $::test_yea 1910: 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rs] > 0} then {. 1920: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1930: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 1940: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 69 the specified li 1950: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 st of test years 1960: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
1980: 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20 20  test_years..
1990: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
19a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
19b0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
19c0: 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20 74  efault list of t
19d0: 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 2e 20  est years (i.e.
19e0: 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  all)...        #
19f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1a00: 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30 38   [list 2005 2008
1a10: 20 32 30 31 30 20 32 30 31 32 20 32 30 31 33 20   2010 2012 2013
1a20: 32 30 31 35 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  2015]..      }..
1a30: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1a40: 6f 63 20 67 65 74 42 75 69 6c 64 4e 65 74 46 78  oc getBuildNetFx
1a50: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
1a60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
1a70: 65 20 69 66 20 74 68 65 20 74 65 73 74 20 2e 4e  e if the test .N
1a80: 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73 65 74  ET Framework set
1a90: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76  ting has been ov
1aa0: 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 20 20  erridden by..
1ab0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
1ac0: 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65  ser (e.g. on the
1ad0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d   command line)..
1ae0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1af0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
1b00: 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d 20   ::test_net_fx]
1b10: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1b20: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $1b30: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d 20 3e ::test_net_fx] > 1b40: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1b50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1b60: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 1b70: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 2e 4e pecified test .N 1b80: 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 ET Framework... 1b90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ba0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
1bb0: 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20 20 7d  _net_fx..      }
1bc0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1bd0: 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 75   set year [getBu
1be0: 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20  ildYear]..
1bf0: 20 20 73 65 74 20 79 65 61 72 56 61 72 4e 61 6d    set yearVarNam
1c00: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a  e [appendArgs ::
1c10: 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20 24 79 65  test_net_fx_ $ye 1c20: 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 ar].... i 1c30: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 1c40: 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 20 26 26$yearVarName] &&
1c50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c60: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b  [string length [
1c70: 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 6d 65  set $yearVarName 1c80: 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ]] > 0} then {.. 1c90: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1ca0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 1cb0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 1cc0: 20 74 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 test .NET Frame 1cd0: 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f 6e 20 74 work, based on t 1ce0: 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 he build.. 1cf0: 20 20 20 20 23 20 20 20 20 20 20 20 79 65 61 72 # year 1d00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1d10: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1d20: 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 [set$yearVarNa
1d30: 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  me]..        } e
1d40: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1d50: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1d60: 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74  NOTE: Fallback t
1d70: 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b 6e 6f 77  o the "well know
1d80: 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  n" .NET Framewor
1d90: 6b 20 76 65 72 73 69 6f 6e 20 74 68 61 74 0d 0a  k version that..
1da0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1db0: 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f 73 65 6c    is most closel
1dc0: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
1dd0: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 76  h a particular v
1de0: 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20  ersion of..
1df0: 20 20 20 20 20 23 20 20 20 20 20 20 20 56 69 73       #       Vis
1e00: 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a 20 20 20  ual Studio...
1e10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1e20: 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 63      switch -exac
1e30: 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a 20 20  t -- $year {.. 1e40: 20 20 20 20 20 20 20 20 20 20 32 30 30 35 20 7b 2005 { 1e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e60: 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30 0d 0a return netFx20.. 1e70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1e80: 20 20 20 20 20 20 20 20 20 20 20 32 30 30 38 20 2008 1e90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ea0: 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 35 0d return netFx35. 1eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 31 30 2010 1ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ee0: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 30 return netFx40 1ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 31 . 201 1f10: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 2 {.. 1f20: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 1f30: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 5.. } 1f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 .. 20 1f50: 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 13 {.. 1f60: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 1f70: 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 20 451; # TODO: Or 1f80: 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a 20 20 20 "netFx452"?.. 1f90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1fa0: 20 20 20 20 20 20 20 20 32 30 31 35 20 7b 0d 0a 2015 {.. 1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re 1fc0: 74 75 72 6e 20 6e 65 74 46 78 34 36 3b 20 23 20 turn netFx46; # 1fd0: 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46 78 34 TODO: Or "netFx4 1fe0: 36 31 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 61"?.. 1ff0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2000: 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 default {.. 2010: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 2020: 20 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44 4f netFx35; # TODO 2030: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b : Good "fallback 2040: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 " default?.. 2050: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2060: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2070: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. 2080: 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 }..... #.. 2090: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 20a0: 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 72 ocedure should r 20b0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 eturn non-zero i 20c0: 66 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 f the configured 20d0: 20 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20 20 test.. # 20e0: 20 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6d platform is m 20f0: 6f 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 ost likely the d 2100: 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 20 efault for this 2110: 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23 0d machine... #. 2120: 0a 20 20 20 20 70 72 6f 63 20 69 73 44 65 66 61 . proc isDefa 2130: 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d ultBuildPlatform 2140: 20 7b 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 { {verbose fals 2150: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 2160: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 2170: 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20 unning on WoW64 2180: 69 73 20 6e 65 76 65 72 20 74 68 65 20 64 65 66 is never the def 2190: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a ault platform... 21a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 21b0: 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 f {[isRunningWoW 21c0: 36 34 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 64]} then {.. 21d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
21e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
21f0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2200: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 2210: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 2220: 2d 20 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64 - detected non-d 2230: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20 efault platform 2240: 28 57 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20 (WoW64)\n".. 2250: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 }.. r 2260: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. 2270: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 2280: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 2290: 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64 20 63 his has a good c 22a0: 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67 20 74 hance of being t 22b0: 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 he default platf 22c0: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 orm... #.. 22d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
22e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
22f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2300: 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 64 _channel "---- d 2310: 65 74 65 63 74 65 64 20 64 65 66 61 75 6c 74 20 etected default 2320: 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20 20 20 platform\n".. 2330: 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 }.. retu 2340: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d 0d 0a rn true.. }.. 2350: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 2360: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 6e uildPlatform { n 2370: 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 ative } {.. 2380: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 2390: 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 s ::test_platfor 23a0: 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 m] && \.. 23b0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 23c0: 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f h$::test_platfo
23d0: 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
23e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
23f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
2400: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65  the specified te
2410: 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 49 66  st platform.  If
2420: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
2430: 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 20 20  s not set,..
2440: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2450: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
2460: 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ll be based on t
2470: 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69  he machine archi
2480: 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  tecture...
2490: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
24a0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  urn [expr {$nati 24b0: 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70 6c 61 ve ?$::test_pla
24c0: 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20  tform : ""}]..
24d0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
24e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
24f0: 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 5c 0d  t_machine] && \.
2500: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
2510: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 2520: 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30 7d 20 t_machine] > 0} 2530: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2540: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2550: 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 E: For native bu 2560: 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 ilds, return the 2570: 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 platform name c 2580: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d orresponding to. 2590: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 25a0: 20 74 68 65 20 74 65 73 74 20 6d 61 63 68 69 6e the test machin 25b0: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 e architecture; 25c0: 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 otherwise, retur 25d0: 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 n an empty.. 25e0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69 # stri 25f0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ng... #.. 2600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 2610: 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 expr {.. 2620: 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63$native ? [mac
2630: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24  hineToPlatform $2640: 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 ::test_machine] 2650: 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d : "".. }] 2660: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 2670: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 2680: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma 2690: 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d chine)]} then {. 26a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 26b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 # NOTE: For 26c0: 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 native builds, r 26d0: 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f eturn the platfo 26e0: 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f rm name correspo 26f0: 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 nding to.. 2700: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6d 61 # the ma 2710: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 chine architectu 2720: 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 re; otherwise, r 2730: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2740: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 2750: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 2760: 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 n [expr {.. 2770: 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b$native ? [
2780: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
2790: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor 27a0: 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20 22 22 m(machine)] : "" 27b0: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 .. }].. 27c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 27d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27e0: 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 # NOTE: No mach 27f0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 ine architecture 2800: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 is available, r 2810: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2820: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 2830: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d # It is im 2840: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 portant to retur 2850: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 2860: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 g here because t 2870: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 2880: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 result of th 2890: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 is procedure may 28a0: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 be used with [f 28b0: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 ile join]... 28c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 28d0: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 28e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 28f0: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f proc getBuildCo 2900: 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d 20 7b nfiguration {} { 2910: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2920: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 # NOTE: See if 2930: 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61 74 69 the "configurati 2940: 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61 73 20 on" setting has 2950: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 been overridden 2960: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 by the.. # 2970: 20 20 20 20 20 20 75 73 65 72 20 28 65 2e 67 2e user (e.g. 2980: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 on the command 2990: 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68 65 6c line). This hel 29a0: 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61 63 74 ps control exact 29b0: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 29c0: 20 20 77 68 69 63 68 20 73 65 74 20 6f 66 20 62 which set of b 29d0: 69 6e 61 72 69 65 73 20 77 65 20 61 72 65 20 74 inaries we are t 29e0: 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74 68 6f esting (i.e. tho 29f0: 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68 65 0d se built in the. 2a00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 . # " 2a10: 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 Debug" or "Relea 2a20: 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 se" build config 2a30: 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f 20 6f urations). To o 2a40: 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a 20 20 verride this.. 2a50: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 # valu 2a60: 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e e via the comman 2a70: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 d line, enter a 2a80: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 command similar 2a90: 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20 20 20 to one of.. 2aa0: 20 23 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c # the fol 2ab0: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f lowing (all on o 2ac0: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 2ad0: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 2ae0: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 2af0: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 2b00: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 2b10: 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22 0d 0a uration Debug".. 2b20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 2b30: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 2b40: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 2b50: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 2b60: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 2b70: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 2b80: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 2b90: 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73 65 22 uration Release" 2ba0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 2bb0: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 -file .\path\t 2bc0: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 o\all.eagle.. 2bd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 #.. # 2be0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 EagleShell.e 2bf0: 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c xe -file .\path\ 2c00: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d 70 72 to\all.eagle -pr 2c10: 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 eTest.. # 2c20: 20 20 20 20 20 20 20 22 75 6e 73 65 74 20 2d 6e "unset -n 2c30: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 63 ocomplain test_c 2c40: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d 0a 20 onfiguration".. 2c50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 2c60: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 2c70: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 2c80: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ion] && \.. 2c90: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 2ca0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 gth$::test_conf
2cb0: 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 7d 20  iguration] > 0}
2cc0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2cd0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
2ce0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69  E: Use the speci
2cf0: 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 69 67  fied test config
2d00: 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 65  uration.  The de
2d10: 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 65 64  fault value used
2d20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2d30: 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 69 61    for this varia
2d40: 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c 6c 79  ble is typically
2d50: 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73   "Release", as s
2d60: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a  et by the test..
2d70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2d80: 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20  suite itself...
2d90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2da0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74    return $::test 2db0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a _configuration.. 2dc0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 2dd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2de0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 # NOTE: Norma 2df0: 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 lly, we will nev 2e00: 65 72 20 68 69 74 20 74 68 69 73 20 63 61 73 65 er hit this case 2e10: 20 62 65 63 61 75 73 65 20 74 68 65 20 76 61 6c because the val 2e20: 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 ue of the.. 2e30: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 2e40: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 configuration va 2e50: 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 riable is always 2e60: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 2e70: 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 suite.. 2e80: 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 # itself; 2e90: 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 however, it can 2ea0: 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 be overridden us 2eb0: 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f ing the unset co 2ec0: 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 mmand.. # 2ed0: 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 from the 2ee0: 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 -preTest option 2ef0: 74 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 74 to the test suit 2f00: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 2f10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2f20: 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28  :eagle_platform(
2f30: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a  configuration)..
2f40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2f50: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
2f60: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
2f70: 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ns {} {..      #
2f80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
2f90: 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74 20  See if the list
2fa0: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
2fb0: 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 6e 20  ations has been
2fc0: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20  overridden by..
2fd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2fe0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
2ff0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
3000: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
3010: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3020: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
3030: 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c 0d 0a  urations] && \..
3040: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67            [lleng
3050: 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  th $::test_confi 3060: 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30 7d 20 gurations] > 0} 3070: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3080: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3090: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 30a0: 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 fied list of tes 30b0: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 t configurations 30c0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 30d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
30e0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
30f0: 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ons..      } els
3100: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
3110: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3120: 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default
3130: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e  list of test con
3140: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20  figurations...
3150: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3160: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 44 65   return [list De
3170: 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a 20 20  bug Release]..
3180: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
3190: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
31a0: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 20  ldBaseDirectory
31b0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
31c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67       # NOTE: Fig
31d0: 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 73 65  ure out the base
31e0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65   directory where
31f0: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 73 20   all the builds
3200: 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20  should be..
3210: 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 65 64   #       located
3220: 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20  .  This will be
3230: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68  the directory th
3240: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the
3250: 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 23 20  actual..      #
3260: 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 74 70        build outp
3270: 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 65 2e  ut directory (e.
3280: 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 62 69  g. parent of "bi
3290: 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  n")...      #..
32a0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
32b0: 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61  xists ::build_ba
32c0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  se_directory] &&
32d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
32e0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 32f0: 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 build_base_direc 3300: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 3310: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 3320: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 3330: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 3340: 65 20 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 e build base dir 3350: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 3360: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 3370: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 3380: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 refore, use it v 3390: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 33a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 33b0: 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 urn$::build_bas
33c0: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  e_directory..
33d0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
33e0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d  fo exists ::comm
33f0: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  on_directory] &&
3400: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
3410: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 3420: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 3430: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 3440: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3450: 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 # NOTE: Next, 3460: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 fallback to the 3470: 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69 72 65 grandparent dire 3480: 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e 65 ctory of the one 3490: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 34a0: 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 containing thi 34b0: 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22 63 6f s file (i.e. "co 34c0: 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 69 66 mmon.eagle"), if 34d0: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... 34e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 34f0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 return [file dir 3500: 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 name [file dirna 3510: 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 me$::common_dir
3520: 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 20 20  ectory]]..
3530: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
3540: 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d 20 26  exists ::path] &
3550: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
3560: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 3570: 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68 65 6e :path] > 0} then 3580: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 3590: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 35a0: 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63 6b inally, fallback 35b0: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 to the parent d 35c0: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 irectory of the 35d0: 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20 20 20 EagleTest.. 35e0: 20 20 20 23 20 20 20 20 20 20 20 70 61 74 68 2e # path. 35f0: 20 20 54 68 65 20 45 61 67 6c 65 54 65 73 74 20 The EagleTest 3600: 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e 74 65 package guarante 3610: 65 73 20 74 68 61 74 20 74 68 69 73 20 76 61 72 es that this var 3620: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 iable.. # 3630: 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 73 will be s 3640: 65 74 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 et to the direct 3650: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t 3660: 68 65 20 66 69 72 73 74 20 66 69 6c 65 20 74 6f he first file to 3670: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3680: 20 20 65 78 65 63 75 74 65 20 74 68 65 20 5b 72 execute the [r 3690: 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20 unTestPrologue] 36a0: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 script library p 36b0: 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 rocedure... 36c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 36d0: 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 turn [file dirna 36e0: 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 me$::path]..
36f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
3700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
3710: 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 68 20  # NOTE: No path
3720: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  is available, re
3730: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
3740: 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f 69 6e  ring.  This poin
3750: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
3760: 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65     should not be
3770: 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 20 20   reached...
3780: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3790: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d  turn ""..      }
37a0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
37b0: 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 54 65  proc getSQLiteTe
37c0: 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 7b 0d  stDataPath {} {.
37d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
37e0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
37f0: 75 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ut the directory
3800: 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 74   where all the t
3810: 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 20 73  est data files s
3820: 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 20 20  hould..      #
3830: 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 64 2e       be located.
3840: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
3850: 20 74 68 65 20 22 64 61 74 61 22 20 64 69 72 65   the "data" dire
3860: 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 74 68  ctory beneath th
3870: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
3880: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
3890: 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 61 6c  ining the actual
38a0: 20 74 65 73 74 20 73 63 72 69 70 74 73 2e 0d 0a   test scripts...
38b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
38c0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  eturn [file join
38d0: 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d 0d 0a   $::path data].. 38e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 38f0: 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 oc isRunningWoW6 3900: 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 4 {} {.. #. 3910: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 3920: 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75 73 65 or now, just use 3930: 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 74 65 the existing te 3940: 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f st constraint fo 3950: 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20 20 20 r detecting.. 3960: 20 20 20 23 20 20 20 20 20 20 20 61 20 57 6f 57 # a WoW 3970: 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 64 process... 3980: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 3990: 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 rn [haveConstrai 39a0: 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20 20 7d nt wow64].. } 39b0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 39c0: 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c MixedModeAssembl 39d0: 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 y { fileName {va 39e0: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 rName ""} } {.. 39f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3a00: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d 61 6b NOTE: First, mak 3a10: 65 20 73 75 72 65 20 74 68 65 20 74 65 73 74 20 e sure the test 3a20: 73 75 69 74 65 20 69 6e 66 72 61 73 74 72 75 63 suite infrastruc 3a30: 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 ture is allowed 3a40: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 3a50: 20 20 75 73 65 20 74 68 65 20 5b 65 78 65 63 5d use the [exec] 3a60: 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 command... 3a70: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 3a80: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 3a90: 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69 6e 66 (exec)] && ![inf 3aa0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 3ab0: 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e 20 7b rFlags)]} then { 3ac0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3ad0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 3ae0: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 the location of 3af0: 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72 65 73 CorFlags is pres 3b00: 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76 69 72 ent in the envir 3b10: 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 onment,.. 3b20: 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 3b # use it; 3b30: 20 6f 74 68 65 72 77 69 73 65 20 61 73 73 75 6d otherwise assum 3b40: 65 20 69 74 20 69 73 20 69 6e 20 74 68 65 20 50 e it is in the P 3b50: 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ATH... #. 3b60: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 72 . set cor 3b70: 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d 0a 20 Flags [expr {.. 3b80: 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 [info e 3b90: 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f 72 46 xists ::env(CorF 3ba0: 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 lags)] ?$::env(
3bb0: 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 6f 72  CorFlags) : "Cor
3bc0: 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 20 20  Flags"..
3bd0: 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  }]....        #.
3be0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3bf0: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63   Attempt to exec
3c00: 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f 6e 20  ute CorFlags on
3c10: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
3c20: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
3c30: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
3c40: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
3c50: 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c 61 67  exec -- $corFlag 3c60: 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 s [file nativena 3c70: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 me$fileName]..
3c80: 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d 20 3d         } exec] =
3c90: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
3ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3cb0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72      # NOTE: If r
3cc0: 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20  equested by our
3cd0: 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 74 20  caller, attempt
3ce0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
3d00: 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72      platform for
3d10: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
3d20: 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20  ile as well...
3d30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3d40: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
3d50: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 3d60: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 3d70: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3d80: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 3d90: 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c 61 74 : Store the plat 3da0: 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61 6d 65 form in the name 3db0: 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68 d variable in th 3dc0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 e.. # 3dd0: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f context o 3de0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 f our caller... 3df0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3e00: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 upvar 3e10: 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61 74 66 1$varName platf
3e20: 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  orm....
3e30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
3e40: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
3e50: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
3e60: 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68   PE line from th
3e70: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20  e captured..
3e80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3e90: 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 69 73  output.  If this
3ea0: 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 32 22   value is "PE32"
3eb0: 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 68 65   or "PE32+", the
3ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
3ed0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66        assembly f
3ee0: 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 6f 72  ile is 32-bit or
3ef0: 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 63 74   64-bit, respect
3f00: 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  ively;..
3f10: 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65      #       othe
3f20: 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 65 20  rwise, its type
3f30: 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20  is unknown...
3f40: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
3f50: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74          set patt
3f60: 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 20 20  ern {^PE
3f70: 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b 29 5c  : (PE32|PE32\+)\
3f80: 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s+$}.... 3f90: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 if {[regexp 3fa0: 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 -line --$patter
3fb0: 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 70 65  n $exec dummy pe 3fc0: 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 32]} then {.. 3fd0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 48 41 # HA 3ff0: 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74 63 68 CK: This [switch 4000: 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 33 ] assumes that 3 4010: 32 2d 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 2-bit executable 4020: 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 s are.. 4030: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 # alw 4040: 61 79 73 20 78 38 36 20 61 6e 64 20 74 68 61 74 ays x86 and that 4050: 20 36 34 2d 62 69 74 20 65 78 65 63 75 74 61 62 64-bit executab 4060: 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73 0d 0a les are always.. 4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 4080: 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20 20 20 x64... 4090: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 40a0: 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 switc 40b0: 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70 65 33 h -exact --$pe3
40c0: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2 {..
40d0: 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 20 20       PE32 {..
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
40f0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 6e 33  et platform Win3
4100: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  2..
4110: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
4120: 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d 0a 20        PE32+ {..
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4140: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 78 36   set platform x6
4150: 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  4..
4160: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
4170: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d        default {.
4180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
4190: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
41a0: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..
41b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
41c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
41d0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
41f0: 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20  platform ""..
4200: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
4210: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
4220: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4230: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
4240: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
4250: 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 72 6f   ILONLY line fro
4260: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a  m the captured..
4270: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
4280: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68    output.  If th
4290: 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  is value is zero
42a0: 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  , the specified
42b0: 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 20 20  file must..
42c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
42d0: 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  a mixed-mode ass
42e0: 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 73 65  embly; otherwise
42f0: 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  , it contains on
4300: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ly..          #
4310: 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 63 6f        managed co
4320: 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 20 20  mponents...
4330: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4340: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e    set pattern {^
4350: 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 7c 31  ILONLY    : (0|1
4360: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20  )\s+$}.... 4370: 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 if {![regexp 4380: 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 -line --$patte
4390: 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 69  rn $exec dummy i 43a0: 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a lOnly]} then {.. 43b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 43c0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 rn false.. 43d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 43e0: 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d if {!$ilOnly}
43f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4400: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
4410: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
4420: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
4430: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
4440: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
4450: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 63 61  he test suite ca
4460: 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 5d 20  nnot use [exec]
4470: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  or execution of
4480: 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20  CorFlags..
4490: 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 2c 20  #       failed,
44a0: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d 0a 20  return false...
44b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
44c0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
44d0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
44e0: 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46  etNativeLibraryF
44f0: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20  ileNamesOnly {}
4500: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
4510: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c    # NOTE: First,
4520: 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 6c 69   check if the li
4530: 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c 69 62  st of native lib
4540: 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 73 20  rary file names
4550: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20  has been..
4560: 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79  #       manually
4570: 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20   overridden...
4580: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
4590: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
45a0: 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 5f 66  native_library_f
45b0: 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 5c 0d  ile_names] && \.
45c0: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e  .          [llen
45d0: 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f 6c 69  gth $::native_li 45e0: 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 brary_file_names 45f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 4600: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4610: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 69 # NOTE: The li 4620: 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c 69 62 st of native lib 4630: 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 rary file names 4640: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 4650: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 den;.. # 4660: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 4670: 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d use it verbatim 4680: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 4690: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
46a0: 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 5f 66  native_library_f
46b0: 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20  ile_names..
46c0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 57 69   } elseif {[isWi
46d0: 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ndows]} then {..
46e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
46f0: 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72     # NOTE: Other
4700: 77 69 73 65 2c 20 6f 6e 20 57 69 6e 64 6f 77 73  wise, on Windows
4710: 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 68 65  , always use the
4720: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 6e 61   default file na
4730: 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  me..        #
4740: 20 20 20 20 22 73 71 6c 69 74 65 33 2e 64 6c 6c      "sqlite3.dll
4750: 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
4760: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
4770: 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d  ist sqlite3.dll]
4780: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
4790: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
47a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68       # NOTE: Oth
47b0: 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 62  erwise, return b
47c0: 6f 74 68 20 74 68 65 20 67 65 6e 65 72 69 63 20  oth the generic
47d0: 50 4f 53 49 58 20 66 69 6c 65 20 6e 61 6d 65 20  POSIX file name
47e0: 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20  and the..
47f0: 20 23 20 20 20 20 20 20 20 4d 61 63 20 4f 53 20   #       Mac OS
4800: 58 20 66 69 6c 65 20 6e 61 6d 65 2c 20 73 69 6e  X file name, sin
4810: 63 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 75 72  ce we do not cur
4820: 72 65 6e 74 6c 79 20 68 61 76 65 20 61 6e 20 65  rently have an e
4830: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  asy..        #
4840: 20 20 20 20 20 77 61 79 20 74 6f 20 64 65 74 65       way to dete
4850: 63 74 20 77 68 69 63 68 20 6f 66 20 74 68 6f 73  ct which of thos
4860: 65 20 70 6c 61 74 66 6f 72 6d 73 20 77 65 20 61  e platforms we a
4870: 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a  re running on...
4880: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4890: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list
48a0: 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f 20 6c 69  libsqlite3.so li
48b0: 62 73 71 6c 69 74 65 33 2e 64 79 6c 69 62 5d 0d  bsqlite3.dylib].
48c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
48d0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
48e0: 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
48f0: 65 4e 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74  eName { {default
4900: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
4910: 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66  set directory [f
4920: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 67 65 74  ile dirname [get
4930: 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61  CoreBinaryFileNa
4940: 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  me]]....      fo
4950: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e  reach fileNameOn
4960: 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  ly [getNativeLib
4970: 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
4980: 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  y] {..        se
4990: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
49a0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory 49b0: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 0d$fileNameOnly].
49c0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
49d0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 49e0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 49f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 4a00: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
4a10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
4a20: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $4a30: 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a default.. }.. 4a40: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 42 75 ... proc isBu 4a50: 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e ildAvailable { n 4a60: 61 74 69 76 65 20 64 69 72 65 63 74 6f 72 79 20 ative directory 4a70: 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b {varName ""} } { 4a80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4a90: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 4aa0: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 he fully qualifi 4ab0: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 ed file name for 4ac0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 the primary ass 4ad0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 embly.. # 4ae0: 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 containing 4af0: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. 4b00: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 63 SQLite managed c 4b10: 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a omponents. It.. 4b20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 # sh 4b30: 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 74 68 ould be noted th 4b40: 61 74 20 74 68 69 73 20 61 73 73 65 6d 62 6c 79 at this assembly 4b50: 20 66 69 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 file may also c 4b60: 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 ontain the.. 4b70: 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 # native 4b80: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 components, if 4b90: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 69 a native build i 4ba0: 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 s in use... 4bb0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 #.. set fi 4bc0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 leName [file nat 4bd0: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 4be0: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d in$directory \.
4bf0: 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65  .          Syste
4c00: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
4c10: 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  l]]....      if
4c20: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $4c30: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 4c40: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 4c50: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d n false.. } 4c60: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 4c70: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 4c80: 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 pt to automatica 4c90: 6c 6c 79 20 64 65 74 65 63 74 20 69 66 20 74 68 lly detect if th 4ca0: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 e primary assemb 4cb0: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 4cc0: 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e contains any n 4cd0: 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 ative components 4ce0: 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d , if necessary.. 4cf0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4d00: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 4d10: 74 68 20 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 th$native] == 0
4d20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4d30: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
4d40: 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e  ngth $varName] > 4d50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 4d60: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
4d70: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d  arName $varName. 4d80: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 4d90: 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 set native 4da0: 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 [isMixedModeAss 4db0: 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
4dc0: 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  $varName].. 4dd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 4de0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 4df0: 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 the primary asse 4e00: 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 mbly also contai 4e10: 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f ns the native co 4e20: 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 mponents,.. 4e30: 20 23 20 20 20 20 20 20 20 77 65 20 68 61 76 65 # we have 4e40: 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e everything we n 4e50: 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 eed... #.. 4e60: 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 if {$native
4e70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4e80: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
4e90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
4ea0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
4eb0: 20 57 68 61 74 20 69 73 20 74 68 65 20 61 72 63   What is the arc
4ec0: 68 69 74 65 63 74 75 72 65 20 66 6f 72 20 74 68  hitecture for th
4ed0: 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20  is machine?..
4ee0: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
4ef0: 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 6d 61  architecture [ma
4f00: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20  chineToPlatform
4f10: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( 4f20: 6d 61 63 68 69 6e 65 29 20 74 72 75 65 5d 0d 0a machine) true].. 4f30: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4f40: 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 # NOTE: What is 4f50: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 66 6f the platform fo 4f60: 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d r this machine?. 4f70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4f80: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d 61 set platform [ma 4f90: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 chineToPlatform 4fa0: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28$::tcl_platform(
4fb0: 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20 20  machine)]....
4fc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4fd0: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
4fe0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
4ff0: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the
5000: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
5010: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5020: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
5030: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
5040: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  e native compone
5050: 6e 74 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  nts.  If this..
5060: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
5070: 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f  e exists, we sho
5080: 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 74 68  uld have everyth
5090: 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20  ing we need...
50a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
50b0: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file
50c0: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
50d0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory 50e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 \..$a
50f0: 72 63 68 69 74 65 63 74 75 72 65 20 53 51 4c 69  rchitecture SQLi
5100: 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d  te.Interop.dll]]
5110: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66  ....      if {[f
5120: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 5130: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 5140: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 5150: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... 5160: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 5170: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 5180: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 me [file join$d
5190: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
51a0: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20        $platform 51b0: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 SQLite.Interop.d 51c0: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ll]].... if 51d0: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
51e0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
51f0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
5200: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d  n true..      }.
5210: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c  ...      set fil
5220: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69  eName [file nati
5230: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
5240: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a  n $directory \.. 5250: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 SQLite 5260: 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a .Interop.dll]].. 5270: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c .. if {[fil 5280: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
5290: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
52a0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
52b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
52c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
52d0: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
52e0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
52f0: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the
5300: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..
5310: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61     #       libra
5320: 72 79 2e 20 20 49 66 20 74 68 69 73 20 66 69 6c  ry.  If this fil
5330: 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f  e exists, we sho
5340: 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 74 68  uld have everyth
5350: 69 6e 67 20 77 65 0d 0a 20 20 20 20 20 20 23 20  ing we..      #
5360: 20 20 20 20 20 20 6e 65 65 64 2e 0d 0a 20 20 20        need...
5370: 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65     #..      fore
5380: 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  ach fileNameOnly
5390: 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61   [getNativeLibra
53a0: 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d  ryFileNamesOnly]
53b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
53c0: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
53d0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
53e0: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20  join $directory 53f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
5400: 61 72 63 68 69 74 65 63 74 75 72 65 20 24 66 69  architecture $fi 5410: 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a leNameOnly]].... 5420: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c if {[fil 5430: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
5440: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
5450: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
5460: 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ue..        }...
5470: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
5480: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69  eName [file nati
5490: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
54a0: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a  n $directory \.. 54b0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61$pla
54c0: 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f  tform $fileNameO 54d0: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 nly]].... 54e0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 54f0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
5500: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
5510: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
5520: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5530: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
5540: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
5550: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65  [file join $dire 5560: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 ctory \.. 5570: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e$fileNameOn
5580: 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ly]]....
5590: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
55a0: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 55b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 n {.. r 55c0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 55d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 55e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 55f0: 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 # NOTE: One or 5600: 6d 6f 72 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 more native comp 5610: 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64 20 62 79 onents needed by 5620: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 5630: 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ite.. # 5640: 20 20 20 61 72 65 20 6d 69 73 73 69 6e 67 2e 0d are missing.. 5650: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5660: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 5670: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 5680: 20 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 isReleaseAvaila 5690: 62 6c 65 20 7b 20 64 69 72 65 63 74 6f 72 79 20 ble { directory 56a0: 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b {varName ""} } { 56b0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 56c0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e ing length$varN
56d0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
56e0: 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20  ..        upvar
56f0: 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e  1 $varName$varN
5700: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ame..      }....
5710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 73        return [is
5720: 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 22  BuildAvailable "
5730: 22 20 24 64 69 72 65 63 74 6f 72 79 20 24 76 61  " $directory$va
5740: 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  rName]..    }...
5750: 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e 42  ..    proc joinB
5760: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 20  uildDirectory {
5770: 6e 61 74 69 76 65 20 70 61 74 68 20 79 65 61 72  native path year
5780: 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69 67   platform config
5790: 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20  uration } {..
57a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
57b0: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 61  TE: Figure out a
57c0: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74  nd then return t
57d0: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69  he fully qualifi
57e0: 65 64 20 70 61 74 68 20 74 6f 20 74 68 65 20 62  ed path to the b
57f0: 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20  uild..      #
5800: 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 62 61      directory ba
5810: 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61  sed on all the a
5820: 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 65  rguments provide
5830: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
5840: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
5850: 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68   if {$native} th 5860: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 5870: 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 turn [file join 5880: 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20$path bin $year 5890: 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69$platform $confi 58a0: 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 guration].. 58b0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 58c0: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 58d0: 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 join$path bin $58e0: 79 65 61 72 20 24 63 6f 6e 66 69 67 75 72 61 74 year$configurat
58f0: 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20 20  ion bin]..
5900: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
5910: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 44 69   proc getBuildDi
5920: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
5930: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
5940: 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20  OTE: See if the
5950: 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65  "native" runtime
5960: 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e   option has been
5970: 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20 75 73   set.  If so, us
5980: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  e the..      #
5990: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 66       directory f
59a0: 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64  or the mixed-mod
59b0: 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e 6b 2e  e assembly (a.k.
59c0: 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20 69 6e  a. the native in
59d0: 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23 20 20  terop..      #
59e0: 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29 2e 20       assembly).
59f0: 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20   To enable this
5a00: 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63  option via the c
5a10: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74  ommand line, ent
5a20: 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20  er a..      #
5a30: 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69      command simi
5a40: 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68  lar to one of th
5a50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c  e following (all
5a60: 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a   on one line):..
5a70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5a80: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
5a90: 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69 7a  l.exe -initializ
5aa0: 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  e -runtimeOption
5ab0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 23   native..      #
5ac0: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
5ad0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
5ae0: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
5af0: 20 20 20 23 20 20 20 20 20 20 20 54 6f 20 65 6e     #       To en
5b00: 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e  able this option
5b10: 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64   via the command
5b20: 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f 20 74   line prior to t
5b30: 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a 20 20  he "beta 16"..
5b40: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 65      #       rele
5b50: 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20 74 68  ase of Eagle, th
5b60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 6d  e following comm
5b70: 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65 64  and must be used
5b80: 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20 20 20   instead..
5b90: 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20 61 6c  #       (also al
5ba0: 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d  l on one line):.
5bb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
5bc0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
5bd0: 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69  ll.exe -initiali
5be0: 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61 6c 69  ze -postInitiali
5bf0: 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ze..      #
5c00: 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e 76 6f      "object invo
5c10: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
5c20: 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e 74  etActive AddRunt
5c30: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
5c40: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  "..      #
5c50: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c     -file .\path\
5c60: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20  to\all.eagle..
5c70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
5c80: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
5c90: 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d  build_directory]
5ca0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
5cb0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
5cc0: 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f  $::build_directo 5cd0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ry] > 0} then {. 5ce0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5cf0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 5d00: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 5d10: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 5d20: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 5d30: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 den;.. # 5d40: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 5d50: 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d use it verbatim 5d60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 5d70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
5d80: 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 0d  build_directory.
5d90: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
5da0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5db0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
5dc0: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
5dd0: 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73 65  ime option is se
5de0: 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64  t, the mixed-mod
5df0: 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  e assembly..
5e00: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62      #       is b
5e10: 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20 49 6e  eing tested.  In
5e20: 20 74 68 61 74 20 63 61 73 65 2c 20 74 68 65 20   that case, the
5e30: 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c  path to the buil
5e40: 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  d directory..
5e50: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 6c       #       wil
5e60: 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 70 6c  l contain the pl
5e70: 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e 64 20  atform name and
5e80: 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69 65 73  all the binaries
5e90: 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20 20 20   under test..
5ea0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
5eb0: 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74 20 69  uld be present i
5ec0: 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f 72 79  n that directory
5ed0: 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74 69 76  .  If the "nativ
5ee0: 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20  e" runtime..
5ef0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 69      #       opti
5f00: 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74  on is not set, t
5f10: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  he build directo
5f20: 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e 73 69  ry will be consi
5f30: 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20 20 20  dered to be..
5f40: 20 20 20 20 20 23 20 20 20 20 20 20 20 22 70 6c       #       "pl
5f50: 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c 22 2c  atform-neutral",
5f60: 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61 62 6c   with the notabl
5f70: 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20 61  e exception of a
5f80: 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  ny native..
5f90: 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d     #       assem
5fa0: 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c 69 74  bly (e.g. "SQLit
5fb0: 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 29 20  e.Interop.dll")
5fc0: 63 6f 70 69 65 64 20 74 68 65 72 65 20 64 75 72  copied there dur
5fd0: 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..
5fe0: 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 70   #       build p
5ff0: 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e 20 20  rocess itself.
6000: 49 66 20 74 68 65 20 62 75 69 6c 64 20 70 72 6f  If the build pro
6010: 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64 6f 65  cess somehow doe
6020: 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23  s not..        #
6030: 20 20 20 20 20 20 20 63 6f 70 79 20 74 68 65 20         copy the
6040: 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79 20  native assembly
6050: 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72  for this platfor
6060: 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 74  m, most of the t
6070: 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20 23 20  ests..        #
6080: 20 20 20 20 20 20 69 6e 20 74 68 65 20 73 75 69        in the sui
6090: 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 62  te will simply b
60a0: 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65 6e 65  e skipped.  Gene
60b0: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking,
60c0: 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23  there..        #
60d0: 20 20 20 20 20 20 20 61 72 65 20 74 77 6f 20 77         are two w
60e0: 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74 68 65  ays to build the
60f0: 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e 20 70   binaries when p
6100: 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75 6e 20  reparing to run
6110: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
6120: 20 20 20 20 20 74 65 73 74 20 73 75 69 74 65 3a       test suite:
6130: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6140: 20 20 20 20 20 23 20 20 20 20 20 20 20 31 2e 20       #       1.
6150: 42 75 69 6c 64 20 74 68 65 20 73 65 70 61 72 61  Build the separa
6160: 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64 20 6e  te managed and n
6170: 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69 65 73  ative assemblies
6180: 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20 20 20   using some..
6190: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
61a0: 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c 61 72  commands similar
61b0: 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d   to:..        #.
61c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
61d0: 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b      build.bat ${ 61e0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4d 61 Configuration}Ma 61f0: 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c 61 74 nagedOnly${Plat
6200: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23  form}..        #
6210: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e            build.
6220: 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74  bat ${Configurat 6230: 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 20 24 ion}NativeOnly$
6240: 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20  {Platform}..
6250: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6260: 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20            Where
6270: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d  ${Configuration} 6280: 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 is either "Debu 6290: 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 g" or "Release" 62a0: 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 and.. # 62b0: 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f${Platfo
62c0: 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57  rm} is either "W
62d0: 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 0d  in32" or "x64"..
62e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
62f0: 20 20 20 20 23 20 20 20 20 20 20 20 32 2e 20 42      #       2. B
6300: 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64 2d 6d  uild the mixed-m
6310: 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75 73 69  ode assembly usi
6320: 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d  ng a command sim
6330: 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20  ilar to:..
6340: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
6350: 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61          build.ba
6360: 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f  t ${Configuratio 6370: 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a n}${Platform}..
6380: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6390: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57 68     #          Wh
63a0: 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74  ere ${Configurat 63b0: 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 ion} is either " 63c0: 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 Debug" or "Relea 63d0: 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 se" and.. 63e0: 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c #${Pl
63f0: 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65  atform} is eithe
6400: 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36  r "Win32" or "x6
6410: 34 22 2e 20 20 49 66 20 74 68 69 73 20 63 6f 6d  4".  If this com
6420: 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20  mand is..
6430: 20 23 20 20 20 20 20 20 20 20 20 20 75 73 65 64   #          used
6440: 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20  , various tests
6450: 74 68 61 74 20 72 65 71 75 69 72 65 20 73 75 70  that require sup
6460: 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e 61 67  plementary manag
6470: 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ed..        #
6480: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 69 65         assemblie
6490: 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20 6d 61  s (e.g. LINQ) ma
64a0: 79 20 62 65 20 73 6b 69 70 70 65 64 20 75 6e 6c  y be skipped unl
64b0: 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61 72 69  ess those binari
64c0: 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  es..        #
64d0: 20 20 20 20 20 20 20 61 72 65 20 73 75 62 73 65         are subse
64e0: 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64 20 69  quently copied i
64f0: 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63 74 20  nto the correct
6500: 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e 20  directory (i.e.
6510: 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  by..        #
6520: 20 20 20 20 20 20 20 22 74 65 73 74 5f 61 6c 6c         "test_all
6530: 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20 20 20  .bat")...
6540: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
6550: 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20 61 6c      Note that al
6560: 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 63  l of the build c
6570: 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 77 69  ommands above wi
6580: 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20 75 73  ll default to us
6590: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ing..        #
65a0: 20 20 20 20 20 74 68 65 20 6c 61 74 65 73 74 20       the latest
65b0: 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69  version of MSBui
65c0: 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61 6e 64  ld available and
65d0: 20 74 68 65 20 22 74 65 73 74 5f 79 65 61 72 22   the "test_year"
65e0: 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20   may..        #
65f0: 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 62 65        need to be
6600: 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f 72 64   adjusted accord
6610: 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61 6c 6c  ingly to actuall
6620: 79 20 72 75 6e 20 74 68 65 20 74 65 73 74 20 73  y run the test s
6630: 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  uite...        #
6640: 20 20 20 20 20 20 20 52 65 66 65 72 20 74 6f 20         Refer to
6650: 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69 6e 20  the comments in
6660: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 66  [getBuildYear] f
6670: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74  or more informat
6680: 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ion on..
6690: 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f 20 73  #       how to s
66a0: 65 74 20 74 68 69 73 20 76 61 72 69 61 62 6c 65  et this variable
66b0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
66c0: 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65        set native
66d0: 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69   [hasRuntimeOpti
66e0: 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20  on native]....
66f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f        return [jo
6700: 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  inBuildDirectory
6710: 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75 69   $native [getBui 6720: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d ldBaseDirectory] 6730: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 6740: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 5b [getBuildYear] [ 6750: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d getBuildPlatform 6760: 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42 75$native] [getBu
6770: 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ildConfiguration
6780: 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ]]..      }..
6790: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
67a0: 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f  getReleaseVersio
67b0: 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  n {} {..      #.
67c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
67d0: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 72 65  igure out the re
67e0: 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66 6f  lease version fo
67f0: 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20 62  r use with the b
6800: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a  uild directory..
6810: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68        #       wh
6820: 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  en checking for
6830: 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61 73  available releas
6840: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
6850: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
6860: 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f 76  ists ::release_v
6870: 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20  ersion] && \..
6880: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
6890: 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61 73  length $::releas 68a0: 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 e_version] > 0} 68b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 68c0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 68d0: 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20 76 E: The release v 68e0: 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 ersion has been 68f0: 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65 72 overridden; ther 6900: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a 20 efore, use it.. 6910: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 # v 6920: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 6930: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 6940: 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 urn$::release_v
6950: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20  ersion..      }
6960: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
6970: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
6980: 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76 65  E: No release ve
6990: 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  rsion is availab
69a0: 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d  le, return an em
69b0: 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20  pty string...
69c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20       #       It
69d0: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to
69e0: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20  return an empty
69f0: 73 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61  string here beca
6a00: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..
6a10: 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20   #       result
6a20: 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  of this procedur
6a30: 65 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69  e may be used wi
6a40: 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d  th [file join]..
6a50: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
6a60: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
6a70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
6a80: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
6a90: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69  ildFileName { fi
6aa0: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d  leName {platform
6ab0: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
6ac0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6ad0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65   Returns the spe
6ae0: 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  cified file name
6af0: 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c   as if it were l
6b00: 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20  ocated in the..
6b10: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69       #       bui
6b20: 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69  ld directory, di
6b30: 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72  scarding any dir
6b40: 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69  ectory informati
6b50: 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20  on present..
6b60: 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65    #       in the
6b70: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72   file name as pr
6b80: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
6b90: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ller...      #..
6ba0: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
6bb0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
6bc0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  e \..          [
6bd0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75  file join [getBu
6be0: 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 20 24 70  ildDirectory] $p 6bf0: 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 latform [file ta 6c00: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d il$fileName]]].
6c10: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
6c20: 20 20 23 20 48 41 43 4b 3a 20 57 68 65 6e 20 72    # HACK: When r
6c30: 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 2c  unning on WoW64,
6c40: 20 61 73 73 75 6d 65 20 74 68 65 20 74 65 73 74   assume the test
6c50: 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65   executables are
6c60: 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20   present..
6c70: 23 20 20 20 20 20 20 20 77 69 74 68 20 74 68 65  #       with the
6c80: 20 22 33 32 22 20 73 75 66 66 69 78 20 6f 6e 20   "32" suffix on
6c90: 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  them...      #..
6ca0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75 6e        if {[isRun
6cb0: 6e 69 6e 67 57 6f 57 36 34 5d 20 26 26 20 5b 66  ningWoW64] && [f
6cc0: 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 24 72  ile extension $r 6cd0: 65 73 75 6c 74 5d 20 65 71 20 22 2e 65 78 65 22 esult] eq ".exe" 6ce0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6cf0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61 70 set result [ap 6d00: 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72 pendArgs [file r 6d10: 6f 6f 74 6e 61 6d 65 20 24 72 65 73 75 6c 74 5d ootname$result]
6d20: 20 33 32 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20   32.exe]..
6d30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
6d40: 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d  n $result.. } 6d50: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 6d60: 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f tExternalDirecto 6d70: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ry {} {.. # 6d80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 6d90: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 This procedure r 6da0: 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 eturns the direc 6db0: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 65 tory where the e 6dc0: 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 79 0d 0a xternal binary.. 6dd0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 # fi 6de0: 6c 65 73 20 61 72 65 20 6c 6f 63 61 74 65 64 2e les are located. 6df0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6e00: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 return [file na 6e10: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 64 tivename [file d 6e20: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 irname [file dir 6e30: 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 6e 61 72 name [info binar 6e40: 79 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d y]]]].. }.... 6e50: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e . proc getBin 6e60: 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 aryDirectory {} 6e70: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 6e80: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 # NOTE: This p 6e90: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 rocedure returns 6ea0: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 the directory w 6eb0: 68 65 72 65 20 74 68 65 20 74 65 73 74 20 61 70 here the test ap 6ec0: 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 plication.. 6ed0: 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 # itself 6ee0: 28 69 2e 65 2e 20 74 68 65 20 45 61 67 6c 65 20 (i.e. the Eagle 6ef0: 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61 74 65 shell) is locate 6f00: 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 65 d. This will be 6f10: 20 75 73 65 64 20 61 73 0d 0a 20 20 20 20 20 20 used as.. 6f20: 23 20 20 20 20 20 20 20 74 68 65 20 64 65 73 74 # the dest 6f30: 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 ination for the 6f40: 63 6f 70 69 65 64 20 53 79 73 74 65 6d 2e 44 61 copied System.Da 6f50: 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 ta.SQLite native 6f60: 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 and.. # 6f70: 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 managed asse 6f80: 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 62 65 63 mblies (i.e. bec 6f90: 61 75 73 65 20 74 68 69 73 20 69 73 20 6f 6e 65 ause this is one 6fa0: 20 6f 66 20 74 68 65 20 66 65 77 20 70 6c 61 63 of the few plac 6fb0: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 6fc0: 20 20 77 68 65 72 65 20 74 68 65 20 43 4c 52 20 where the CLR 6fd0: 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 66 69 will actually fi 6fe0: 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 6d nd and load them 6ff0: 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 20 properly)... 7000: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 7010: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 [info exists ::b 7020: 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d inary_directory] 7030: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 7040: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 7050: 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74$::binary_direct
7060: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
7070: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
7080: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
7090: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
70a0: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
70b0: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
70c0: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
70d0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
70e0: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
70f0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
7100: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $7110: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 7120: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 7130: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 7140: 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d rn [info binary] 7150: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 7160: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 7170: 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d tExternalFileNam 7180: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b e { fileName } { 7190: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 71a0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 # NOTE: Returns 71b0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 the specified f 71c0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 ile name as if i 71d0: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 t were located i 71e0: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 71f0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c 7200: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 ontaining the ex 7210: 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 2e ternal binaries. 7220: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7230: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 return [file na 7240: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 7250: 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 6e 61 6c oin [getExternal 7260: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 Directory]$file
7270: 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  Name]]..    }...
7280: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 69  ..    proc getBi
7290: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66  naryFileName { f
72a0: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
72b0: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
72c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
72d0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70  : Returns the sp
72e0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  ecified file nam
72f0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  e as if it were
7300: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a  located in the..
7310: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69        #       bi
7320: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2c 20  nary directory,
7330: 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64  discarding any d
7340: 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61  irectory informa
7350: 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20  tion present..
7360: 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74      #       in t
7370: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  he file name as
7380: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
7390: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
73a0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
73b0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
73c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
73d0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61  le join [getBina
73e0: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c  ryDirectory] $pl 73f0: 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 atform [file tai 7400: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a l$fileName]]]..
7410: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
7420: 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79  oc getCoreBinary
7430: 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70 6c 61 74  FileName { {plat
7440: 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61 6e 64 61  form ""} {standa
7450: 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  rd false} } {..
7460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7470: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
7480: 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 20  e full path for
7490: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
74a0: 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63  ing the SQLite c
74b0: 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ore..      #
74c0: 20 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72     native librar
74d0: 79 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73 20  y code for this
74e0: 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73 74  platform.  First
74f0: 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65 20  , check and see
7500: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  if..      #
7510: 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72    the SQLite cor
7520: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
7530: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
7540: 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c  n loaded.  Next,
7550: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7560: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61 74  fallback to what
7570: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 73   the full path s
7580: 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64 20  hould be, based
7590: 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d 0a  on whether the..
75a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69        #       mi
75b0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
75c0: 79 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20  y is being used
75d0: 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of
75e0: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..
75f0: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66     #       platf
7600: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  orm...      #..
7610: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
7620: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
7630: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
7640: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
7650: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
7660: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
7670: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7680: 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   _SQLiteNativeMo
7690: 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  duleFileName..
76a0: 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20      } fileName]
76b0: 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67 20  == 0 && [string
76c0: 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65  length $fileName 76d0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 76e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 76f0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 # NOTE: The SQ 7700: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 Lite core native 7710: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 library has alr 7720: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 eady been loaded 7730: 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 20 via.. # 7740: 20 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 65 the native 7750: 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 library pre-loa 7760: 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 61 der. Return tha 7770: 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e t file name now. 7780: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 7790: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c return$fil
77a0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  eName..      }..
77b0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73  ..      if {[has
77c0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61  RuntimeOption na
77d0: 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tive]} then {..
77e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
77f0: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
7800: 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20   the mixed-mode
7810: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61  assembly file na
7820: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  me...        #..
7830: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
7840: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
7850: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
7860: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69  file join [getBi
7870: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24  naryDirectory] $7880: 70 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e platform System. 7890: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d Data.SQLite.dll] 78a0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 ].. } elsei 78b0: 66 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 74 68 f {$standard} th
78c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
78d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
78e0: 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65   Attempt to dete
78f0: 72 6d 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65  rmine the native
7900: 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53  -only standard S
7910: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0d 0a 20  QLite library..
7920: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
7930: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 69  ile name for thi
7940: 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74  s platform and t
7950: 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a  hen return it...
7960: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7970: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
7980: 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69  ameOnly [getNati
7990: 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d  veLibraryFileNam
79a0: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20  esOnly] {..
79b0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
79c0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
79d0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
79e0: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
79f0: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
7a00: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66  ry] $platform$f
7a10: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d  ileNameOnly]]...
7a20: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
7a30: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 7a40: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 7a50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 7a60: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 rn$fileName..
7a70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
7a80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
7a90: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
7aa0: 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 72  E: Fallback to r
7ab0: 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61 74  eturning the nat
7ac0: 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72  ive-only standar
7ad0: 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  d SQLite library
7ae0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
7af0: 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20    file name for
7b00: 57 69 6e 64 6f 77 73 2e 0d 0a 20 20 20 20 20 20  Windows...
7b10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
7b20: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  urn [file native
7b30: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
7b40: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
7b50: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
7b60: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 73 71  ry] $platform sq 7b70: 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 lite3.dll]].. 7b80: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7b90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7ba0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 # NOTE: Return t 7bb0: 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 he native-only i 7bc0: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 7bd0: 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 file name... 7be0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 7bf0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 eturn [file nati 7c00: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 7c10: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join 7c20: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 [getBinaryDirec 7c30: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 tory]$platform
7c40: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
7c50: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ll]]..      }..
7c60: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
7c70: 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63  c getCommonDirec
7c80: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  tory {} {..
7c90: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
7ca0: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
7cb0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72   returns the dir
7cc0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
7cd0: 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20   test scripts..
7ce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
7cf0: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20  uld be located.
7d00: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69   By default, thi
7d10: 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74  s just returns t
7d20: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
7d30: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
7d40: 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20  irectory...
7d50: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
7d60: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d  nfo exists ::com
7d70: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  mon_directory] &
7d80: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
7d90: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 7da0: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 7db0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 7dc0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 7dd0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 7de0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 ocation of the c 7df0: 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 ommon directory 7e00: 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 has been set;.. 7e10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 7e20: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 7e30: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 7e40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
7e50: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
7e60: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
7e70: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
7e80: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72  :vendor_director
7e90: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
7ea0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
7eb0: 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65  h $::vendor_dire 7ec0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 7ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 7ee0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 7ef0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 7f00: 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 he vendor direct 7f10: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 ory has been set 7f20: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 7f30: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 7f40: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 7f50: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 7f60: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
7f70: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
7f80: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
7f90: 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  ts ::tcl_library
7fa0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
7fb0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
7fc0: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d   $::tcl_library] 7fd0: 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 7fe0: 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 [file isdir 7ff0: 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 ectory$::tcl_li
8000: 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  brary]} then {..
8010: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8020: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76     # NOTE: The v
8030: 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65  ariable with the
8040: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
8050: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
8060: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
8070: 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65      set and appe
8080: 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  ars to be a real
8090: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
80a0: 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20   not embedded..
80b0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
80c0: 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74  ithin a file); t
80d0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
80e0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
80f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 8100: 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 tcl_library.. 8110: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 8120: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8130: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 8140: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 8150: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 8160: 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 executable... 8170: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 8180: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 return [info bi 8190: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a nary].. }.. 81a0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 81b0: 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 oc getDatabaseDi 81c0: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 81d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 81e0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 81f0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 8200: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 8210: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 8220: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 8230: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 8240: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 8250: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 , this just uses 8260: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a the temporary.. 8270: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 8280: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 rectory configur 8290: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 ed for this syst 82a0: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 em... #.. 82b0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 82c0: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f ists ::database_ 82d0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 82e0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 82f0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
8300: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  abase_directory]
8310: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
8320: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8330: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
8340: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
8350: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20  abase directory
8360: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
8370: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
8380: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
8390: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
83a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
83b0: 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f  urn $::database_ 83c0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 83d0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 83e0: 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 exists ::scratc 83f0: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 h_directory] && 8400: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 8410: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 ring length$::s
8420: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
8430: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
8440: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8450: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
8460: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  cation of the sc
8470: 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20  ratch directory
8480: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
8490: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
84a0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
84b0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
84c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
84d0: 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  urn $::scratch_d 84e0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 84f0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 8500: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d return [getTem 8510: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 poraryPath].. 8520: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 8530: 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 proc getTemp 8540: 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b oraryDirectory { 8550: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 8560: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 8570: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 8580: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 8590: 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f where the tempo 85a0: 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 rary files.. 85b0: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 85c0: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 be located. By 85d0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a default, this j 85e0: 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d ust uses the tem 85f0: 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 8600: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 8610: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 configured for t 8620: 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 his system... 8630: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 8640: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 8650: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f emporary_directo 8660: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 8670: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 8680: 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f th$::temporary_
8690: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
86a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
86b0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
86c0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
86d0: 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
86e0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
86f0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
8700: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
8710: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
8720: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
8730: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $8740: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 8750: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 8760: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 8770: 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 sts ::scratch_di 8780: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 8790: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 87a0: 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 length$::scrat
87b0: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ch_directory] >
87c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
87d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
87e0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
87f0: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63  on of the scratc
8800: 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  h directory has
8810: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
8820: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
8830: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
8840: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
8850: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
8860: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 8870: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 8880: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 8890: 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 turn [getTempora 88a0: 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d ryPath].. } 88b0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 88c0: 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 65 4f proc getExecuteO 88d0: 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 nSetup {} {.. 88e0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 88f0: 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f 6f 6e sts ::execute_on 8900: 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a 20 20 _setup] && \.. 8910: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 8920: 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 75 74 length$::execut
8930: 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20 30 7d  e_on_setup] > 0}
8940: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8950: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
8960: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 63  TE: Return the c
8970: 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20 74 6f  onfigured SQL to
8980: 20 65 78 65 63 75 74 65 20 64 75 72 69 6e 67 20   execute during
8990: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
89a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
89b0: 73 65 74 75 70 20 70 72 6f 63 65 64 75 72 65 20  setup procedure
89c0: 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20  (i.e. for every
89d0: 74 65 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  test database co
89e0: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
89f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
8a00: 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75 74 65  eturn $::execute 8a10: 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 20 20 _on_setup.. 8a20: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 8a30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8a40: 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 NOTE: By default 8a50: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 , there is no SQ 8a60: 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 L to execute dur 8a70: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti 8a80: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 on.. # 8a90: 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 setup proced 8aa0: 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 ure (i.e. for ev 8ab0: 65 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 ery test databas 8ac0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a e connection)... 8ad0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8ae0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 8af0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 8b00: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 . proc getTes 8b10: 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 tOverridesPreamb 8b20: 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 le { {extraVarNa 8b30: 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 mes ""} } {.. 8b40: 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 set varNames 8b50: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... 8b60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 8b70: 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 If available, s 8b80: 74 61 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 tart with the ma 8b90: 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 ster list of tes 8ba0: 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 t override.. 8bb0: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 8bc0: 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 les... #.. 8bd0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 8be0: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 xists ::test_ove 8bf0: 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 rrides] && \.. 8c00: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 [llength 8c10: 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64$::test_overrid
8c20: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
8c30: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61  .        eval la
8c40: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24  ppend varNames $8c50: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 ::test_overrides 8c60: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 8c70: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8c80: 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 TE: If requested 8c90: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 by our caller, 8ca0: 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e add any addition 8cb0: 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 al variable.. 8cc0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 # names 8cd0: 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 to copy now... 8ce0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 8cf0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 {[llength$extr
8d00: 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20  aVarNames] > 0}
8d10: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8d20: 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72  eval lappend var
8d30: 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e  Names $extraVarN 8d40: 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ames.. }... 8d50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8d60: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 8d70: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e e script fragmen 8d80: 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 t to be returned 8d90: 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 by processing e 8da0: 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ach.. # 8db0: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 variable name 8dc0: 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 and adding the 8dd0: 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 72 69 nececessary scri 8de0: 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 pt fragments for 8df0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8e00: 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 each one... 8e10: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 #.. set re 8e20: 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 sult "".... 8e30: 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 foreach varName 8e40: 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20$varNames {..
8e50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8e60: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
8e70: 68 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f  he qualified glo
8e80: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  bal variable nam
8e90: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
8ea0: 20 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56         set fullV
8eb0: 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  arName [appendAr
8ec0: 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d  gs :: $varName]. 8ed0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8ee0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do 8ef0: 65 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 es the variable 8f00: 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e exist in this in 8f10: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 terpreter contex 8f20: 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t?.. #.. 8f30: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 8f40: 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 exists$fullVar
8f50: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
8f60: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
8f70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70        # NOTE: Ap
8f80: 70 65 6e 64 20 61 20 73 63 72 69 70 74 20 66 72  pend a script fr
8f90: 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65  agment to the re
8fa0: 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63  sult that will c
8fb0: 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20  orrectly..
8fc0: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79      #       copy
8fd0: 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76   any contained v
8fe0: 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20  alue to another
8ff0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74  interpreter cont
9000: 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ext...
9010: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  #..          app
9020: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73  end result \n "s
9030: 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d  et " $fullVarNam 9040: 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 66 75 e " \{" [set$fu
9050: 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20  llVarName] \}..
9060: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9070: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
9080: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
9090: 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69  he result contai
90a0: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  ns one or more s
90b0: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c  cript fragments,
90c0: 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20   append a..
90d0: 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65   #       newline
90e0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
90f0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
9100: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20  ngth $result] > 9110: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 9120: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 append result 9130: 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n.. }.... 9140: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
9150: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
9160: 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53 79 73      proc moveSys
9170: 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
9180: 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74 6f 72  Config { {restor
9190: 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73  e false} {verbos
91a0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  e false} } {..
91b0: 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72      set director
91c0: 79 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  y [object invoke
91d0: 20 41 70 70 44 6f 6d 61 69 6e 20 43 75 72 72 65   AppDomain Curre
91e0: 6e 74 44 6f 6d 61 69 6e 2e 42 61 73 65 44 69 72  ntDomain.BaseDir
91f0: 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20  ectory]....
9200: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
9210: 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20  gth $directory] 9220: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 9230: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
9240: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
9250: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 9260: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 9270: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 9280: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 9290: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" 92a0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 92b0: 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c te.dll.config\", 92c0: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 92d0: 20 20 20 20 22 6e 6f 20 62 61 73 65 20 64 69 72 "no base dir 92e0: 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 ectory\n"].. 92f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 }.. r 9300: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. 9310: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 .. set file 9320: 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e 6f Name(1) [file no 9330: 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 rmalize \.. 9340: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 [file join 9350: 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 74 65$directory Syste
9360: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
9370: 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20  l.config]]....
9380: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
9390: 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67 73 20  (2) [appendArgs
93a0: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e 6d 6f  $fileName(1) .mo 93b0: 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ved].... if 93c0: 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 65 6e {$restore} then
93d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
93e0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 93f0: 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 65 6e leName(2)]} then 9400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 {.. fi 9410: 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e le rename$fileN
9420: 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61 6d 65  ame(2) $fileName 9430: 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 (1).... 9440: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
9450: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
9460: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 9470: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 9480: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 9490: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f "---- mo 94a0: 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ved \""$fileNam
94b0: 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22 22 20  e(2) "\" to \""
94c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
94d0: 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20     $fileName(1) 94e0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 94f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 9500: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 9510: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
9520: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
9530: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 9540: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 9550: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 9560: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 9570: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 pped moving \"" 9580: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 0d 0a$fileName(2) \..
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95a0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
95b0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
95c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
95d0: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
95e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
95f0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 9600: 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 65 6e leName(1)]} then 9610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 {.. fi 9620: 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e le rename$fileN
9630: 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61 6d 65  ame(1) $fileName 9640: 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 (2).... 9650: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
9660: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
9670: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 9680: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 9690: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 96a0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f "---- mo 96b0: 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ved \""$fileNam
96c0: 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22 22 20  e(1) "\" to \""
96d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
96e0: 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20     $fileName(2) 96f0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 9700: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 9710: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 9720: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
9730: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
9740: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 9750: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 9760: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 9770: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 9780: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 pped moving \"" 9790: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 0d 0a$fileName(1) \..
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
97b0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
97c0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
97d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
97e0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
97f0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
9800: 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72 65 61  getAppDomainPrea
9810: 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78 20 22  mble { {prefix "
9820: 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7d  "} {suffix ""} }
9830: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
9840: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
9850: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
9860: 73 20 61 20 74 65 73 74 20 73 65 74 75 70 20 73  s a test setup s
9870: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 73  cript fragment s
9880: 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20 20  uitable for..
9890: 20 20 20 23 20 20 20 20 20 20 20 65 76 61 6c 75     #       evalu
98a0: 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74 65  ation by an inte
98b0: 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64 20  rpreter created
98c0: 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 61  in an isolated a
98d0: 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20  pplication..
98e0: 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61 69 6e    #       domain
98f0: 2e 20 20 54 68 65 20 73 63 72 69 70 74 20 66 72  .  The script fr
9900: 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74  agment being ret
9910: 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75  urned will be su
9920: 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20 20  rrounded by..
9930: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 70     #       the p
9940: 72 65 66 69 78 20 61 6e 64 20 73 75 66 66 69 78  refix and suffix
9950: 20 22 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e   "script fragmen
9960: 74 73 22 20 73 70 65 63 69 66 69 65 64 20 62 79  ts" specified by
9970: 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20 20   our caller,..
9980: 20 20 20 20 23 20 20 20 20 20 20 20 69 66 20 61      #       if a
9990: 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72 65 20  ny.  The entire
99a0: 73 63 72 69 70 74 20 62 65 69 6e 67 20 72 65 74  script being ret
99b0: 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75  urned will be su
99c0: 62 73 74 69 74 75 74 65 64 20 76 69 61 0d 0a 20  bstituted via..
99d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 75       #       [su
99e0: 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f 6e  bst], in the con
99f0: 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c  text of our call
9a00: 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69 6e 67  er, before being
9a10: 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20   returned...
9a20: 20 20 23 20 20 20 20 20 20 20 54 68 69 73 20 73    #       This s
9a30: 74 65 70 20 69 73 20 6e 65 63 65 73 73 61 72 79  tep is necessary
9a40: 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c 69   so that some li
9a50: 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20 69 6e  mited context in
9a60: 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  formation,..
9a70: 20 20 23 20 20 20 20 20 20 20 70 72 69 6d 61 72    #       primar
9a80: 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f 20 74  ily related to t
9a90: 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 63  he testing direc
9aa0: 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65 20 74  tories, can be t
9ab0: 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20 20 20  ransferred..
9ac0: 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65    #       to the
9ad0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20   interpreter in
9ae0: 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61 70 70  the isolated app
9af0: 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c  lication domain,
9b00: 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20 20   making it..
9b10: 20 20 23 20 20 20 20 20 20 20 61 62 6c 65 20 74    #       able t
9b20: 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 72  o successfully r
9b30: 75 6e 20 74 65 73 74 73 20 74 68 61 74 20 72 65  un tests that re
9b40: 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  quire one or mor
9b50: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
9b60: 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 69 6e  #       files in
9b70: 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65 73 74   one of the test
9b80: 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2e  ing directories.
9b90: 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c 64    Callers should
9ba0: 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20 20 20   keep in..
9bb0: 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74 68 61  #       mind tha
9bc0: 74 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70  t the test scrip
9bd0: 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67  t fragment being
9be0: 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f 74   returned cannot
9bf0: 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20 20   rely on..
9c00: 23 20 20 20 20 20 20 20 61 6e 79 20 73 63 72 69  #       any scri
9c10: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65  pt library proce
9c20: 64 75 72 65 73 20 74 68 61 74 20 61 72 65 20 6e  dures that are n
9c30: 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ot provided by t
9c40: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
9c50: 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20  #       library
9c60: 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20 22 69  package (i.e. "i
9c70: 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e 63  nit.eagle"), inc
9c80: 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70 72 6f  luding those pro
9c90: 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20  vided by..
9ca0: 23 20 20 20 20 20 20 20 74 68 65 20 45 61 67 6c  #       the Eagl
9cb0: 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 2c 20  e test package,
9cc0: 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c 65 20  unless the file
9cd0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d 20  containing them
9ce0: 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20  is loaded..
9cf0: 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c   #       manuall
9d00: 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68 65 72  y via some other
9d10: 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e 67 2e   mechanism (e.g.
9d20: 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20 61 70   by including ap
9d30: 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20  propriate..
9d40: 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b 61 67   #       [packag
9d50: 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20 5b 73  e require] or [s
9d60: 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73 20  ource] commands
9d70: 69 6e 20 74 68 65 20 70 72 65 66 69 78 20 6f 72  in the prefix or
9d80: 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20 20 23   suffix..      #
9d90: 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66 72         script fr
9da0: 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f 2c  agments).  Also,
9db0: 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20 72 65   all variable re
9dc0: 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61 6c 6c  ferences and all
9dd0: 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20 20 23   nested..      #
9de0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20         commands
9df0: 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20 73  (i.e. those in s
9e00: 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 29 20  quare brackets)
9e10: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
9e20: 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23 20   final..      #
9e30: 20 20 20 20 20 20 73 63 72 69 70 74 20 66 72 61        script fra
9e40: 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20 75  gment will end u
9e50: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
9e60: 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  d in the context
9e70: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23   of the..      #
9e80: 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67 20 69         calling i
9e90: 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64 20 6e  nterpreter and n
9ea0: 6f 74 20 74 68 65 20 74 61 72 67 65 74 20 69 6e  ot the target in
9eb0: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65  terpreter create
9ec0: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
9ed0: 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74 65 64  #       isolated
9ee0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
9ef0: 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65 20 64  ain unless the d
9f00: 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e 64 2f  ollar signs and/
9f10: 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20 20 20  or square..
9f20: 20 23 20 20 20 20 20 20 20 62 72 61 63 6b 65 74   #       bracket
9f30: 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c 79 20  s are specially
9f40: 71 75 6f 74 65 64 20 77 69 74 68 20 62 61 63 6b  quoted with back
9f50: 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20 20 20  slashes...
9f60: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
9f70: 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74  [uplevel 1 [list
9f80: 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64 41 72   subst [appendAr
9f90: 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a 20 20  gs $prefix {.. 9fa0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9fb0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c 5b 6f # NOTE: The $o 9fc0: 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e 64 20 bject$ command 9fd0: 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 20 69 may be missing i 9fe0: 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 6f 72 n some Eagle cor 9ff0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # a000: 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e 66 69 library confi a010: 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c 6f 6e gurations. Clon a020: 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 74 68 ing and using th a030: 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 e procedure.. a040: 20 20 20 20 20 23 20 20 20 20 20 20 20 5c 5b 63 # $c a050: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 hangeNativeRunti a060: 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 20 68 meOption$ may h a070: 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 65 20 elp to mitigate a080: 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 this... # a090: 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 20 63 .. proc c a0a0: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 hangeNativeRunti a0b0: 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 meOption \.. a0c0: 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 61 {[info a a0d0: 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 76 65 rgs changeNative a0e0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d 20 RuntimeOption]} a0f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b \.. { a100: 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 6e 67 [info body chang a110: 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 eNativeRuntimeOp a120: 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 20 20 tion]}.... a130: 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. a140: 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 69 76 changeNativ a150: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 5b eRuntimeOption [ a160: 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption a170: 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 20 20 native].. a180: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 }.. } [ge a190: 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 tTestOverridesPr a1a0: 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 eamble [list pat a1b0: 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d h test_channel]] a1c0: 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20$suffix]]]..
a1d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
a1e0: 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46  tryCopyExternalF
a1f0: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ile {..
a200: 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61     fileName {pla
a210: 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69  tform ""} {newFi
a220: 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72 62  leName ""} {verb
a230: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ose false} } {..
a240: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
a250: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78 74  FileName [getExt
a260: 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24 66  ernalFileName $f a270: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... a280: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi a290: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
a2a0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
a2b0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo a2c0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. a2d0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
a2e0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
a2f0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
a300: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
a310: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 65  kipped copying e
a320: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22 22  xternal file \""
a330: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName a340: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a350: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n a360: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. a370: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. a380: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } a390: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s a3a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 tring length$ne
a3b0: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  wFileName] > 0}
a3c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a3d0: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61  set targetFileNa
a3e0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  me [getBinaryFil
a3f0: 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61  eName $newFileNa a400: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 me$platform]..
a410: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
a420: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65         set targe
a430: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69  tFileName [getBi
a440: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi a450: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
a460: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
a470: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69      set targetDi
a480: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69  rectory [file di
a490: 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c  rname $targetFil a4a0: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 eName].... a4b0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. a4c0: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 if {![file a4d0: 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44 exists$targetD
a4e0: 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
a4f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c  {..          fil
a500: 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44  e mkdir $targetD a510: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. a520: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6c }.. fil a530: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 e copy -force$s
a540: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74  ourceFileName $t a550: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 argetFileName.. a560: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th a570: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp a580: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
a590: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
a5a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
a5b0: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78 74 65  ---- copied exte
a5c0: 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c  rnal file from \
a5d0: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  "" $sourceFileNa a5e0: 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d me "\" to \"" \. a5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61 .$ta
a600: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c  rgetFileName \"\
a610: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  n]..      } else
a620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
a630: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe a640: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. a650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- a660: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 -- failed to cop a670: 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 y external file a680: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 from \""$source
a690: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
a6a0: 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c          "\" to \
a6b0: 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  "" $targetFileNa a6c0: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. a6d0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... a6e0: 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69 6e proc tryCopyBin a6f0: 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 aryFile {.. a700: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 fileName a710: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e {platform ""} {n a720: 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b ewFileName ""} { a730: 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d verbose false} } a740: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f {.. set so a750: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 urceFileName [ge a760: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName a770: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66$fileName $platf a780: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 orm].... if a790: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 {![file exists a7a0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d$sourceFileName]
a7b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a7c0: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20    if {$verbose} a7d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a7e0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
a7f0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
a800: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
a810: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
a820: 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 72  ed copying binar
a830: 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72  y file \"" $sour a840: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. a850: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", a860: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi a870: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. a880: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 }.. retur a890: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... a8a0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string a8b0: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e length$newFileN
a8c0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
a8d0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
a8e0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
a8f0: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $a900: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 newFileName$pla
a910: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20  tform]..      }
a920: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
a930: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61  set targetFileNa
a940: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  me [getBuildFile
a950: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  Name $fileName$
a960: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20  platform]..
a970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20   }....      set
a980: 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 20  targetDirectory
a990: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74  [file dirname $t a9a0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a argetFileName].. a9b0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat a9c0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 ch {.. if a9d0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 {![file exists a9e0: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79$targetDirectory
a9f0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
aa00: 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20       file mkdir
aa10: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79  $targetDirectory aa20: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. aa30: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d file copy - aa40: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c force$sourceFil
aa50: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c  eName $targetFil aa60: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 eName.. }] aa70: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. aa80: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
aa90: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
aaa0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
aab0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
aac0: 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20  ied binary file
aad0: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source aae0: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 FileName "\" to aaf0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. ab00: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61$targetFileNa
ab10: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
ab20: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
ab30: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ ab40: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA ab50: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. ab60: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 "---- failed ab70: 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 20 66 to copy binary f ab80: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
ab90: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
abb0: 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69  to \"" $targetFi abc0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. abd0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... abe0: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 . proc tryCop abf0: 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 yBuildFile {.. ac00: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa ac10: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} ac20: 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 {newFileName "" ac30: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 } {verbose false ac40: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set ac50: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 sourceFileName ac60: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam ac70: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 e$fileName $pla ac80: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tform].... ac90: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist aca0: 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d s$sourceFileNam
acb0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
acc0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65      if {$verbose acd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ace0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
acf0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
ad00: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
ad10: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69         "---- ski
ad20: 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75 69  pped copying bui
ad30: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75  ld file \"" $sou ad40: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" ad60: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex ad70: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. ad80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 }.. retu ad90: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rn.. }.... ada0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string adb0: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 length$newFile
adc0: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
add0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  {..        set t
ade0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
adf0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
ae00: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70   $newFileName$p
ae10: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20  latform]..
ae20: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
ae30: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
ae40: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
ae50: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam ae60: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 e$platform]..
ae70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
ae80: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f  et targetDirecto
ae90: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ry [file dirname
aea0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName aeb0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ aec0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. aed0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis aee0: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ts$targetDirect
aef0: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
af00: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64          file mkd
af10: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ir $targetDirect af20: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ory.. }.. af30: 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 file cop af40: 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 y -force$source
af50: 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74  FileName $target af60: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 FileName.. af70: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. af80: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
af90: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
afa0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
afb0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
afc0: 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69 6c  copied build fil
afd0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72  e from \"" $sour afe0: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 ceFileName "\" t aff0: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 o \"" \.. b000: 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65$targetFile
b010: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
b020: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
b030: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes b040: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen b050: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. b060: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 "---- faile b070: 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 20 d to copy build b080: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
b090: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
b0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22  .            "\"
b0b0: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46   to \"" $targetF b0c0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. b0d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... b0e0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 .. proc tryDe b0f0: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 7b leteBinaryFile { b100: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 fileName {platf b110: 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 orm ""} {verbose b120: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. b130: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName b140: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa b150: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl b160: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... b170: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis b180: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
b190: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
b1a0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the b1b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t b1c0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
b1d0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b1e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b1f0: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
b200: 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 20  deleting binary
b210: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa b220: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. b230: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 "\", it does b240: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a not exist\n"].. b250: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. b260: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. b270: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { b280: 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c [catch {file del b290: 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 ete$fileName}]
b2a0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
b2b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t b2c0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app b2d0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. b2e0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c "---- del b2f0: 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 eted binary file b300: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
b310: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  "\n]..      } el
b320: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
b330: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan b340: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs b350: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " b360: 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 ---- failed to d b370: 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69 6c elete binary fil b380: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
b390: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  \"\n]..      }..
b3a0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
b3b0: 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c  oc tryDeleteBuil
b3c0: 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65  dFile { fileName
b3d0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b   {platform ""} {
b3e0: 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d  verbose false} }
b3f0: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69   {..      set fi
b400: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64  leName [getBuild
b410: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa b420: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d me$platform]...
b430: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c  .      if {![fil
b440: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa b450: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. b460: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
b470: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
b480: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te b490: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe b4a0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. b4b0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk b4c0: 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 ipped deleting b b4d0: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 uild file \""$f
b4e0: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
b4f0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
b500: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
b510: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
b520: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
b530: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
b540: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c   if {[catch {fil
b550: 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61  e delete $fileNa b560: 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 me}] == 0} then b570: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs b580: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
b590: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
b5b0: 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64 20  - deleted build
b5c0: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa b5d0: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. b5e0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. b5f0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
b600: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
b610: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
b620: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20     "---- failed
b630: 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64 20  to delete build
b640: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa b650: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. b660: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... b670: 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73 73 proc tryCopyAss b680: 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 embly {.. b690: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 fileName {p b6a0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 latform ""} {pdb b6b0: 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 true} {verbose b6c0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. b6d0: 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 tryCopyBuildFi b6e0: 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c le$fileName $pl b6f0: 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62 6f atform ""$verbo
b700: 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  se....      if {
b710: 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  $pdb} then {.. b720: 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 tryCopyBui b730: 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 ldFile [appendAr b740: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. b750: 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 [file rootname b760: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62$fileName] .pdb
b770: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24  ] $platform ""$
b780: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d  verbose..      }
b790: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
b7a0: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73  proc tryDeleteAs
b7b0: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20  sembly {..
b7c0: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b        fileName {
b7d0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64  platform ""} {pd
b7e0: 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65  b true} {verbose
b7f0: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
b800: 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61     tryDeleteBina
b810: 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ryFile $fileName b820: 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 62$platform $verb b830: 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 ose.... if b840: 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 {$pdb} then {..
b850: 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
b860: 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65  BinaryFile [appe
b870: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
b880: 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74        [file root
b890: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20  name $fileName] b8a0: 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 .pdb]$platform
b8b0: 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20  $verbose.. b8c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... b8d0: 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 proc tryLoadAss b8e0: 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 embly { fileName b8f0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d {platform ""} } b900: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 {.. set fi b910: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 leName [getBinar b920: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
b930: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. b940: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat b950: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 ch {.. se b960: 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 t assembly [obje b970: 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 ct load -loadtyp b980: 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 e File -alias$f
b990: 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
b9a0: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
b9b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
b9c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c      # NOTE: Now,
b9d0: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61   add the necessa
b9e0: 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  ry test constrai
b9f0: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  nt...        #..
ba00: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
ba10: 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74  raint [file root
ba20: 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20  name [file tail
ba30: 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20  $fileName]].... ba40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ba50: 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 # NOTE: Grab t ba60: 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 he image runtime ba70: 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 version from th ba80: 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61 75 e assembly becau ba90: 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 se.. # baa0: 20 20 20 20 73 65 76 65 72 61 6c 20 74 65 73 74 several test bab0: 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 s rely on it hav bac0: 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76 61 ing a certain va bad0: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d lue... #. bae0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons baf0: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr bb00: 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 gs [file tail$f
bb10: 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20  ileName] _ \..
bb20: 20 20 20 20 20 20 20 20 20 20 5b 24 61 73 73 65            [$asse bb30: 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 6d mbly ImageRuntim bb40: 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 eVersion]].... bb50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. bb60: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 # NOTE: Return bb70: 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 the full path of bb80: 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 the loaded file bb90: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. bba0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 return$fi
bbb0: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d  leName..      }.
bbc0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
bbd0: 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ""..    }.....
bbe0: 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65 52    proc isSQLiteR
bbf0: 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  eady {} {..
bc00: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
bc10: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
bc20: 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e   must return non
bc30: 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68  -zero only if th
bc40: 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 0d  e SQLite native.
bc50: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c  .      #       l
bc60: 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 20 53  ibrary and the S
bc70: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
bc80: 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  e managed assemb
bc90: 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20  ly are loaded..
bca0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64       #       and
bcb0: 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62   ready for use b
bcc0: 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  y the test suite
bcd0: 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 68  .  Currently, th
bce0: 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20  is procedure..
bcf0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
bd00: 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c  ld be called onl
bd10: 79 20 61 66 74 65 72 20 74 68 65 20 5b 74 72 79  y after the [try
bd20: 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 72  LoadAssembly] pr
bd30: 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20 20  ocedure has..
bd40: 20 20 20 23 20 20 20 20 20 20 20 62 65 65 6e 20     #       been
bd50: 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20  called to probe
bd60: 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e 44  for the System.D
bd70: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
bd80: 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ed assembly..
bd90: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 74     #       and t
bda0: 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69  he [checkForSQLi
bdb0: 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61  te] procedure ha
bdc0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f  s been called to
bdd0: 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20   probe for..
bde0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51    #       the SQ
bdf0: 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72  Lite native libr
be00: 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ary; otherwise,
be10: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 77  this procedure w
be20: 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20  ill simply..
be30: 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 73    #       always
be40: 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20   return zero...
be50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
be60: 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20  turn [expr {..
be70: 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74        [haveConst
be80: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74  raint System.Dat
be90: 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 61  a.SQLite] && [ha
bea0: 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c  veConstraint SQL
beb0: 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a  ite]..      }]..
bec0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
bed0: 6f 63 20 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d  oc matchPlatform
bee0: 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d   { platform } {.
bef0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
bf00: 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79  # NOTE: An empty
bf10: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the
bf20: 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74  platform means t
bf30: 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73  hat the build is
bf40: 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20   not..      #
bf50: 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20      [primarily]
bf60: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20  a native build;
bf70: 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c  therefore, it al
bf80: 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20  ways matches...
bf90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
bfa0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
bfb0: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30   $platform] == 0 bfc0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bfd0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. bfe0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... bff0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: c000: 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 Does the specif c010: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 ied platform mat c020: 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 ch up to the cur c030: 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 rent process?.. c040: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if c050: 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b {$platform eq [
c060: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
c070: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor c080: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 m(machine)]} the c090: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret c0a0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. c0b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. c0c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The c0d0: 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f specified platfo c0e0: 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 rm does not matc c0f0: 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c h up with the pl c100: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 atform.. # c110: 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 for the cu c120: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a rrent process... c130: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r c140: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. c150: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc c160: 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject c170: 43 6f 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 Command {} {.. c180: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N c190: 4f 54 45 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a OTE: Is the [obj c1a0: 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72 ect] command cur c1b0: 72 65 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 rently available c1c0: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ?.. #.. c1d0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { c1e0: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 [llength [info c c1f0: 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d ommands object]] c200: 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c > 0}].. }... c210: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b .. proc check c220: 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 ForSQLiteObjectC c230: 6f 6d 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c ommand { channel c240: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput c250: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
c260: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22   checking for \"
c270: 6f 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64  object\" command
c280: 20 75 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20   usage... "....
c290: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
c2a0: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69  exists ::no(sqli
c2b0: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29  teObjectCommand)
c2c0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
c2d0: 20 20 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a    [haveSQLiteObj
c2e0: 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
c2f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
c300: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ c310: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 n.. } else c320: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. c330: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e # NOTE: Un c340: 6c 65 73 73 20 77 65 20 61 72 65 20 66 6f 72 62 less we are forb c350: 69 64 64 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 idden from doing c360: 20 73 6f 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f so, add some co c370: 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20 nstraints.. c380: 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that c390: 77 69 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 will allow most c3a0: 6f 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 of the test suit c3b0: 65 20 74 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74 e to run (i.e. t c3c0: 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 hose.. # c3d0: 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 tests that c3e0: 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 do not directly c3f0: 20 72 65 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b rely upon the [ c400: 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 object] command) c410: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. c420: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info c430: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 exists ::no(shi c440: 6d 53 51 4c 69 74 65 41 73 73 65 6d 62 6c 79 43 mSQLiteAssemblyC c450: 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 onstraints)]} th c460: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. c470: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 addConstraint SQ c480: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Lite.. c490: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 addConstraint SQ c4a0: 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20 LiteInterop.. c4b0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr c4c0: 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 aint System.Data c4d0: 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 .SQLite.. c4e0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint c4f0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL c500: 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a ite.Encryption.. c510: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon c520: 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 straint System.D c530: 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d ata.SQLite.Linq. c540: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 ... add c550: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe c560: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. c570: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D c580: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 ata.SQLite.dll_v c590: 20 5b 67 65 74 42 75 69 6c 64 43 6c 72 56 65 72 [getBuildClrVer c5a0: 73 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 sion]].. c5b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if c5c0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : c5d0: 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 44 65 :no(shimSQLiteDe c5e0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 fineConstantCons c5f0: 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 traints)]} then c600: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 {.. for c610: 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 each defineConst c620: 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 ant [list \.. c630: 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER c640: 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e OP_EXTENSION_FUN c650: 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 CTIONS INTEROP_F c660: 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d TS5_EXTENSION \. c670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 . I c680: 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 NTEROP_JSON1_EXT c690: 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 ENSION INTEROP_P c6a0: 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 ERCENTILE_EXTENS c6b0: 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ION \.. c6c0: 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 INTEROP_REG c6d0: 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e EXP_EXTENSION IN c6e0: 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e TEROP_TEST_EXTEN c6f0: 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. c700: 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f INTEROP_TO c710: 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 TYPE_EXTENSION I c720: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 NTEROP_VIRTUAL_T c730: 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 ABLE \.. c740: 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f USE_INTERO c750: 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 P_DLL] {.. c760: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra c770: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs c780: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. c790: 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e defineConstan c7a0: 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t.System.Data.SQ c7b0: 4c 69 74 65 2e 20 24 64 65 66 69 6e 65 43 6f 6e Lite.$defineCon
c7c0: 73 74 61 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20  stant]..
c7d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
c7e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
c7f0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
c800: 28 73 68 69 6d 53 51 4c 69 74 65 56 69 73 75 61  (shimSQLiteVisua
c810: 6c 53 74 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e  lStudioConstrain
c820: 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ts)]} then {..
c830: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
c840: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
c850: 73 20 76 69 73 75 61 6c 53 74 75 64 69 6f 20 5b  s visualStudio [
c860: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a  getBuildYear]]..
c870: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
c880: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan c890: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. c8a0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... c8b0: 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 proc changeNati c8c0: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 veRuntimeOption c8d0: 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 { native } {.. c8e0: 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength c8f0: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 [info commands c900: 64 65 62 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c debug]] > 0 && \ c910: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle c920: 6e 67 74 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f ngth [info subco c930: 6d 6d 61 6e 64 73 20 64 65 62 75 67 20 72 75 6e mmands debug run c940: 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 timeoption]] > 0 c950: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. c960: 20 20 20 20 20 20 64 65 62 75 67 20 72 75 6e 74 debug runt c970: 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20 imeoption [expr c980: 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 {$native ? "add"
c990: 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61   : "remove"}] na
c9a0: 74 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d  tive..      }] =
c9b0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
c9c0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
c9d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
c9e0: 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
c9f0: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
ca00: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20   && [catch {..
ca10: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
ca20: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
ca30: 47 65 74 41 63 74 69 76 65 20 5b 65 78 70 72 20  GetActive [expr
ca40: 7b 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20  {$native ? \.. ca50: 20 20 20 20 20 20 20 20 20 20 22 41 64 64 52 75 "AddRu ca60: 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 ntimeOption" : " ca70: 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 RemoveRuntimeOpt ca80: 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 ion"}] native.. ca90: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th caa0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re cab0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. cac0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu cad0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. cae0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che caf0: 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 ckForSQLiteBuild cb00: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c s { channel {sel cb10: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ect false} } {.. cb20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # cb30: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for cb40: 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 every possible cb50: 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f valid combinatio cb60: 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 n of values used cb70: 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 when.. # cb80: 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 locating ou cb90: 74 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 t the build outp cba0: 75 74 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 ut directory, sh cbb0: 6f 77 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c owing each avail cbc0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 able.. # cbd0: 20 20 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 build variat cbe0: 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 ion along the wa cbf0: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. cc00: 20 20 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 foreach nativ cc10: 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 e [list false tr cc20: 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 ue] {.. f cc30: 6f 72 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 oreach year [get cc40: 42 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 BuildYears] {.. cc50: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach cc60: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b configuration [ cc70: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur cc80: 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 ations] {.. cc90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. cca0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi ccb0: 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 gure out the eff ccc0: 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 ective build pla ccd0: 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d tform. This is. cce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # ccf0: 20 20 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 based on wh cd00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b ether or not a [ cd10: 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 primarily] nativ cd20: 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 e build.. cd30: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is cd40: 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 being used. For cd50: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e [primarily] non cd60: 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d -native builds,. cd70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # cd80: 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 this will b cd90: 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e e an empty strin cda0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g... cdb0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 #.. s cdc0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get cdd0: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e BuildPlatform$n
cde0: 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  ative]....
cdf0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha ce00: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs ce10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. ce20: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki ce30: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da ce40: 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 ta.SQLite build ce50: 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 \"" [expr \.. ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e {$n
ce70: 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f  ative ? "native/
ce80: 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b  " : ""}] [expr {
ce90: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c  [string length \
cea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ceb0: 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30    $platform] > 0 cec0: 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 ? [appendArgs$
ced0: 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22  platform /] : ""
cee0: 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20  }] $year \.. cef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 /$c
cf00: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22  onfiguration "\"
cf10: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
cf20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
cf30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
cf40: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
cf50: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79  lified directory
cf60: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73   where the neces
cf70: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  sary..
cf80: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e    #       compon
cf90: 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e  ents for System.
cfa0: 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75  Data.SQLite shou
cfb0: 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20  ld be found...
cfc0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
cfd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72           set dir
cfe0: 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c  ectory [joinBuil
cff0: 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69  dDirectory $nati d000: 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ve \.. d010: 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 [getBuildB d020: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 aseDirectory]$y
d030: 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63  ear $platform$c
d040: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d  onfiguration]...
d050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
d060: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
d070: 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73  TE: Do the neces
d080: 73 61 72 79 20 66 69 6c 65 73 20 65 78 69 73 74  sary files exist
d090: 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f  ?  Currently, no
d0a0: 20 6f 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20   other steps..
d0b0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
d0c0: 20 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76    are taken to v
d0d0: 65 72 69 66 79 20 74 68 69 73 20 62 75 69 6c 64  erify this build
d0e0: 20 69 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61   is actually via
d0f0: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ble...
d100: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
d110: 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61   if {[isBuildAva
d120: 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24  ilable $native$
d130: 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
d140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
d150: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
d160: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20     # NOTE: When
d170: 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65  in "select" mode
d180: 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  , automatically
d190: 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74  select the first
d1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
d1b0: 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c  #       availabl
d1c0: 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65  e build of Syste
d1d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e  m.Data.SQLite an
d1e0: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20  d then return..
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
d200: 20 20 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79       immediately
d210: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
d220: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
d230: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && d240: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 [matchPlatform d250: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e$platform]} then
d260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
d270: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
d280: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
d290: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65  anually override
d2a0: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64   all the build d
d2b0: 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69  irectory selecti
d2c0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
d2d0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 61      #       rela
d2e0: 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e 67  ted test setting
d2f0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f  s in order to fo
d300: 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a  rce this build..
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d320: 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 74 65  #       of Syste
d330: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f  m.Data.SQLite to
d340: 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20   be used...
d350: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d370: 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69 76 65   {![changeNative
d380: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e  RuntimeOption $n d390: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a ative]} then {.. d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d3b0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
d3c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d3e0: 20 20 20 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65        "no, faile
d3f0: 64 20 74 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e  d to " [expr {$n d400: 61 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 ative ? "add" : d410: 22 72 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 "remove"}] \.. d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d430: 20 20 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69 " the \"nati d440: 76 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ve\" runtime opt d450: 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ion\n"].... d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret d470: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 urn false.. d480: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d4a0: 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 set ::test_year d4b0: 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20$year..
d4c0: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
d4d0: 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74  t_platform $plat d4e0: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 form.. d4f0: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test d500: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 _configuration$
d510: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d  configuration...
d520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
d530: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel d540: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d560: 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 "yes, selecte d570: 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 d (" [expr {$nat
d580: 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20  ive ? "native/"
d590: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65                [e
d5b0: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  xpr {[string len
d5c0: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > d5d0: 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 0 ? [appendArgs d5e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d5f0: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
d600: 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61  m /] : ""}] $yea d610: 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 r /$configurati
d620: 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20  on ")\n"]....
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d640: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
d650: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
d660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
d670: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel d680: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 yes\n.. d690: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. d6a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu d6c0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
d6d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d6e0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
d6f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
d700: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
d710: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
d720: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
d730: 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65  ForSQLiteRelease
d740: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c  s { channel {sel
d750: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ect false} } {..
d760: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d770: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
d780: 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f   past releases o
d790: 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  f System.Data.SQ
d7a0: 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65  Lite in the dire
d7b0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ctory..      #
d7c0: 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69       contained i
d7d0: 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61  n the "System.Da
d7e0: 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72  ta.SQLite" envir
d7f0: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c  onment variable,
d800: 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   if..      #
d810: 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20     present...
d820: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
d830: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65  [info exists ::e
d840: 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nv(System.Data.S
d850: 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20  QLite)] && \..
d860: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
d870: 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79  length $::env(Sy d880: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite d890: 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a )] > 0} then {.. d8a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d8b0: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build d8c0: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali d8d0: 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 fied directory w d8e0: 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 here the necessa d8f0: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ry.. # d900: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 components f d910: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S d920: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 QLite should be d930: 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 found... d940: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 #.. set d d950: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e irectory [file n d960: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file d970: 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. d980: 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65$::env(Syste
d990: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b  m.Data.SQLite) [
d9a0: 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f  getReleaseVersio
d9b0: 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n]]]....
d9c0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ d9d0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. d9e0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- d9f0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys da00: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite da10: 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 release \"" \.. da20: 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65$dire
da30: 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d  ctory "\"... "].
da40: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
da50: 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62  isReleaseAvailab
da60: 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c  le $directory pl da70: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. da80: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ da90: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
daa0: 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74  latform] == 0} t
dab0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
dac0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
dad0: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
dae0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
daf0: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && db00: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 [matchPlatform db10: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e$platform]} then
db20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
db30: 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65  set ::build_dire
db40: 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79  ctory $directory db50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... db60: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
db70: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c  appendArgs "yes,
db80: 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c   selected (" $pl db90: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d atform ")\n"]... dba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret dbb0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. dbc0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. dbd0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs dbe0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
dbf0: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c  Args "yes (" $pl dc00: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 atform ")\n"].. dc10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. dc20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. dc30: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
dc40: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20  hannel no\n....
dc50: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
dc60: 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65   path [lsort -de
dc70: 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c  creasing [file l
dc80: 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a  ist $directory * dc90: 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ]] {.. dca0: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis dcb0: 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 ts$path] && [fi
dcc0: 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24  le isdirectory $dcd0: 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 path]} then {.. dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu dcf0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
dd00: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
dd20: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
dd30: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
dd40: 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c  te release \"" \
dd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
dd60: 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e      $path "\"... dd70: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 "].... dd80: 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 if {[isRele dd90: 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 aseAvailable$pa
dda0: 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  th platform]} th
ddb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
ddc0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
ddd0: 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo dde0: 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b rm] == 0} then { ddf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. de00: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform de10: 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 unknown.. de20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i de40: 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d f {$select && [m
de50: 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c  atchPlatform $pl de60: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. de70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . de80: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 set ::build_d de90: 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a irectory$path..
dea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
deb0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann dec0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " ded0: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 yes, selected (" dee0: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22$platform ")\n"
def0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
df00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
df10: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
df20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
df40: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ df50: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 appendArgs "yes df60: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c ("$platform ")\
df70: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
df80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
df90: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dfb0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n dfc0: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 o\n.. dfd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. dfe0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } dff0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. e000: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. e010: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
e020: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
e030: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
e040: 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  ---- environment
e050: 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74   variable \"Syst
e060: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22  em.Data.SQLite\"
e070: 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20   is not " \..
e080: 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73           "set, s
e090: 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f  kipping check fo
e0a0: 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22  r releases...\n"
e0b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
e0c0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
e0d0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
e0e0: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c  proc checkForSQL
e0f0: 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61  iteLibrary { cha
e100: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20  nnel } {..
e110: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " e120: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo e130: 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 r SQLite core li e140: 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 brary... ".... e150: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { e160: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object e170: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + e180: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. e190: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. e1a0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi e1b0: 74 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f te3 SQLiteVersio e1c0: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 n.. } versi e1d0: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { e1e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e1f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che e200: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return e210: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e ed version was n e220: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b ull. If so, mak e230: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 e it easy.. e240: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 # to sp e250: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ot... #.. e260: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str e270: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 ing length$vers
e280: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
e290: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
e2a0: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20   version null..
e2b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
e2c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
e2d0: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
e2e0: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
e2f0: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
e300: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c  fier for the SQL
e310: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ite..        #
e320: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72       core librar
e330: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
e340: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
e350: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
e360: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
e370: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
e380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e390: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
e3a0: 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74  te.SQLite3 SQLit
e3b0: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  eSourceId..
e3c0: 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20     } sourceId]}
e3d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
e3e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
e3f0: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64   NOTE: We failed
e400: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
e410: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
e420: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20  tifier...
e430: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e440: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b  set sourceId unk
e450: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  nown..        }.
e460: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
e470: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
e480: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
e490: 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63  ned Fossil sourc
e4a0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73  e identifier was
e4b0: 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20   null.  If..
e4c0: 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20      #       so,
e4d0: 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20  make it easy to
e4e0: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
e4f0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
e500: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f  tring length $so e510: 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 urceId] == 0} th e520: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. e530: 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c set sourceId nul e540: 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a l.. }.... e550: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e560: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 # NOTE: Yes, e570: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core e580: 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 library appears e590: 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e to be available. e5a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e5b0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai e5c0: 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 nt SQLite.... e5d0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
e5e0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
e5f0: 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e  "yes (" $version e600: 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 " "$sourceId "
e610: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  )\n"]..      } e
e620: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
e630: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no e640: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. e650: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc e660: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e checkForSQLiteIn e670: 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 terop { channel e680: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 } {.. tputs e690: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
e6a0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c  checking for SQL
e6b0: 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65  ite interop asse
e6c0: 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  mbly... "....
e6d0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
e6e0: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
e6f0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
e700: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
e710: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
e720: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
e730: 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f  e3 InteropVersio
e740: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69  n..      } versi
e750: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
e760: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
e770: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
e780: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
e790: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e  ed version was n
e7a0: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b  ull.  If so, mak
e7b0: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20  e it easy..
e7c0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70     #       to sp
e7d0: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
e7e0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
e7f0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers e800: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then e810: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set e820: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 version null.. e830: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... e840: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # e850: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t e860: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 o query the Foss e870: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi e880: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c fier for the SQL e890: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ite.. # e8a0: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 core librar e8b0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. e8c0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc e8d0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o e8e0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl e8f0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ e900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e910: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi e920: 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 te.SQLite3 Inter e930: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 opSourceId.. e940: 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d } sourceId]} e950: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. e960: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. e970: 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 # NOTE: We faile e980: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 d to query the F e990: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide e9a0: 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 ntifier... e9b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. e9c0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e set sourceId un e9d0: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d known.. } e9e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. e9f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C ea00: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu ea10: 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 rned Fossil sour ea20: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 ce identifier wa ea30: 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 s null. If.. ea40: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c # so, ea50: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f make it easy to ea60: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 spot... ea70: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ ea80: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 string length$s
ea90: 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
eaa0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
eab0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75   set sourceId nu
eac0: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ll..        }...
ead0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
eae0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f      # NOTE: Befo
eaf0: 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69  re actually addi
eb00: 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73  ng the test cons
eb10: 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72  traint, make sur
eb20: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  e the..        #
eb30: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69         version i
eb40: 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f  s valid (i.e. no
eb50: 74 20 6a 75 73 74 20 74 68 61 74 20 77 65 20 63  t just that we c
eb60: 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d  ould query it)..
eb70: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
eb80: 20 20 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e      if {$version eb90: 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e ne "null"} then eba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. ebb0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT ebc0: 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 E: Yes, the SQLi ebd0: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem ebe0: 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 bly appears to b ebf0: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 e available... ec00: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ec10: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai ec20: 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 nt SQLiteInterop ec30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se ec40: 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20 t answer yes.. ec50: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. ec60: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e set an ec70: 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20 swer no.. ec80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 }.... tp ec90: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
eca0: 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72  pendArgs $answer ecb0: 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 " ("$version "
ecc0: 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c   " $sourceId ")\ ecd0: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 n"].. } els ece0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu ecf0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
ed00: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
ed10: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
ed20: 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69  eckForSQLiteDefi
ed30: 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61  neConstant { cha
ed40: 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20  nnel name } {..
ed50: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan ed60: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs ed70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d \.. "-- ed80: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for ed90: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi eda0: 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 te define consta edb0: 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a nt \""$name \..
edc0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e            "\"...
edd0: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20   "]....      if
ede0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
edf0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
ee00: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
ee10: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
ee20: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
ee30: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66  Lite.SQLite3 Def
ee40: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  ineConstants..
ee50: 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73      } defineCons
ee60: 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tants] == 0} the
ee70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
ee80: 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74  {[lsearch -exact
ee90: 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65   -nocase $define eea0: 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d Constants$name]
eeb0: 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a   != -1} then {..
eec0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
eed0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
eee0: 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20  es, this define
eef0: 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61  constant was ena
ef00: 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61  bled when the ma
ef10: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20  naged..
ef20: 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
ef30: 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d  y was compiled..
ef40: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
ef50: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
ef60: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
ef70: 73 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  s defineConstant
ef80: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
ef90: 69 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20  ite. $name].... efa0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
efb0: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20  channel yes\n..
efc0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
efd0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
efe0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. eff0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. f000: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. f010: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
f020: 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20  l error\n..
f030: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
f040: 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69    proc getDateTi
f050: 6d 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20  meFormat {} {..
f060: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
f070: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
f080: 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75  dure simply retu
f090: 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74  rns the "default
f0a0: 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  " DateTime forma
f0b0: 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20  t used..      #
f0c0: 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73        by the tes
f0d0: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...
f0e0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
f0f0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65  fo exists ::date
f100: 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20  time_format] &&
f110: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
f120: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64  ring length $::d f130: 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 atetime_format] f140: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. f150: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f160: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 # NOTE: Return t f170: 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 he manually over f180: 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 ridden value for f190: 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f the DateTime fo f1a0: 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 rmat... # f1b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return f1c0: 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72$::datetime_for
f1d0: 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  mat..      } els
f1e0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
f1f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
f200: 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30  Return an ISO860
f210: 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  1 DateTime forma
f220: 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  t compatible wit
f230: 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20  h SQLite,..
f240: 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65     #       Syste
f250: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61  m.Data.SQLite, a
f260: 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  nd suitable for
f270: 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77  round-tripping w
f280: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ith the..
f290: 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d   #       DateTim
f2a0: 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66  e class of the f
f2b0: 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68  ramework.  If th
f2c0: 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e  is value is chan
f2d0: 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  ged,..        #
f2e0: 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65        various te
f2f0: 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20  sts may fail...
f300: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f310: 20 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d    return "yyyy-M
f320: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46  M-dd HH:mm:ss.FF
f330: 46 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d  FFFFFK"..      }
f340: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
f350: 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54  proc enumerableT
f360: 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62  oList { enumerab
f370: 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  le } {..      se
f380: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
f390: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
f3a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75  ring length $enu f3b0: 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c merable] == 0 || f3c0: 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20$enumerable eq
f3d0: 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a  "null"} then {..
f3e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $f3f0: 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d result.. }. f400: 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 ... object f410: 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69 foreach -alias i f420: 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 tem$enumerable
f430: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
f440: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69  string length $i f450: 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b tem] > 0} then { f460: 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 .. lapp f470: 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65 end result [$ite
f480: 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20  m ToString]..
f490: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
f4a0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
f4b0: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. f4c0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 ... proc catc f4d0: 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72 hAndReturn { scr f4e0: 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20 ipt {stackTrace f4f0: 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74 false} {strict t f500: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 rue} } {.. f510: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: f520: 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63 Evaluate the sc f530: 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 ript provided by f540: 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 our caller in t f550: 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 heir context,.. f560: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70 # cap f570: 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20 turing both the f580: 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72 result and the r f590: 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 eturn code... f5a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set f5b0: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c code [catch {upl f5c0: 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20 evel 1$script}
f5d0: 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20  result]....
f5e0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f5f0: 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74  : Did the script
f600: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
f610: 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73   caller NOT rais
f620: 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20  e an error?..
f630: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
f640: 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65  $strict &&$code
f650: 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63   == 0 || !$stric f660: 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d t &&$code != 1}
f670: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f680: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
f690: 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65  TE: Success.  Re
f6a0: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68  turn a list with
f6b0: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
f6c0: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e   and the result.
f6d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f6e0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
f6f0: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d  t $code$result]
f700: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
f710: 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74   {$stackTrace} t f720: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # f730: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE f740: 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 : Failure. Our f750: 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66 caller wants a f f760: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 ull stack trace f770: 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c (if applicable), f780: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # f790: 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 return a list f7a0: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 with the return f7b0: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 code and the res f7c0: 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 ult verbatim... f7d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f7e0: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 return [list$
f7f0: 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20  code $result].. f800: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. f810: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f820: 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 # NOTE: Failur f830: 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64 e. Our caller d f840: 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66 oes not want a f f850: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 ull stack trace f860: 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 (if.. # f870: 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29 applicable) f880: 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 , return a list f890: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 with the return f8a0: 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d code, the error. f8b0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # f8c0: 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e code for the in f8d0: 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74 terpreter, and t f8e0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 he error message f8f0: 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 up to the.. f900: 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e # poin f910: 74 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63 t where the stac f920: 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73 k trace should s f930: 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 tart... # f940: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return f950: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 3a 3a [list$code $:: f960: 65 72 72 6f 72 43 6f 64 65 20 5c 0d 0a 20 20 20 errorCode \.. f970: 20 20 20 20 20 20 20 20 20 5b 65 78 74 72 61 63 [extrac f980: 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 tSystemDataSQLit f990: 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 eExceptionMessag f9a0: 65 20 24 72 65 73 75 6c 74 5d 5d 0d 0a 20 20 20 e$result]]..
f9b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
f9c0: 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65      proc compile
f9d0: 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20  CSharpWith {..
f9e0: 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 6d            text m
f9f0: 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74  emory symbols st
fa00: 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e  rict resultsVarN
fa10: 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d  ame errorsVarNam
fa20: 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20  e fileNames..
fa30: 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d 20           args }
fa40: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
fa50: 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20    # NOTE: Since
fa60: 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  we are going to
fa70: 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20  use this method
fa80: 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69  name a lot, assi
fa90: 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20  gn it to a..
faa0: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62    #       variab
fab0: 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20  le first...
fac0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64   #..      set ad
fad0: 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65  d ReferencedAsse
fae0: 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20  mblies.Add....
faf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
fb00: 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 20  OTE: Create the
fb10: 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  base command to
fb20: 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64  evaluate and add
fb30: 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 65   the property se
fb40: 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20  ttings..      #
fb50: 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 61        that are a
fb60: 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65  lmost always nee
fb70: 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20  ded by our unit
fb80: 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20  tests (i.e. the
fb90: 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20  System..      #
fba0: 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d        and System
fbb0: 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72  .Data assembly r
fbc0: 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20  eferences)...
fbd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
fbe0: 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d  command [list \.
fbf0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69  .          compi
fc00: 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 20 24  leCSharp $text$
fc10: 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20  memory $symbols fc20: 24 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 20$strict results
fc30: 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20  errors \..
fc40: 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e      $add System. fc50: 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e dll$add System.
fc60: 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79  Data.dll $add Sy fc70: 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e stem.Transaction fc80: 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 s.dll \.. fc90: 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58$add System.X
fca0: 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20  ml.dll]....
fcb0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
fcc0: 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72  : Add all the pr
fcd0: 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65  ovided file name
fce0: 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65  s as assembly re
fcf0: 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20  ferences...
fd00: 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63   #..      foreac
fd10: 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  h fileName $file fd20: 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. fd30: 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 lappend command fd40: 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61 72 79$add [getBinary
fd50: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa fd60: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a me].. }.... fd70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # fd80: 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 65 NOTE: Add the e fd90: 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 xtra arguments, fda0: 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 if any, to the c fdb0: 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 ommand to evalua fdc0: 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. fdd0: 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 eval lappend fde0: 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a command$args..
fdf0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
fe00: 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74   # NOTE: Alias t
fe10: 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61  he compiler loca
fe20: 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72  l results and er
fe30: 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 20 74  rors variables t
fe40: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  o the..      #
fe50: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61       variable na
fe60: 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20  mes provided by
fe70: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20  our caller...
fe80: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
fe90: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $fea0: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20 resultsVarName] feb0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. fec0: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72 65 upvar 1$re
fed0: 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73  sultsVarName res
fee0: 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ults..      }...
fef0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
ff00: 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72  ng length $error ff10: 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 sVarName] > 0} t ff20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 hen {.. u ff30: 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 pvar 1$errorsVa
ff40: 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20  rName errors..
ff50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
ff60: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
ff70: 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e  Evaluate the con
ff80: 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c  structed [compil
ff90: 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64  eCSharp] command
ffa0: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d   and return the.
ffb0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72  .      #       r
ffc0: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d  esult...      #.
ffd0: 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d  .      eval $com ffe0: 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a mand.. }..... fff0: 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 proc isMemor 10000 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d yDb { fileName } 10010 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 10020 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 # NOTE: Is th 10030 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 e specified data 10040 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 base file name r 10050 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f eally an in-memo 10060 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 ry database?.. 10070 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 10080 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 urn [expr {$file
10090 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79  Name eq ":memory
100a0 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  :" || \..
100b0 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65     [string range
100c0 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d   $fileName 0 12] 100d0 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 eq "file::memor 100e0 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d y:"}].. }.... 100f0 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c . proc isTabl 10100 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 eInDb { name {va 10110 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 10120 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 10130 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 10140 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 10150 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 10160 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 10170 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 10180 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. 10190 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 It contains the 101a0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect 101b0 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 ion handle that 101c0 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 will be.. # 101d0 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 used to e 101e0 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79 xecute the query 101f0 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 used to determi 10200 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ne if the named 10210 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 table is.. 10220 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 # present 10230 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65 in that database 10240 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 10250 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
10260 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
10270 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
10280 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  Use the sqlite_m
10290 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64  aster table to d
102a0 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the
102b0 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a  named table is..
102c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
102d0 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
102e0 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  abase...      #.
102f0 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b  .      set sql {
10300 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  ..        SELECT
10310 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73   COUNT(*) FROM s
10320 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
10330 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65  RE type = 'table
10340 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d  ' AND name = ?;.
10350 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
10360 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
10370 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  E: Return non-ze
10380 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ro if the named
10390 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74  table is present
103a0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
103b0 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b    return [expr {
103c0 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65  ..        [sql e
103d0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
103e0 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20  scalar $db$sql
103f0 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72  [list param1 Str
10400 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d  ing $name]] > 0. 10410 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d . }].. } 10420 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 10430 74 44 62 44 65 66 61 75 6c 74 50 61 67 65 53 69 tDbDefaultPageSi 10440 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74 ze {} {.. t 10450 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 ry {.. se 10460 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d t db [sql open - 10470 74 79 70 65 20 53 51 4c 69 74 65 20 7b 44 61 74 type SQLite {Dat 10480 61 20 53 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79 a Source=:memory 10490 3a 3b 7d 5d 0d 0a 20 20 20 20 20 20 20 20 72 65 :;}].. re 104a0 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75 74 turn [sql execut 104b0 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 e -execute scala 104c0 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61 r$db "PRAGMA pa
104d0 67 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 20  ge_size;"]..
104e0 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20    } finally {..
104f0 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
10500 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65   exists db]} the
10510 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
10520 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20  atch {sql close
10530 24 64 62 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  $db}.. 10540 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 10550 6e 20 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 0d n db.. }. 10560 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 10570 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 10580 44 62 44 65 66 61 75 6c 74 43 61 63 68 65 53 69 DbDefaultCacheSi 10590 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74 ze {} {.. t 105a0 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 ry {.. se 105b0 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d t db [sql open - 105c0 74 79 70 65 20 53 51 4c 69 74 65 20 7b 44 61 74 type SQLite {Dat 105d0 61 20 53 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79 a Source=:memory 105e0 3a 3b 7d 5d 0d 0a 20 20 20 20 20 20 20 20 72 65 :;}].. re 105f0 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75 74 turn [sql execut 10600 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 e -execute scala 10610 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 63 61 r$db "PRAGMA ca
10620 63 68 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 20  che_size;"]..
10630 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a     } finally {..
10640 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
10650 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68  o exists db]} th
10660 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
10670 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65  catch {sql close
10680 20 24 64 62 7d 0d 0a 20 20 20 20 20 20 20 20 20   $db}.. 10690 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 106a0 69 6e 20 64 62 0d 0a 20 20 20 20 20 20 20 20 7d in db.. } 106b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 106c0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 75 73 ..... proc us 106d0 65 4c 65 67 61 63 79 44 62 50 61 67 65 41 6e 64 eLegacyDbPageAnd 106e0 43 61 63 68 65 53 69 7a 65 73 20 7b 20 76 61 72 CacheSizes { var 106f0 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 Name } {.. 10700 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 10710 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp 10720 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable 10730 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in 10740 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o 10750 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # 10760 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f caller. It co 10770 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 61 62 ntains the datab 10780 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 ase connection h 10790 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 andle that will 107a0 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 be.. # 107b0 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 used to execut 107c0 65 20 71 75 65 72 69 65 73 20 75 73 65 64 20 74 e queries used t 107d0 6f 20 73 65 74 20 74 68 65 20 70 61 67 65 20 61 o set the page a 107e0 6e 64 20 63 61 63 68 65 20 73 69 7a 65 73 2e 0d nd cache sizes.. 107f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 10800 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
10810 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 73 71 6c   db....      sql
10820 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a   execute $db {.. 10830 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 PRAGMA p 10840 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b age_size = 1024; 10850 0d 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 .. PRAGMA 10860 20 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 cache_size = 20 10870 30 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 00;.. }.... 10880 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li 10890 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 108a0 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 [sql execute -ex 108b0 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 ecute scalar$db
108c0 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69   "PRAGMA page_si
108d0 7a 65 3b 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20  ze;"] \..
108e0 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20     [sql execute
108f0 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar
10900 24 64 62 20 22 50 52 41 47 4d 41 20 63 61 63 68  $db "PRAGMA cach 10910 65 5f 73 69 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20 e_size;"]].. 10920 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e 10930 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 xtractSystemData 10940 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d SQLiteExceptionM 10950 65 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d essage { value } 10960 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 10970 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 10980 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d e string conform 10990 73 20 74 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74 s to format of t 109a0 68 65 20 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74 he normal except 109b0 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # 109c0 20 20 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 error strings 109d0 2c 20 65 78 74 72 61 63 74 20 61 6e 64 20 72 65 , extract and re 109e0 74 75 72 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72 turn only the er 109f0 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 ror message.. 10a00 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 # porti 10a10 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 on itself... 10a20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 #.. set p 10a30 61 74 74 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d atterns [list \. 10a40 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e . {System\. 10a50 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 Data\.SQLite\.SQ 10a60 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 LiteException $$10a70 30 78 38 30 30 30 34 30 30 35 5c 29 3a 20 28 2e 0x80004005$$: (. 10a80 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c +?) (?: )?at} \ 10a90 0d 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c .. {System\ 10aa0 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 .Data\.SQLite\.S 10ab0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a 20 QLiteException: 10ac0 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d (.+?) (?: )?at} 10ad0 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 ].... forea 10ae0 63 68 20 70 61 74 74 65 72 6e 20 24 70 61 74 74 ch pattern$patt
10af0 65 72 6e 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  erns {..
10b00 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24  if {[regexp -- $10b10 70 61 74 74 65 72 6e 20 24 76 61 6c 75 65 20 64 pattern$value d
10b20 75 6d 6d 79 20 6d 65 73 73 61 67 65 5d 7d 20 74  ummy message]} t
10b30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
10b40 20 73 65 74 20 6d 65 73 73 61 67 65 20 5b 73 74   set message [st
10b50 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
10b60 72 5c 6e 20 5c 6e 5d 20 5b 73 74 72 69 6e 67 20  r\n \n] [string
10b70 74 72 69 6d 20 24 6d 65 73 73 61 67 65 5d 5d 0d  trim $message]]. 10b80 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6c . set l 10b90 69 6e 65 73 20 5b 73 70 6c 69 74 20 24 6d 65 73 ines [split$mes
10ba0 73 61 67 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  sage \n]....
10bb0 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67        if {[lleng
10bc0 74 68 20 24 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d  th $lines] == 2} 10bd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10be0 20 20 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 if {[lindex 10bf0 20 24 6c 69 6e 65 73 20 30 5d 20 65 71 20 5b 6c$lines 0] eq [l
10c00 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 7d  index $lines 1]} 10c10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10c20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 10c30 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 0d index$lines 0].
10c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
10c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
10c60 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73  turn [appendArgs
10c70 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20   [lindex $lines 10c80 30 5d 20 22 20 2d 2d 20 22 20 5b 6c 69 6e 64 65 0] " -- " [linde 10c90 78 20 24 6c 69 6e 65 73 20 31 5d 5d 0d 0a 20 20 x$lines 1]]..
10ca0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
10cb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 6d         return $m 10cc0 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 20 20 essage.. 10cd0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 10ce0 20 20 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75 return$valu
10cf0 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
10d00 20 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20   proc trimSql {
10d10 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72  sql } {..      r
10d20 65 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61  eturn [regsub -a
10d30 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72  ll -- {\s+} [str
10d40 69 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22  ing trim $sql] " 10d50 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "].. }..... 10d60 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 proc executeS 10d70 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 ql { sql {execut 10d80 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 e none} {format 10d90 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 none} {fileName 10da0 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ""} } {.. i 10db0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 10dc0 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 h$fileName] ==
10dd0 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69 6c  0} then {set fil
10de0 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d  eName :memory:}.
10df0 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20 24  .      setupDb $10e00 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 fileName "" "" " 10e10 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 66 61 " "" "" false fa 10e20 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 lse false false 10e30 64 62 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 db true.... 10e40 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 try {.. 10e50 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 return [uplevel 10e60 31 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 1 [list \.. 10e70 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 sql execu 10e80 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 65 te -execute$exe
10e90 63 75 74 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f  cute -format $fo 10ea0 72 6d 61 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d rmat$db $sql]]. 10eb0 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 . } finally 10ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6c 65 61 {.. clea 10ed0 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 nupDb$fileName
10ee0 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66  db false false f
10ef0 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  alse..      }..
10f00 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
10f10 63 20 68 61 73 4e 6f 46 6c 61 67 73 20 7b 20 76  c hasNoFlags { v
10f20 61 72 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d  arName none } {.
10f30 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $10f40 76 61 72 4e 61 6d 65 20 66 6c 61 67 73 0d 0a 0d varName flags... 10f50 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 10f60 6f 20 65 78 69 73 74 73 20 66 6c 61 67 73 5d 7d o exists flags]} 10f70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10f80 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. 10f90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 10fa0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 10fb0 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 h$flags] == 0}
10fc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10fd0 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
10fe0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
10ff0 20 7b 24 6e 6f 6e 65 20 26 26 20 24 66 6c 61 67   {$none &&$flag
11000 73 20 65 71 20 22 4e 6f 6e 65 22 7d 20 74 68 65  s eq "None"} the
11010 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
11020 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
11030 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
11040 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
11050 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
11060 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b  onnectionFlags {
11070 20 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20   fileName flags
11080 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
11090 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
110a0 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65    # NOTE: Figure
110b0 20 6f 75 74 20 77 68 69 63 68 20 64 61 74 61 62   out which datab
110c0 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72  ase file name or
110d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
110e0 6e 67 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20  ng these..
110f0 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  #       connecti
11100 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63  on flags will ac
11110 74 75 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e  tually apply to.
11120 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65    This is not ne
11130 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23  cessary..      #
11140 20 20 20 20 20 20 20 69 6e 20 71 75 69 65 74 20         in quiet
11150 6d 6f 64 65 20 62 65 63 61 75 73 65 20 74 68 69  mode because thi
11160 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  s information is
11170 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
11180 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20  ogging..      #
11190 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74        and report
111a0 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20  ing purposes...
111b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
111c0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 111d0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 111e0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
111f0 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
11200 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
11210 73 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 70  set database [ap
11220 70 65 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e  pendArgs "file n
11230 61 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ame \"" $fileNam 11240 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d e \"].. } 11250 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e 11260 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 xists ::dataSour 11270 63 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ce] && \.. 11280 20 20 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 ![array ex 11290 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 ists ::dataSourc 112a0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 112b0 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 set databa 112c0 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 se [appendArgs " 112d0 64 61 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 data source \"" 112e0 24 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22$::dataSource \"
112f0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ]..        } els
11300 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
11310 65 74 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b  et database <unk
11320 6e 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d  nown>..        }
11330 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
11340 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
11350 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
11360 67 29 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e  g) the local con
11370 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e  nection flags an
11380 64 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  d the associated
11390 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
113a0 64 61 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66  data source or f
113b0 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ile name...
113c0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$113d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 113e0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 113f0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d o exists ::no(em 11400 69 74 4c 6f 63 61 6c 46 6c 61 67 73 29 5d 20 26 itLocalFlags)] & 11410 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 11420 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 (![info exists 11430 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c ::no(emitLocalFl 11440 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c agsIfNone)] || \ 11450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 21 .. ! 11460 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 [hasNoFlags flag 11470 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 s false])} then 11480 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 11490 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
114a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
114b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
114c0 22 2d 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e  "---- local conn
114d0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72  ection flags for
114e0 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a   " $database \.. 114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " 11500 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b are: " [expr {![ 11510 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 hasNoFlags flags 11520 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 false] ? \.. 11530 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 [appe 11540 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 ndArgs \"$flags
11550 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d   \"] : "<none>"}
11560 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ] \n]..        }
11570 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
11580 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
11590 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
115a0 67 29 20 74 68 65 20 73 68 61 72 65 64 20 63 6f  g) the shared co
115b0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d  nnection flags..
115c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
115d0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 115e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 115f0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 11600 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 11610 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ke System.Data.S 11620 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e QLite.SQLiteConn 11630 65 63 74 69 6f 6e 20 53 68 61 72 65 64 46 6c 61 ection SharedFla 11640 67 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 68 gs.. } sh 11650 61 72 65 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d aredFlags] == 0} 11660 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11670 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 11680 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 ists ::no(emitSh 11690 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c aredFlags)] && \ 116a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 116b0 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a (![info exists : 116c0 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c :no(emitSharedFl 116d0 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c agsIfNone)] || \ 116e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 116f0 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 ![hasNoFlags sh 11700 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d 29 aredFlags true]) 11710 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11720 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
11730 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
11740 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
11750 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
11760 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69   shared connecti
11770 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24  on flags for " $11780 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 database \.. 11790 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 " ar 117a0 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 e: " [expr {![ha 117b0 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46 sNoFlags sharedF 117c0 6c 61 67 73 20 74 72 75 65 5d 20 3f 20 5c 0d 0a lags true] ? \.. 117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 117e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
117f0 73 68 61 72 65 64 46 6c 61 67 73 20 5c 22 5d 20  sharedFlags \"]
11800 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d  : "<none>"}] \n]
11810 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
11820 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
11830 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
11840 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
11850 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67  o(emitSharedFlag
11860 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
11870 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65          ![info e
11880 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53  xists ::no(emitS
11890 68 61 72 65 64 46 6c 61 67 73 49 66 55 6e 61 76  haredFlagsIfUnav
118a0 61 69 6c 61 62 6c 65 29 5d 7d 20 74 68 65 6e 20  ailable)]} then
118b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
118c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 118d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 118e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 118f0 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 "---- shared 11900 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 11910 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 s for "$databas
11920 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
11930 20 20 20 20 20 22 20 61 72 65 3a 20 3c 75 6e 61       " are: <una
11940 76 61 69 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20  vailable>\n"]..
11950 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
11960 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
11970 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11980 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61   # NOTE: Show (a
11990 6e 64 20 6c 6f 67 29 20 74 68 65 20 64 65 74 65  nd log) the dete
119a0 63 74 65 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e  cted global conn
119b0 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 69 66  ection flags, if
119c0 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   any...      #..
119d0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 119e0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 119f0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 11a00 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c ists ::no(emitGl 11a10 6f 62 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c obalFlags)] && \ 11a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 21 .. (! 11a30 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 11a40 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 o(emitGlobalFlag 11a50 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a sIfNone)] || \.. 11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 ![h 11a70 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e asNoFlags ::conn 11a80 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c ection_flags fal 11a90 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 se])} then {.. 11aa0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
11ab0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
11ac0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
11ad0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
11ae0 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69   global connecti
11af0 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a 20 22 20  on flags are: "
11b00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
11b10 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46   [expr {![hasNoF
11b20 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f  lags ::connectio
11b30 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f  n_flags false] ?
11b40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11b50 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22    [appendArgs \"
11b60 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66   $::connection_f 11b70 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e lags \"] : "<non 11b80 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 e>"}] \n].. 11b90 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 11ba0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 11bb0 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65 # NOTE: If there 11bc0 20 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 are any global 11bd0 28 70 65 72 20 74 65 73 74 20 72 75 6e 29 20 63 (per test run) c 11be0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 11bf0 63 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 currently.. 11c00 20 23 20 20 20 20 20 20 20 73 65 74 2c 20 75 73 # set, us 11c10 65 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e e them now (i.e. 11c20 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 by combining th 11c30 65 6d 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73 em with the ones 11c40 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 for this.. 11c50 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 # connect 11c60 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ion)... #.. 11c70 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 11c80 65 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 exists ::connect 11c90 69 6f 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e ion_flags]} then 11ca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 11cb0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 11cc0 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 ombine and/or re 11cd0 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 place the connec 11ce0 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 tion flags and t 11cf0 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 hen show the.. 11d00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 # ne 11d10 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 w value... 11d20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 11d30 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 flags [combineF 11d40 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 lags$flags $::c 11d50 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d onnection_flags] 11d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 11d70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 11d80 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 how (and log) th 11d90 65 20 6e 65 77 20 65 66 66 65 63 74 69 76 65 20 e new effective 11da0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 11db0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11dc0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
11dd0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
11de0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
11df0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74  exists ::no(emit
11e00 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 29 5d 20  CombinedFlags)]
11e10 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
11e20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73      (![info exis
11e30 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62  ts ::no(emitComb
11e40 69 6e 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29  inedFlagsIfNone)
11e50 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
11e60 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c         ![hasNoFl
11e70 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d  ags flags false]
11e80 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  )} then {..
11e90 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 11ea0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 11eb0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 11ec0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 11ed0 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 - combined conne 11ee0 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 ction flags for 11ef0 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 "$database \..
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11f10 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21   are: " [expr {!
11f20 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67  [hasNoFlags flag
11f30 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20  s false] ? \..
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
11f50 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c  ppendArgs \" $fl 11f60 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 ags \"] : "<none 11f70 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 >"}] \n].. 11f80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 11f90 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 11fa0 20 20 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73 return$flags
11fb0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
11fc0 70 72 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f  proc getFlagsPro
11fd0 70 65 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22  perty { {flags "
11fe0 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  "} {quiet false}
11ff0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
12000 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74       # NOTE: Det
12010 65 72 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20  ermine what the
12020 63 6f 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c  combined (global
12030 20 61 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e   and local) conn
12040 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ection..      #
12050 20 20 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75        flags shou
12060 6c 64 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20  ld be, possibly
12070 71 75 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20  quietly...
12080 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61  #..      set fla
12090 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f  gs [getConnectio
120a0 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73  nFlags "" $flags 120b0 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20$quiet]....
120c0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
120d0 45 3a 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20  E: If no global
120e0 6f 72 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74  or local connect
120f0 69 6f 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73  ion flags were s
12100 70 65 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20  pecified, the..
12110 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66       #       def
12120 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ault connection
12130 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20  flags should be
12140 75 73 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c  used; therefore,
12150 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23   return..      #
12160 20 20 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20         an empty
12170 73 74 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63  string in that c
12180 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ase...      #..
12190 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
121a0 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20   length $flags] 121b0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 121c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 121d0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 121e0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 121f0 45 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 E: In order to c 12200 68 65 63 6b 20 69 66 20 74 68 65 20 64 65 66 61 heck if the defa 12210 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 ult connection f 12220 6c 61 67 73 20 61 72 65 20 62 65 69 6e 67 20 75 lags are being u 12230 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 sed.. # 12240 20 20 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 it is necessa 12250 72 79 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 ry to attempt a 12260 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 conversion to th 12270 65 20 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 e actual enumera 12280 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ted.. # 12290 20 20 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e type. Failin 122a0 67 20 74 68 61 74 2c 20 74 68 65 20 63 68 65 63 g that, the chec 122b0 6b 20 61 67 61 69 6e 73 74 20 74 68 65 20 64 65 k against the de 122c0 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c fault value will 122d0 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 be.. # 122e0 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 skipped... 122f0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 12300 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 12310 20 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c set error null 12320 3b 20 23 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 ; # IGNORED.... 12330 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 12340 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 voke Utility Try 12350 50 61 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 ParseFlagsEnum " 12360 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 12370 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 12380 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ite.SQLiteConnec 12390 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c tionFlags ""$fl
123a0 61 67 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d  ags null true \.
123b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75  .            tru
123c0 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d  e error..      }
123d0 20 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d   value]} then {.
123e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
123f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
12400 6d 70 74 69 6e 67 20 74 6f 20 70 61 72 73 65 20  mpting to parse
12410 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
12420 6c 61 67 73 20 63 61 75 73 65 64 20 61 20 73 63  lags caused a sc
12430 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20  ript..        #
12440 20 20 20 20 20 20 65 72 72 6f 72 2e 20 20 45 6d        error.  Em
12450 69 74 20 61 20 77 61 72 6e 69 6e 67 20 74 6f 20  it a warning to
12460 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c  the test log fil
12470 65 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a  e and continue..
12480 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
12490 75 73 69 6e 67 20 61 6e 20 65 6d 74 70 79 20 73  using an emtpy s
124a0 74 72 69 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a  tring instead...
124b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
124c0 20 20 20 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41     tlog [appendA
124d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
124e0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
124f0 3a 20 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73  : failed to pars
12500 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
12510 67 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  gs, error: " \..
12520 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
12530 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20   $value \n].... 12540 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 set value 12550 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a "".. }.... 12560 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 12570 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f NOTE: If the co 12580 6d 62 69 6e 65 64 20 66 6c 61 67 73 20 73 74 72 mbined flags str 12590 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 ing could not ac 125a0 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 tually be conver 125b0 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ted.. # 125c0 20 20 20 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 to the enumer 125d0 61 74 65 64 20 74 79 70 65 20 69 74 20 69 73 20 ated type it is 125e0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 the default valu 125f0 65 2c 20 74 68 65 6e 20 6a 75 73 74 20 75 73 65 e, then just use 12600 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12610 69 74 20 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 it verbatim; oth 12620 65 72 77 69 73 65 2c 20 6a 75 73 74 20 72 65 74 erwise, just ret 12630 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 12640 69 6e 67 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 ing. In that.. 12650 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 # cas 12660 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 e, the default c 12670 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 12680 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 will be used... 12690 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 126a0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 126b0 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c$value] == 0 ||
126c0 20 24 76 61 6c 75 65 20 6e 65 20 22 44 65 66 61   $value ne "Defa 126d0 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ult"} then {.. 126e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 126f0 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 # WARNING: This 12700 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 returns the str 12710 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74 68 65 ing value of the 12720 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c combined flags, 12730 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 not.. # 12740 20 20 20 20 20 20 20 20 20 74 68 65 20 65 6e 75 the enu 12750 6d 65 72 61 74 65 64 20 76 61 6c 75 65 2e 20 20 merated value. 12760 54 68 69 73 20 69 73 20 62 79 20 64 65 73 69 67 This is by desig 12770 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 n and should not 12780 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 12790 20 20 20 20 20 62 65 20 63 68 61 6e 67 65 64 20 be changed 127a0 77 69 74 68 6f 75 74 20 63 61 72 65 66 75 6c 20 without careful 127b0 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 20 28 65 consideration (e 127c0 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 .g. it would.. 127d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 127e0 20 70 72 65 76 65 6e 74 20 74 68 65 20 53 51 4c prevent the SQL 127f0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c iteConnection cl 12800 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e ass from allowin 12810 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 g invalid.. 12820 20 20 20 23 20 20 20 20 20 20 20 20 20 20 5b 22 # [" 12830 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 magical"] meta-f 12840 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 lags)... 12850 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 12860 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 46 n [appendArgs "F 12870 6c 61 67 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b lags="$flags \;
12880 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
12890 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
128a0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
128b0 63 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61  c enableSharedCa
128c0 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e  che { channel en
128d0 61 62 6c 65 20 7b 71 75 69 65 74 20 66 61 6c 73  able {quiet fals
128e0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  e} } {..      if
128f0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
12900 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
12910 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
12920 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
12930 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
12940 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
12950 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..
12960 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
12970 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
12980 61 63 68 65 20 5b 65 78 70 72 20 69 6e 74 28 24  ache [expr int($12990 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 enable)].. 129a0 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 129b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 129c0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
129d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
129e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 129f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 12a00 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 12a10 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e call sqlite3_en 12a20 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 able_shared_cach 12a30 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 e("$enable \..
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e               ").
12a50 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74  .. ok: " $result 12a60 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 12a70 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 12a80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
12a90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
12aa0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12ab0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12ac0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12ad0 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 12ae0 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 qlite3_enable_sh 12af0 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e ared_cache("$en
12b00 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  able \..
12b10 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f        ")... erro
12b20 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 12b30 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d t \n].. } 12b40 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 12b50 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 ..... proc se 12b60 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 tupDb {.. 12b70 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d fileName {m 12b80 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d ode ""} {dateTim 12b90 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 eFormat ""} {dat 12ba0 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 eTimeKind ""} {f 12bb0 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 lags ""}.. 12bc0 20 20 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d {extra ""} 12bd0 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 {qualify true} 12be0 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 {delete true} {u 12bf0 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 ri false}.. 12c00 20 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 {temporar 12c10 79 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 y true} {varName 12c20 20 64 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 db} {quiet fals 12c30 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 12c40 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 12c50 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 irst, see if our 12c60 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 caller has requ 12c70 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f ested an in-memo 12c80 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 ry database... 12c90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 12ca0 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d isMemory [isMem 12cb0 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d oryDb$fileName]
12cc0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12cd0 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
12ce0 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74  ow, all test dat
12cf0 61 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74  abases used by t
12d00 68 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72  he test suite ar
12d10 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20  e placed..
12d20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65  #       into the
12d30 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74   database direct
12d40 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62  ory.  Each datab
12d50 61 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20  ase and related
12d60 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  files..      #
12d70 20 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74       used by a t
12d80 65 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c  est should be cl
12d90 65 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74  eaned up by that
12da0 20 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d   test using the.
12db0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22  .      #       "
12dc0 63 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65  cleanupDb" proce
12dd0 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20  dure, below...
12de0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
12df0 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
12e00 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
12e10 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
12e20 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
12e30 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
12e40 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
12e50 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 12e60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 12e70 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 12e80 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 : By default, de 12e90 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 lete any pre-exi 12ea0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 sting database w 12eb0 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c ith the same fil 12ec0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 12ed0 20 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 name if it curr 12ee0 65 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 ently exists... 12ef0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 12f00 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 {!$isMemory &&
12f10 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65  $delete && [file 12f20 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
12f30 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
12f40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
12f50 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
12f60 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65  o delete any pre
12f70 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  -existing databa
12f80 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  se with the same
12f90 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23   file..        #
12fa0 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20         name...
12fb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12fc0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c   if {[catch {fil
12fd0 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61  e delete $fileNa 12fe0 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e me} error]} then 12ff0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 13000 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 13010 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 13020 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 13030 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 he file, report 13040 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 13050 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 13060 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
13070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
13080 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 13090 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 130a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 130b0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 130c0 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele 130d0 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 te database file 130e0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
130f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13100 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74    "\" during set
13110 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  up, error: " \n\
13120 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 13130 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13140 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 13150 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13160 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 13170 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 13180 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 13190 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 131a0 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 131b0 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 131c0 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 The handle to 131d0 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 the opened datab 131e0 61 73 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 ase will be stor 131f0 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 13200 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 13210 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
13220 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13230 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75  # NOTE: Start bu
13240 69 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65  ilding the conne
13250 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54  ction string.  T
13260 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64  he only required
13270 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20   portion..
13280 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63  #       of the c
13290 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
132a0 20 69 73 20 74 68 65 20 64 61 74 61 20 73 6f 75   is the data sou
132b0 72 63 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61  rce, which conta
132c0 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ins the..      #
132d0 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
132e0 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66  file name itself
132f0 2e 20 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  .  If our caller
13300 20 77 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20   wants to use a
13310 55 52 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20  URI as..      #
13320 20 20 20 20 20 20 74 68 65 20 64 61 74 61 20 73        the data s
13330 6f 75 72 63 65 2c 20 75 73 65 20 74 68 65 20 46  ource, use the F
13340 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f  ullUri connectio
13350 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74  n string propert
13360 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  y to..      #
13370 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20      prevent the
13380 64 61 74 61 20 73 6f 75 72 63 65 20 73 74 72 69  data source stri
13390 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61  ng from being ma
133a0 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ngled...      #.
133b0 0a 20 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d  .      if {$uri} 133c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 133d0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 set connection 133e0 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e {FullUri=${fileN
133f0 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65  ame}}..      } e
13400 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  lse {..        s
13410 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44  et connection {D
13420 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c  ata Source=${fil 13430 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d eName}}.. } 13440 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 13450 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 # NOTE: Since 13460 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure 13470 68 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b has no special k 13480 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 nowledge of what 13490 20 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 the default.. 134a0 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 # sett 134b0 69 6e 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 ing is for the T 134c0 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 oFullPath connec 134d0 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 tion string prop 134e0 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 ery, always.. 134f0 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20 74 # add t 13500 68 65 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 he value we know 13510 20 61 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f about to the co 13520 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. 13530 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 13540 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 13550 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d on {;ToFullPath= 13560 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20${qualify}}....
13570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
13580 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c  NOTE: If our cal
13590 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20  ler specified a
135a0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64  journal mode, ad
135b0 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
135c0 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23  portion..      #
135d0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
135e0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
135f0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
13600 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
13610 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e   length $mode] > 13620 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 13630 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 13640 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 ction {;Journal 13650 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 Mode=${mode}}..
13660 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
13670 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
13680 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
13690 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
136a0 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20  ime format, add
136b0 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20  the necessary..
136c0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72       #       por
136d0 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e  tion of the conn
136e0 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
136f0 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
13700 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
13710 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 46  ength $dateTimeF 13720 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e ormat] > 0} then 13730 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe 13740 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; 13750 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 DateTimeFormat=$
13760 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d  {dateTimeFormat}
13770 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
13780 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
13790 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c  OTE: If our call
137a0 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44  er specified a D
137b0 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64  ateTimeKind, add
137c0 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70   the necessary p
137d0 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
137e0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
137f0 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e  nection string n
13800 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
13810 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
13820 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65  length $dateTime 13830 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Kind] > 0} then 13840 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 13850 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 d connection {;D 13860 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 ateTimeKind=${da
13870 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20  teTimeKind}}..
13880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
13890 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
138a0 46 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 20  Figure out what
138b0 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20  the final flags
138c0 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  for this connect
138d0 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d  ion need to be..
138e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
138f0 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f  set flags [getCo
13900 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66  nnectionFlags $f 13910 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 ileName$flags $13920 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 quiet].... 13930 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 13940 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s 13950 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 pecified some SQ 13960 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c LiteConnectionFl 13970 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 ags, add the.. 13980 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 # nece 13990 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 ssary portion of 139a0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 139b0 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... 139c0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 139d0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
139e0 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e  flags] > 0} then
139f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
13a00 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
13a10 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d  Flags=${flags}}. 13a20 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 13a30 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13a40 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller 13a50 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 specified an ex 13a60 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 tra payload to t 13a70 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 he connection.. 13a80 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 # str 13a90 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e ing, append it n 13aa0 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. 13ab0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 13ac0 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e length$extra] >
13ad0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
13ae0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
13af0 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d  ction \; $extra. 13b00 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 13b10 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13b20 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 E: Open the data 13b30 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection 13b40 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 now, placing the 13b50 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 opaque handle v 13b60 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 alue.. # 13b70 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 into the var 13b80 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 iable specified 13b90 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 13ba0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 13bb0 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 et db [sql open 13bc0 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 -type SQLite [su 13bd0 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d bst$connection]
13be0 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
13bf0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66      # NOTE: Conf
13c00 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72  igure the tempor
13c10 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f  ary directory fo
13c20 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e  r the newly open
13c30 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ed database..
13c40 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
13c50 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73  ction now unless
13c60 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62   our caller forb
13c70 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23  ids it...      #
13c80 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d  ..      if {$tem 13c90 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f porary && ![info 13ca0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 exists ::no(set 13cb0 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f TemporaryDirecto 13cc0 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ry)]} then {.. 13cd0 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 sql execut 13ce0 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 e$db [appendArg
13cf0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
13d00 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   "PRAGMA temp_st
13d10 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory =
13d20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  \"" [getTemporar
13d30 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b  yDirectory] \"\;
13d40 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
13d50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
13d60 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79  OTE: Perform any
13d70 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65   extra per-conne
13d80 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 20  ction setup for
13d90 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64  the newly opened
13da0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
13db0 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c  database now unl
13dc0 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66  ess our caller f
13dd0 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20  orbids it...
13de0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65    #..      set e
13df0 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 5b 67  xecuteOnSetup [g
13e00 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70  etExecuteOnSetup
13e10 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
13e20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65  string length $e 13e30 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e xecuteOnSetup] > 13e40 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 0 && \.. 13e50 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 ![info exists 13e60 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 ::no(executeOnS 13e70 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a etup)]} then {.. 13e80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13e90 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 13ea0 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 command may rais 13eb0 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 e an error; if s 13ec0 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e 65 2c o, that is fine, 13ed0 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 as.. # 13ee0 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 the enclosi 13ef0 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74 68 65 ng test will the 13f00 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 n fail. The [su 13f10 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d bst] command is. 13f20 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 13f30 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53 51 4c used on the SQL 13f40 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65 65 64 in case it need 13f50 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20 73 74 s to refer to st 13f60 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 ate in our.. 13f70 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont 13f80 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ext... #. 13f90 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 . sql exe 13fa0 63 75 74 65 20 24 64 62 20 5b 73 75 62 73 74 20 cute$db [subst
13fb0 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d  $executeOnSetup] 13fc0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 13fd0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13fe0 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72 TE: Always retur 13ff0 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e n the connection 14000 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 handle upon suc 14010 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a cess... #.. 14020 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 return$db
14030 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
14040 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63  proc getDbConnec
14050 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20  tion { {varName
14060 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  db} } {..      #
14070 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
14080 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65  Refer to the spe
14090 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20  cified variable
140a0 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74  (e.g. "db") in t
140b0 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75  he context of ou
140c0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
140d0 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61   caller.  The ha
140e0 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61  ndle to the data
140f0 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20  base previously
14100 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a  opened via the..
14110 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73        #       [s
14120 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72  etupDb] procedur
14130 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72  e should be stor
14140 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20  ed there...
14150 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
14160 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d  1 $varName db... 14170 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 14180 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74 # NOTE: This ret 14190 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 urns the ADO.NET 141a0 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f IDbConnection o 141b0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 bject instance f 141c0 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 or the.. # 141d0 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20 specified 141e0 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 databse handle. 141f0 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74 Since getting t 14200 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 his object relie 14210 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 s upon.. # 14220 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 Eagle inte 14230 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72 rnals, great car 14240 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 e should be take 14250 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f n to avoid dispo 14260 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 sing of.. # 14270 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65 this obje 14280 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 ct or otherwise 14290 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 putting it into 142a0 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65 an invalid state 142b0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 142c0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 142d0 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a ts db]} then {.. 142e0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 142f0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 14300 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 14310 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 14320 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f -objectflags +No 14330 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c Dispose -alias \ 14340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14350 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 14360 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e ctive.connection 14370 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 s Item$db..
14380 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
14390 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
143a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
143b0 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65     # NOTE: Succe
143c0 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f  ss, return the o
143d0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
143e0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  dle...
143f0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  #..          ret
14400 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 14410 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 14420 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 14430 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 14440 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68 ilure, report wh 14450 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d y... #. 14460 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 14470 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
14480 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
144a0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
144b0 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65  led to get conne
144c0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72  ction handle for
144d0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d   database \"" \.
144e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24  .              $144f0 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 db "\", error: " 14500 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
14510 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
14520 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
14530 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
14540 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72 6e 20  Failure, return
14550 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76  an obviously inv
14560 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 6a 65  alid opaque obje
14570 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  ct handle...
14580 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
14590 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n ""..    }.....
145a0 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 43      proc freeDbC
145b0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72  onnection { {var
145c0 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d  Name connection}
145d0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
145e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
145f0 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
14600 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
14610 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29  g. "connection")
14620 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
14630 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f         context o
14640 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54  f our caller.  T
14650 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  he opaque object
14660 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41   handle for an A
14670 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20  DO.NET..      #
14680 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
14690 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75   previously retu
146a0 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f  rned by [getDbCo
146b0 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64  nnection] should
146c0 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
146d0 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e     stored there.
146e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
146f0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 14700 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a e connection.... 14710 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 14720 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 14730 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 o remove the opa 14740 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl 14750 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 e from the inter 14760 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20 preter.. # 14770 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 now. This 14780 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 [object dispose 14790 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 ] call will not 147a0 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 actually dispose 147b0 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 of the.. # 147c0 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e underlyin 147d0 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65 g object because 147e0 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 the +NoDispose 147f0 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20 flag was set on 14800 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 it.. # 14810 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f during creatio 14820 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20 n of the opaque 14830 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a object handle... 14840 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 14850 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 14860 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c connection] && \ 14870 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 .. [cat 14880 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f ch {object dispo 14890 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 se$connection}
148a0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
148b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
148c0 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
148d0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
148e0 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c  remove the handl
148f0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
14900 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14910 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 14920 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 14930 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 14940 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 14950 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d G: failed to rem 14960 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 ove connection h 14970 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 andle \""$conne
14980 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  ction \..
14990 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a       "\", error:
149a0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 149b0 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 149c0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 149d0 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 addDbConnection 149e0 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 { connection {va 149f0 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 14a00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 14a10 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 14a20 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 14a30 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 14a40 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 14a50 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 14a60 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a caller... 14a70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 #.. u 14a80 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
14a90 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  db....      #..
14aa0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65       # NOTE: Cre
14ab0 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20  ate a correctly
14ac0 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66  formatted name f
14ad0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database
14ae0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20  connection to..
14af0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
14b00 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
14b10 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65  t managed by the
14b20 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74   Eagle interpret
14b30 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
14b40 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65      set db [obje
14b50 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
14b60 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
14b70 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f           Eagle._
14b80 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61  Components.Priva
14b90 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74  te.FormatOps Dat
14ba0 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20  abaseObjectName
14bb0 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20  $connection \.. 14bc0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 SQLiteC 14bd0 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 onnection [objec 14be0 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 14bf0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e eter.GetActive N 14c00 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 extId]].... 14c10 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 14c20 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62 61 : Add the databa 14c30 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 se connection pr 14c40 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 14c50 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 ller to the list 14c60 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 14c70 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 of those known t 14c80 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 o the Eagle inte 14c90 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 14ca0 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 #.. object 14cb0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 14cc0 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 onPublic Interpr 14cd0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 eter.GetActive.c 14ce0 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c onnections Add \ 14cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62 20 ..$db
14d00 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20  $connection.. 14d10 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 14d20 67 65 74 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 getRowsFromDataT 14d30 61 62 6c 65 20 7b 20 64 61 74 61 54 61 62 6c 65 able { dataTable 14d40 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 14d50 72 6f 77 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 rows [list].. 14d60 20 20 20 73 65 74 20 63 6f 75 6e 74 20 5b 24 64 set count [$d
14d70 61 74 61 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 73  ataTable Columns
14d80 2e 43 6f 75 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20  .Count]....
14d90 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20   for {set index
14da0 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f  0} {$index <$co
14db0 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78  unt} {incr index
14dc0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  } {..        set
14dd0 20 64 61 74 61 43 6f 6c 75 6d 6e 20 5b 24 64 61   dataColumn [$da 14de0 74 61 54 61 62 6c 65 20 2d 61 6c 69 61 73 20 43 taTable -alias C 14df0 6f 6c 75 6d 6e 73 2e 67 65 74 5f 49 74 65 6d 20 olumns.get_Item 14e00 24 69 6e 64 65 78 5d 0d 0a 20 20 20 20 20 20 20$index]..
14e10 20 73 65 74 20 6e 61 6d 65 73 28 24 69 6e 64 65   set names($inde 14e20 78 29 20 5b 24 64 61 74 61 43 6f 6c 75 6d 6e 20 x) [$dataColumn
14e30 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20  ColumnName]..
14e40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62     }....      ob
14e50 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
14e60 69 61 73 20 64 61 74 61 52 6f 77 20 5b 73 65 74  ias dataRow [set
14e70 20 64 61 74 61 52 6f 77 73 20 5b 24 64 61 74 61   dataRows [$data 14e80 54 61 62 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a Table Rows]] {.. 14e90 20 20 20 20 20 20 20 20 73 65 74 20 72 6f 77 20 set row 14ea0 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... 14eb0 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 for {set index 14ec0 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 0} {$index < $c 14ed0 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 ount} {incr inde 14ee0 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 x} {.. 14ef0 73 65 74 20 76 61 6c 75 65 20 5b 24 64 61 74 61 set value [$data
14f00 52 6f 77 20 2d 63 72 65 61 74 65 20 2d 61 6c 69  Row -create -ali
14f10 61 73 20 67 65 74 5f 49 74 65 6d 20 24 69 6e 64  as get_Item $ind 14f20 65 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ex].... 14f30 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 14f40 67 74 68 20 24 76 61 6c 75 65 5d 20 3e 20 30 20 gth$value] > 0
14f50 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
14f60 20 20 20 20 21 5b 6f 62 6a 65 63 74 20 69 6e 76      ![object inv
14f70 6f 6b 65 20 43 6f 6e 76 65 72 74 20 49 73 44 42  oke Convert IsDB
14f80 4e 75 6c 6c 20 24 76 61 6c 75 65 5d 7d 20 74 68  Null $value]} th 14f90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14fa0 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c lappend row [l 14fb0 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 ist$names($inde 14fc0 78 29 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 x) [$value ToStr
14fd0 69 6e 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing]]..
14fe0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
14ff0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
15000 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28  ow [list $names( 15010 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20$index)]..
15020 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
15030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70  ....        lapp
15040 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20  end rows $row.. 15050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 15060 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 return$rows..
15070 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
15080 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74   dumpRowsFromDat
15090 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c  aTable { channel
150a0 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20   rows } {..
150b0 20 73 65 74 20 73 65 71 75 65 6e 63 65 20 31 0d   set sequence 1.
150c0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
150d0 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20   row $rows {.. 150e0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
150f0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
15100 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15110 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e 63 65  [expr {$sequence 15120 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 > 1 ? "\n" : "" 15130 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 }] "---- ROW #" 15140 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a$sequence :\n]..
15150 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
15160 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20  h pair $row {.. 15170 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c if {[ll 15180 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 ength$pair] >=
15190 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  2} then {..
151a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 151b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 151c0 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 s \t \.. 151d0 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c [list [l 151e0 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 index$pair 0]]
151f0 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64  ": " [list [lind
15200 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d  ex $pair 1]] \n] 15210 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 15220 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 seif {[llength$
15230 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e  pair] == 1} then
15240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15250 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 15260 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d appendArgs \t \. 15270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 15280 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 [list [lindex$
15290 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c  pair 0]] ": <nul
152a0 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  l>\n"]..
152b0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
152c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 152d0 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e hannel \t<empty> 152e0 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 \n; # NOTE: No d 152f0 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 ata?.. 15300 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 15310 20 20 20 20 20 20 20 20 69 6e 63 72 20 73 65 71 incr seq 15320 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a uence.. }.. 15330 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 15340 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 oc cleanupDb { f 15350 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 ileName {varName 15360 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 db} {collect tr 15370 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 ue} {qualify tru 15380 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e}.. 15390 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 {delete 153a0 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 153b0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 153c0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 153d0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 153e0 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 153f0 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 15400 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 15410 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 15420 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 15430 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 15440 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 15450 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 15460 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 15470 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 15480 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 15490 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 154a0 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
154b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
154c0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 154d0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 154e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 154f0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 15500 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 15510 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 15520 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 15530 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 15540 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 15550 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e caller. The han 15560 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 dle to the datab 15570 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f ase previously o 15580 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 pened via the.. 15590 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 # [se 155a0 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 tupDb] procedure 155b0 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 should be store 155c0 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 155d0 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 155e0 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
155f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
15600 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65   NOTE: Close the
15610 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
15620 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e  he database now.
15630 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c    This should al
15640 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20  low us..      #
15650 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20        to delete
15660 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
15670 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20  atabase file...
15680 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
15690 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64   {[info exists d
156a0 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71  b] && [catch {sq
156b0 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72  l close $db} err 156c0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 156d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 156e0 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 # NOTE: We someh 156f0 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f ow failed to clo 15700 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c se the database, 15710 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 15720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15730 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
15740 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
15750 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
15760 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
15770 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
15780 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64   database \"" $d 15790 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 b "\", error: " 157a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c \.. \ 157b0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
157c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
157d0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
157e0 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20  : First, see if
157f0 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72  our caller has r
15800 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d  equested an in-m
15810 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d  emory database..
15820 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15830 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73  set isMemory [is
15840 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61  MemoryDb $fileNa 15850 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a me].... #.. 15860 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 15870 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 ild the full pat 15880 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 h to the databas 15890 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f e file name. Fo 158a0 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d r now, all test. 158b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 158c0 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 atabase files ar 158d0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 e stored in the 158e0 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 158f0 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ory... #.. 15900 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
15910 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d  ory && $qualify} 15920 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15930 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 set fileName [f 15940 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 ile join [getDat 15950 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 abaseDirectory] 15960 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
15970 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  Name]]..      }.
15980 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15990 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
159a0 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c  if the file stil
159b0 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20  l exists...
159c0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$159d0 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c isMemory &&$del
159e0 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69  ete && [file exi
159f0 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 15a00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 15a10 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15a20 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 E: Skip deleting 15a30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 database files 15a40 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 if somebody sets 15a50 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 the global.. 15a60 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 15a70 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 iable to prevent 15a80 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 15a90 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 15aa0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 15ab0 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d cleanupDbFile)]} 15ac0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15ad0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 15ae0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 15af0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 15b00 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 st database file 15b10 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 now... 15b20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 15b30 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 {[set code [cat 15b40 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 15b50 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72$fileName} error
15b60 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
15b70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15b80 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
15b90 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64  e somehow failed
15ba0 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66   to delete the f
15bb0 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e  ile, report why.
15bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
15bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
15be0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 15bf0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 15c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15c10 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 15c20 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 15c30 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 e database file 15c40 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d \""$fileName \.
15c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
15c60 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61   "\" during clea
15c70 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  nup, error: " \n
15c80 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 15c90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 15ca0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 15cb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 15cc0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 15cd0 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 w that we skippe 15ce0 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 d deleting the f 15cf0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 15d00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 #.. set 15d10 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 code 0.... 15d20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
15d30 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
15d40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
15d50 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
15d60 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64  RNING: skipped d
15d70 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65  eleting database
15d80 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 15d90 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 15da0 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 15db0 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 cleanup\n"].. 15dc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 15dd0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 15de0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15df0 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 E: The file does 15e00 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 not exist, succ 15e10 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d ess!.. #. 15e20 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 . set cod 15e30 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e 0.. }.... 15e40 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f return$co
15e50 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  de..    }.....
15e60 20 20 70 72 6f 63 20 73 61 76 65 45 6e 76 69 72    proc saveEnvir
15e70 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
15e80 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65  { names {varName
15e90 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
15ea0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
15eb0 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20   For each name,
15ec0 64 6f 65 73 20 74 68 65 20 6c 69 76 65 20 65 6e  does the live en
15ed0 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
15ee0 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20  le exist?  If..
15ef0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
15f00 20 73 61 76 65 20 74 68 65 20 76 61 6c 75 65 20   save the value
15f10 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68 65 72  for later; other
15f20 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  wise, make sure
15f30 74 68 65 20 73 61 76 65 64 0d 0a 20 20 20 20 20  the saved..
15f40 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 64   #       value d
15f50 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69  oes not exist ei
15f60 74 68 65 72 2e 20 20 54 68 65 20 6c 69 76 65 20  ther.  The live
15f70 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
15f80 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  ables..      #
15f90 20 20 20 20 20 41 52 45 20 4e 4f 54 20 63 68 61       ARE NOT cha
15fa0 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f  nged by this pro
15fb0 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23  cedure...      #
15fc0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
15fd0 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e  ing length $varN 15fe0 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then 15ff0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 {.. set v 16000 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d arName savedEnv. 16010 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 16020 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
16030 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  me savedEnv....
16040 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d       foreach nam
16050 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  e $names {.. 16060 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 16070 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 ists ::env($name
16080 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
16090 20 20 20 20 20 20 73 65 74 20 73 61 76 65 64 45        set savedE
160a0 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76  nv($name)$::env
160b0 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 160c0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 160d0 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 160e0 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 28 mplain savedEnv( 160f0 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20$name)..
16100 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
16110 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
16120 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c  OTE: This is sel
16130 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20  f-cleaning.  If
16140 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e  no saved environ
16150 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e  ment variables n
16160 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
16170 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20    exist, remove
16180 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20  the array...
16190 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
161a0 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 64  array size saved
161b0 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  Env] == 0} then
161c0 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74  {..        unset
161d0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76   -nocomplain sav
161e0 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a  edEnv..      }..
161f0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
16200 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f  oc restoreEnviro
16210 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b  nmentVariables {
16220 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20   names {varName
16230 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
16240 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16250 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64  For each name, d
16260 6f 65 73 20 74 68 65 20 73 61 76 65 64 20 65 6e  oes the saved en
16270 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
16280 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20  le exist?  If..
16290 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
162a0 20 72 65 73 74 6f 72 65 20 74 68 65 20 73 61 76   restore the sav
162b0 65 64 20 76 61 6c 75 65 20 61 6e 64 20 75 6e 73  ed value and uns
162c0 65 74 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65  et it; otherwise
162d0 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20 20 20  , make sure..
162e0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c     #       the l
162f0 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ive environment
16300 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f  variable does no
16310 74 20 65 78 69 73 74 20 65 69 74 68 65 72 20 28  t exist either (
16320 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 23  i.e. it..      #
16330 20 20 20 20 20 20 20 77 61 73 20 6e 6f 74 20 73         was not s
16340 65 74 20 74 6f 20 62 65 67 69 6e 20 77 69 74 68  et to begin with
16350 29 2e 20 20 42 6f 74 68 20 73 61 76 65 64 20 61  ).  Both saved a
16360 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d  nd live environm
16370 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
16380 20 20 20 76 61 72 69 61 62 6c 65 73 20 41 52 45     variables ARE
16390 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
163a0 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
163b0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
163c0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $163d0 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 varName] == 0} t 163e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s 163f0 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 et varName saved 16400 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a Env.. }.... 16410 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
16420 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d  arName savedEnv.
16430 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
16440 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a   name $names {.. 16450 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 16460 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 45 6e o exists savedEn 16470 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 v($name)]} then
16480 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
16490 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20 24 73   ::env($name)$s
164a0 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a  avedEnv($name).. 164b0 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 unset 164c0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 -nocomplain save 164d0 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 dEnv($name)..
164e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
164f0 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d           unset -
16500 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76  nocomplain ::env
16510 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 16520 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 16530 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 16540 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 NOTE: This is se 16550 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 lf-cleaning. If 16560 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f no saved enviro 16570 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 nment variables 16580 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 now.. # 16590 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 exist, remove 165a0 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 the array... 165b0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 165c0 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 [array size save 165d0 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e dEnv] == 0} then 165e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 {.. unse 165f0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 t -nocomplain sa 16600 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d vedEnv.. }. 16610 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 16620 72 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f roc saveSQLiteCo 16630 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d nnectionEnvironm 16640 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ent {} {.. 16650 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 upvar 1 savedEnv 16660 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 16670 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 saveEnvironme 16680 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 16690 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 t \.. D 166a0 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 efaultFlags_SQLi 166b0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f teConnection No_ 166c0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 166d0 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 NewParser] \.. 166e0 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 savedEnv 166f0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 16700 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 proc restoreSQLi 16710 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 teConnectionEnvi 16720 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 16730 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 16740 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 16750 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e . restoreEn 16760 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c vironmentVariabl 16770 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 16780 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 DefaultFla 16790 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 gs_SQLiteConnect 167a0 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e ion No_SQLiteCon 167b0 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 nectionNewParser 167c0 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ] \.. s 167d0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a avedEnv.. }.. 167e0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 ... proc save 167f0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 SQLiteConvertEnv 16800 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 ironment {} {.. 16810 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 upvar 1 sav 16820 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a edEnv savedEnv.. 16830 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 .. saveEnvi 16840 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 16850 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 16860 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f Use_SQLiteCo 16870 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 nvert_DefaultDbT 16880 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f ype Use_SQLiteCo 16890 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 nvert_DefaultTyp 168a0 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 eName] \.. 168b0 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 savedEnv.. 168c0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 168d0 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f restoreSQLiteCo 168e0 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 nvertEnvironment 168f0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 {} {.. upv 16900 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 ar 1 savedEnv sa 16910 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 vedEnv.... 16920 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 restoreEnvironme 16930 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 16940 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55 t \.. U 16950 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 se_SQLiteConvert 16960 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 55 _DefaultDbType U 16970 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 se_SQLiteConvert 16980 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 _DefaultTypeName 16990 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ] \.. s 169a0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a avedEnv.. }.. 169b0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 ... proc setu 169c0 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c pDbInterruptCall 169d0 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c back { channel l 169e0 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 og } {.. tp 169f0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
16a00 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65  -- setting up de
16a10 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74  bugger interrupt
16a20 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a   callback... "..
16a30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
16a40 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61  ch {..        sa
16a50 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  veEnvironmentVar
16a60 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  iables [list \..
16a70 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65              quie
16a80 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72  tFindInterpreter
16a90 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65  TestPath quietSe
16aa0 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65  tupInterpreterTe
16ab0 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20  stPath]....
16ac0 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20     try {..
16ad0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
16ae0 20 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74   # NOTE: Prevent
16af0 20 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69   the vendor scri
16b00 70 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f  pt from being no
16b10 69 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e  isy when creatin
16b20 67 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  g..          #
16b30 20 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65       the isolate
16b40 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  d interpreter...
16b50 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
16b60 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76         set ::env
16b70 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70  (quietFindInterp
16b80 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31  reterTestPath) 1
16b90 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
16ba0 3a 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70  ::env(quietSetup
16bb0 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50  InterpreterTestP
16bc0 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20  ath) 1....
16bd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
16be0 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75   # NOTE: Make su
16bf0 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65  re the script de
16c00 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69  bugger and the i
16c10 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
16c20 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ter..          #
16c30 20 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70         are setup
16c40 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75   and ready for u
16c50 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  se...          #
16c60 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75  ..          debu
16c70 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75  g setup true tru
16c80 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e....          #
16c90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
16ca0 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63  TE: Load the nec
16cb0 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20  essary packages
16cc0 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65  into the isolate
16cd0 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  d interpreter...
16ce0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
16cf0 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61         debug eva
16d00 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l {..
16d10 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65   package require
16d20 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20   Eagle..
16d30 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
16d40 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72  ire Eagle.Librar
16d50 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  y..            p
16d60 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45  ackage require E
16d70 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20  agle.Test..
16d80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
16d90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
16da0 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68   # NOTE: Copy th
16db0 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69  e necessary vari
16dc0 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69  ables into the i
16dd0 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
16de0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
16df0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  #..          deb
16e00 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20  ug invoke 0 set
16e10 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24  ::test_channel $16e20 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a channel; # NOTE: 16e30 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 For [tputs]... 16e40 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 debug i 16e50 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 nvoke 0 set ::te 16e60 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e st_log$log; # N
16e70 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e  OTE: For [tlog].
16e80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
16e90 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
16ea0 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63  E: Install the c
16eb0 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74  allback script t
16ec0 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69  o be evaluated i
16ed0 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a  n the isolated..
16ee0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
16ef0 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68    interpreter wh
16f00 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  en this interpre
16f10 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74  ter is interrupt
16f20 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20  ed by script..
16f30 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16f40 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74  cancellation, et
16f50 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  c...          #.
16f60 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67  .          debug
16f70 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20   callback apply
16f80 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20  {{sender e} {..
16f90 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
16fa0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
16fb0 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20  : Check if this
16fc0 64 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63  debugger callbac
16fd0 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65  k is one that we
16fe0 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20   care about...
16ff0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
17000 20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74           set int
17010 65 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c  erruptTypes [spl
17020 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74  it [$e Interrupt 17030 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 Type] ", "].... 17040 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 if {" 17050 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e Canceled" in$in
17060 74 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20  terruptTypes ||
17070 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
17080 20 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20     "Unwound" in
17090 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d  $interruptTypes} 170a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 170b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 170c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 170d0 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f Make sure the [o 170e0 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 bject] command i 170f0 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 s available. Si 17100 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nce.. 17110 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 # this 17120 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 is an isolated i 17130 6e 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63 nterpreter, chec 17140 6b 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72 k for it the har 17150 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d.. 17160 20 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 # way... 17170 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 17190 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f {[llength [info 171a0 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 commands object 171b0 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ]] > 0} then {.. 171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 171d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 171e0 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 # NOTE: Itera 171f0 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 te through all d 17200 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 17210 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 ons known to the 17220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17230 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 # parent 17240 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 17260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17270 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 17280 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 -alias pair [ob 17290 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 172a0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 172b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 172c0 20 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65$e Interpre
172d0 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d  ter.connections]
172e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
172f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17300 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
17310 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61  E: Attempt to ca
17320 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65  ncel any SQL que
17330 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ries in progress
17340 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   on..
17350 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
17360 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
17370 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  nection...
17380 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
173a0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61   if {[catch {$pa 173b0 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d ir Value.Cancel} 173c0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 173d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 173e0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
173f0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17400 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20  ndArgs \n \..
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17420 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
17430 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61  NG: failed to ca
17440 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22  ncel query for "
17450 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17460 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
17470 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61  nection \"" [$pa 17480 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 ir Key] "\", err 17490 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 or: " \n\t \.. 174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 174b0 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d$error \n]
174c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
174d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
174e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
174f0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
17500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17510 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 17520 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 17530 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 rgs \n \.. 17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 17550 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e === WARNING: can 17560 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 not cancel any q 17570 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 ueries: " \.. 17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17590 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 "the \"object\" 175a0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 command is not 175b0 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 available\n"].. 175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 175d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 175e0 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 }}.. 175f0 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b } finally { 17600 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74 .. rest 17610 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 oreEnvironmentVa 17620 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d riables [list \. 17630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71 . q 17640 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 uietFindInterpre 17650 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65 terTestPath quie 17660 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 tSetupInterprete 17670 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20 rTestPath].. 17680 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 17690 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e rror] == 0} then 176a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 {.. addC 176b0 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 onstraint interr 176c0 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 uptCallback.sqli 176d0 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 te3.... t 176e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 puts$channel ye
176f0 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  s\n..      } els
17700 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
17710 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 17720 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 endArgs "no, err 17730 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
17740 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  r \n]..      }..
17750 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
17760 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b  oc cleanupFile {
17770 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65   fileName {colle
17780 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20  ct true} {force
17790 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
177a0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
177b0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
177c0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20  rce all pending
177d0 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74  "garbage" object
177e0 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65  s to be collecte
177f0 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  d,..      #
17800 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69    including SQLi
17810 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  te statements an
17820 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73  d backup objects
17830 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  ; this should al
17840 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20  low..      #
17850 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e     the underlyin
17860 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  g database file
17870 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a  to be deleted...
17880 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
17890 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65  f {$collect} the 178a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c n {.. col 178b0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 lectGarbage$::t
178c0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
178d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
178e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
178f0 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65  heck if the file
17900 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a   still exists...
17910 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
17920 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
17930 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 17940 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 17950 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 17960 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 kip deleting tes 17970 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 t files if someb 17980 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f ody sets the glo 17990 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 bal variable.. 179a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to 179b0 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 prevent it... 179c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 179d0 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 if {$force || !
179e0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
179f0 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d  o(cleanupFile)]}
17a00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17a10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
17a20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
17a30 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65  to delete the te
17a40 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20  st file now...
17a50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17a60 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f       if {[set co
17a70 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  de [catch {file
17a80 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName 17a90 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 } error]]} then 17aa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 17ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 17ac0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 NOTE: We somehow 17ad0 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 17ae0 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f e the file, repo 17af0 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 17b00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17b10 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
17b20 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
17b30 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
17b40 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
17b50 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
17b60 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69  o delete test fi
17b70 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 17b80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17b90 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 17ba0 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 leanup, error: " 17bb0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
17bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
17bd0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
17be0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
17bf0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
17c00 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69  Show that we ski
17c10 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68  pped deleting th
17c20 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  e file...
17c30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
17c40 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20  set code 0....
17c50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 17c60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 17c70 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 17c80 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 17c90 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 WARNING: skippe 17ca0 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 d deleting test 17cb0 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
17cc0 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
17cd0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
17ce0 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20  leanup\n"]..
17cf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
17d00 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
17d10 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
17d20 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20  : The file does
17d30 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65  not exist, succe
17d40 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ss!..        #..
17d50 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65          set code
17d60 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   0..      }....
17d70 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64       return $cod 17d80 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 17d90 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d proc cleanupMem 17da0 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71 ory { varName {q 17db0 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. 17dc0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 17dd0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 17de0 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 and] && \.. 17df0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 17e00 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 gth$varName] >
17e10 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
17e20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
17e30 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
17e40 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
17e50 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e  iable (e.g. "con
17e60 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65  nection") in the
17e70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
17e80 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72    context of our
17e90 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70   caller.  The op
17ea0 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
17eb0 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20  le for an..
17ec0 20 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e     #       ADO.N
17ed0 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72  ET connection pr
17ee0 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65  eviously returne
17ef0 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65  d by [getDbConne
17f00 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ction]..
17f10 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
17f20 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d  e stored there..
17f30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
17f40 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 17f50 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d Name connection. 17f60 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 17f70 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 17f80 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 17f90 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c$connection Rel
17fa0 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20  easeMemory..
17fb0 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74      } result]} t
17fc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
17fd0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 17fe0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 17ff0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
18000 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
18010 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
18020 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
18030 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
18040 72 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65  release database
18050 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20   memory, error:
18060 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
18070 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 18080 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 18090 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 180a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 180b0 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e if {[llength [in 180c0 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 fo commands debu 180d0 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d g]] > 0} then {. 180e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 180f0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 18100 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 18110 20 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20 debug purge].. 18120 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 18130 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18140 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
18150 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18160 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 18170 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 18180 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 18190 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 181a0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 181b0 74 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72 to purge call fr 181c0 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d ame, error: " \. 181d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 181e0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
181f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
18200 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
18210 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
18220 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c  {..          upl
18230 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62  evel 1 [list deb
18240 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20  ug cleanup]..
18250 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20       } result]}
18260 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
18270 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 18280 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18290 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
182a0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
182b0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
182c0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
182d0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
182e0 20 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72   cleanup interpr
182f0 65 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c  eter, error: " \
18300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18310 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c    \n\t $result \ 18320 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 18330 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 18340 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 18350 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 {.. up 18360 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 level 1 [list de 18370 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 bug collect].. 18380 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d } result]} 18390 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 183a0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
183b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
183c0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 183d0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 183e0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 183f0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 18400 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 18410 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 o collect garbag 18420 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 e, error: " \.. 18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c \ 18440 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
18450 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
18460 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
18470 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
18480 70 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79  proc setupMemory
18490 43 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61  Counters { varNa
184a0 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  me } {..      if
184b0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
184c0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
184d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76  n {..        upv
184e0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f  ar 1 $varName co 184f0 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 unter.... 18500 20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20 set counter(1) 18510 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d [object create - 18520 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 alias \.. 18530 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 System.Diag 18540 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 nostics.Performa 18550 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 nceCounter Proce 18560 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ss \.. 18570 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20 "Working Set" 18580 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b [file rootname [ 18590 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e file tail$::bin
185a0 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20  _file]]]....
185b0 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28      set counter(
185c0 32 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74  2) [object creat
185d0 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20  e -alias \..
185e0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
185f0 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f  iagnostics.Perfo
18600 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72  rmanceCounter Pr
18610 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20  ocess \..
18620 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65       "Working Se
18630 74 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f  t Peak" [file ro
18640 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69  otname [file tai
18650 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d  l $::bin_file]]] 18660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 18670 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65 counter(3) [obje 18680 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 ct create -alias 18690 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 186a0 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 System.Diagnosti 186b0 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f cs.PerformanceCo 186c0 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d unter Process \. 186d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 . "Pr 186e0 69 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69 ivate Bytes" [fi 186f0 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c le rootname [fil 18700 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 e tail$::bin_fi
18710 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  le]]]..      }..
18720 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22  ..      return "
18730 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  "..    }.....
18740 20 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f   proc reportMemo
18750 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61  ryCounters { cha
18760 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65  nnel varName pre
18770 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  fix } {..      i
18780 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
18790 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
187a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70  en {..        up
187b0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63  var 1 $varName c 187c0 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 ounter.... 187d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
187e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
187f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
18800 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f  - " $prefix " co 18810 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 unter \"" \.. 18820 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 [object 18830 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 invoke$counter
18840 28 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d  (1) CounterName]
18850 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20   "\" value is "
18860 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
18870 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c 18880 6f 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c ounter(1) RawVal 18890 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 ue] \n].... 188a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
188b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
188c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
188d0 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63  -- " $prefix " c 188e0 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 ounter \"" \.. 188f0 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 [objec 18900 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 t invoke$counte
18910 72 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65  r(2) CounterName
18920 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22  ] "\" value is "
18930 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18940 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $18950 63 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61 counter(2) RawVa 18960 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 lue] \n].... 18970 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
18980 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
18990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
189a0 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20  --- " $prefix " 189b0 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 counter \"" \.. 189c0 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 [obje 189d0 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 ct invoke$count
189e0 65 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d  er(3) CounterNam
189f0 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20  e] "\" value is
18a00 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
18a10 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
18a20 24 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56  $counter(3) RawV 18a30 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 alue] \n].. 18a40 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 18a50 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 proc collectGa 18a60 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 rbage { channel 18a70 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 {milliseconds 10 18a80 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 00} {quiet true} 18a90 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b } {.. if { 18aa0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 18ab0 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 18ac0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 18ad0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 18ae0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 18af0 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 18b00 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 ry false.. 18b10 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 } result] == 0 18b20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18b30 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
18b40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18b50 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 18b60 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 18b70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18b80 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 "---- memory 18b90 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c in use by the CL 18ba0 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 R before collect 18bb0 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 ion... " \.. 18bc0 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73$res
18bd0 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ult " bytes\n"].
18be0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
18bf0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
18c00 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
18c10 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 18c20 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 18c30 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 18c40 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g 18c50 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 et CLR memory us 18c60 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d age, error: " \. 18c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c . \ 18c80 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
18c90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
18ca0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23    }....      ###
18cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18cf0 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20  ######....
18d00 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
18d10 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 65   Repeatedly atte
18d20 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67  mpt to collect g
18d30 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 65  arbage until the
18d40 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72   allotted number
18d50 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
18d60 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds
18d70 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 6c  has elapsed.  Al
18d80 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f 20  ways attempt to
18d90 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 0d  collect garbage.
18da0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
18db0 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20  t least once...
18dc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
18dd0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
18de0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
18df0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
18e00 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65   start [clock se
18e10 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20  conds]..
18e20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b  set stop [expr {
18e30 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69  $start + ($milli
18e40 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d  seconds / 1000)}
18e50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f 20  ]....        do
18e60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
18e70 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
18e80 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
18e90 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67  ce a full garbag
18ea0 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77  e collection now
18eb0 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20  .  Report any..
18ec0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
18ed0 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65   error that is e
18ee0 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65  ncountered if we
18ef0 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20   fail...
18f00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
18f10 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
18f20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
18f30 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
18f40 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a 20  alMemory true..
18f50 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72           } error
18f60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
18f70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 18f80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 18f90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 18fa0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 18fb0 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 NG: failed full 18fc0 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 garbage collecti 18fd0 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a on, error: " \.. 18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18ff0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
19000 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
19010 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f            set no
19020 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  w [clock seconds
19030 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69  ]..        } whi
19040 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e  le {$start <=$n
19050 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74  ow && $now <$st
19060 6f 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  op}..      }....
19070 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
19080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
190a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
190b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
190c0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
190d0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
190e0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
190f0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
19100 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
19110 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43  object invoke GC
19120 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20   GetTotalMemory
19130 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
19140 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
19150 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19160 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 19170 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19180 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
19190 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
191b0 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20  "---- memory in
191c0 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61  use by the CLR a
191d0 66 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e  fter collection.
191e0 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
191f0 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20          $result 19200 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 19210 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 19220 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 19230 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
19240 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
19250 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19260 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
19270 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43   failed to get C
19280 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c  LR memory usage,
19290 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
192a0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
192b0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 192c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 192d0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 192e0 72 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e roc getSQLiteHan 192f0 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e dleCounts { chan 19300 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 nel {quiet false 19310 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set 19320 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a result [list].. 19330 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 19340 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 19350 6d 61 6e 64 5d 20 26 26 20 5b 68 61 76 65 43 6f mand] && [haveCo 19360 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 nstraint \.. 19370 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 define 19380 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e Constant.System. 19390 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e Data.SQLite.COUN 193a0 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 T_HANDLE]} then 193b0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 193c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 193d0 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 d each critical 193e0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 handle count to 193f0 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 the resulting li 19400 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a st... #.. 19410 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 19420 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 name [list conne 19430 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 ctionCount state 19440 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 mentCount backup 19450 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 Count] {.. 19460 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 19470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 19480 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 19490 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 194a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 194b0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 194c0 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 ite.UnsafeNative 194d0 4d 65 74 68 6f 64 73 20 24 6e 61 6d 65 0d 0a 20 Methods$name..
194e0 20 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65           } value
194f0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
19500 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
19510 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 19520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 19530 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
19540 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19560 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61  ---- critical ha
19570 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 24  ndle count \"" $19580 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24 76 name "\" is "$v
19590 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  alue \n]..
195a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
195b0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
195c0 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20  esult $value.. 195d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 195e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 195f0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
19600 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
19610 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
19620 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
19630 64 20 74 6f 20 67 65 74 20 63 72 69 74 69 63 61  d to get critica
19640 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c  l handle count \
19650 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
19660 20 20 20 20 20 20 24 6e 61 6d 65 20 22 5c 22 2c        $name "\", 19670 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
19680 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20  value \n]..
19690 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
196a0 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  }..      } elsei
196b0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 196c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 196d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 196e0 68 65 20 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 he actual handle 196f0 20 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 counts are not 19700 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 available; there 19710 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 fore, just.. 19720 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 # retu 19730 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 rn an empty list 19740 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 19750 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
19760 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69  nnel "---- criti
19770 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
19780 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22  s unavailable\n"
19790 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
197a0 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 197b0 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 t.. }..... 197c0 20 70 72 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 proc shutdownSQ 197d0 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b Lite { channel { 197e0 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 force false} {qu 197f0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 19800 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 19810 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 NOTE: Make sure 19820 20 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72 that SQLite cor 19830 65 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d e library is com 19840 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e pletely shutdown 19850 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20 23 . This.. # 19860 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 is used b 19870 79 20 74 65 73 74 73 20 74 68 61 74 20 63 68 61 y tests that cha 19880 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f nge configuratio 19890 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 n options and/or 198a0 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 those.. # 198b0 20 20 20 20 20 20 74 68 61 74 20 6e 65 65 64 20 that need 198c0 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 to make sure log 198d0 67 69 6e 67 20 69 73 20 69 6e 69 74 69 61 6c 69 ging is initiali 198e0 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 zed (i.e. just i 198f0 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 20 23 20 n case.. # 19900 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 the SQLite 19910 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 core library wa 19920 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e s initialized in 19930 20 74 68 65 20 70 72 6f 63 65 73 73 20 70 72 69 the process pri 19940 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 or to.. # 19950 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 4c the SQLiteL 19960 6f 67 20 63 6c 61 73 73 20 62 65 69 6e 67 20 61 og class being a 19970 62 6c 65 20 74 6f 20 73 65 74 75 70 20 69 74 73 ble to setup its 19980 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 logging callbac 19990 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 k)... # 199a0 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 Normally, thi 199b0 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 s should only be 199c0 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 performed if SQ 199d0 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 Lite is loaded a 199e0 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 nd.. # 199f0 20 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 ready for use 19a00 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 19a10 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 19a20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c if {$force ||
19a30 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d   [isSQLiteReady]
19a40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19a50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42    #..        # B
19a60 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65  UGFIX: Make sure
19a70 20 74 68 61 74 20 61 6e 79 20 22 6c 65 61 6b 65   that any "leake
19a80 64 22 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  d" transactions
19a90 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 69 6f  and/or connectio
19aa0 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ns..        #
19ab0 20 20 20 20 20 20 61 72 65 20 63 6c 65 61 6e 65        are cleane
19ac0 64 20 75 70 20 62 65 66 6f 72 65 20 63 61 6c 6c  d up before call
19ad0 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73  ing the native s
19ae0 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e  hutdown function
19af0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
19b00 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 74 72        foreach tr
19b10 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 6f 20  ansaction [info
19b20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 7b 0d  transactions] {.
19b30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
19b40 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a  string match \..
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
19b60 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65  stem#Data#SQLite
19b70 23 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69  #SQLiteTransacti
19b80 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 69 6f  on#* $transactio 19b90 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 n]} then {.. 19ba0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 19bb0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 19bc0 20 20 20 20 73 71 6c 20 74 72 61 6e 73 61 63 74 sql transact 19bd0 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 74 72 ion rollback$tr
19be0 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 20 20  ansaction..
19bf0 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20         } error]
19c00 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
19c10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
19c20 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 19c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19c40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
19c50 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
19c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19c70 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 64 20     "---- rolled
19c80 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e  back leaked tran
19c90 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20  saction \"" \..
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19cb0 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20     $transaction 19cc0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 19cd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 19ce0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 19cf0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 19d00 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
19d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19d20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 19d30 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19d50 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 19d60 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 6f 6c 6c : failed to roll 19d70 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e back leaked tran 19d80 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 saction \"" \.. 19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19da0 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20$transaction
19db0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
19dc0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 19de0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 19df0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 19e00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 19e10 20 66 6f 72 65 61 63 68 20 64 62 20 5b 69 6e 66 foreach db [inf 19e20 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b o connections] { 19e30 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 19e40 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d [string match \. 19e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 19e60 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 ystem#Data#SQLit 19e70 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e#SQLiteConnecti 19e80 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65 6e 20 on#*$db]} then
19e90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
19ea0 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c 20 63  f {[catch {sql c
19eb0 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d  lose $db} error] 19ec0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 19ee0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
19ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19f00 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 19f10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19f30 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73 65 64 "---- closed 19f40 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65 leaked database 19f50 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d 0d 0a \""$db \"\n]..
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
19f80 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
19f90 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 19fa0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19fb0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 19fc0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
19fd0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
19ff0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1a000 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 6b 65  d to close leake
1a010 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c  d database \"" \
1a020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1a030 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65        $db "\", e 1a040 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
1a050 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
1a060 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1a070 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1a080 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1a090 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1a0a0 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20        # BUGFIX:
1a0b0 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74  Before calling t
1a0c0 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f  he native shutdo
1a0d0 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b  wn function, mak
1a0e0 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20  e sure both..
1a0f0 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 6f       #         o
1a100 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c  f the PRAGMA rel
1a110 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e  ated directory n
1a120 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d  ames are freed..
1a130 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1a140 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
1a150 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63  teDirectories $c 1a160 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 hannel true.... 1a170 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 1a180 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 1a190 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 1a1a0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 1a1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a1c0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1a1d0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM 1a1e0 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 73 ethods sqlite3_s 1a1f0 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20 20 20 hutdown.. 1a200 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d } result] == 0} 1a210 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1a220 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1a230 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1a240 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1a250 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1a260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a270 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c "---- call sql 1a280 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e ite3_shutdown(). 1a290 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 .. ok: "$result
1a2a0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1a2b0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
1a2c0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  e {..          i
1a2d0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1a2e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a2f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1a300 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1a320 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  --- call sqlite3
1a330 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65  _shutdown()... e
1a340 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 1a350 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1a360 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1a370 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1a380 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 ..... proc re 1a390 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 portSQLiteResour 1a3a0 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ces {.. 1a3b0 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 channel {quie 1a3c0 74 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 74 20 t false} {reset 1a3d0 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 true} {collect t 1a3e0 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 rue} } {.. 1a3f0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1a400 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 If available, r 1a410 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 6f eport on (and po 1a420 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 68 ssibly reset) th 1a430 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 e runtime.. 1a440 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 # configu 1a450 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 ration statistic 1a460 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 1a470 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1a480 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1a490 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1a4a0 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 [haveConstraint 1a4b0 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 buildConfigurat 1a4c0 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b 63 ion.Debug] && [c 1a4d0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1a4e0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 1a4f0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 1a500 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 1a510 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1a520 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 1a530 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 65 74 ativeMethods set 1a540 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a tingReadCounts.. 1a550 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 } settingR 1a560 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d eadCounts] == 0} 1a570 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1a580 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b set nameCount [ 1a590 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e$settingReadCoun
1a5a0 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20  ts Count]..
1a5b0 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e     set valueCoun
1a5c0 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f  t 0....        o
1a5d0 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61  bject foreach -a
1a5e0 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69  lias pair $setti 1a5f0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a ngReadCounts {.. 1a600 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 incr v 1a610 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 alueCount [$pair
1a620 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20   Value]....
1a630 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1a640 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a650 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1a660 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1a670 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a680 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e      "---- settin
1a690 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79  g \"" [$pair Key 1a6a0 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 ] "\" was read " 1a6b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a6c0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
1a6d0 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20  ] " times\n"]..
1a6e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1a6f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1a700 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65   if {$reset} the 1a710 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 1a720 66 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74 f {[catch {$sett
1a730 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6c  ingReadCounts Cl
1a740 65 61 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30  ear} error] == 0
1a750 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a760 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1a770 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1a780 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1a790 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1a7a0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1a7b0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72           "---- r
1a7c0 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61  eset setting sta
1a7d0 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20  tistics for the
1a7e0 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20  previous " \..
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a800 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 1a810 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
1a820 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65  ount " values re
1a830 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  ad\n"]..
1a840 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1a850 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1a860 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1a870 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1a880 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1a890 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1a8a0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 NG: failed to re 1a8b0 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 set setting stat 1a8c0 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a istics for " \.. 1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1a8e0 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 "the previous " 1a8f0 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d$nameCount " nam
1a900 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43  es and " $valueC 1a910 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 ount \.. 1a920 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 " values 1a930 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 20 read, error: " 1a940 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1a950 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1a960 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1a970 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68  ....      if {[h
1a980 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
1a990 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b 68 61 76 65  ommand] && [have
1a9a0 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20  Constraint \..
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69              defi
1a9c0 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
1a9d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
1a9e0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
1a9f0 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  BLE] && \..
1aa00 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72       [haveConstr
1aa10 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  aint \..
1aa20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73        defineCons
1aa30 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
1aa40 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45  .SQLite.TRACK_ME
1aa50 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65  MORY_BYTES]} the
1aa60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
1aa70 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1aa80 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1aa90 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1aaa0 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20   current memory
1aab0 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
1aac0 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20  Memory... "..
1aad0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1aae0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1aaf0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1ab00 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1ab10 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1ab20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1ab30 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
1ab40 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 73  LiteMemory bytes
1ab50 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20  Allocated..
1ab60 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20     } memory] ==
1ab70 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1ab80 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1ab90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1aba0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1abb0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1abc0 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73   $memory " bytes 1abd0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 1abe0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1abf0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s 1ac00 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow 1ac10 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n.... i 1ac20 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1ac30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1ac40 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1ac50 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
1ac60 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
1ac70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1ac80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$1ac90 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1aca0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1acb0 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61  channel "---- ma
1acc0 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20  ximum memory in
1acd0 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d  use by SQLiteMem
1ace0 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20  ory... "..
1acf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
1ad00 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1ad10 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1ad20 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
1ad30 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
1ad40 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
1ad50 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
1ad60 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42  eMemory maximumB
1ad70 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20  ytesAllocated..
1ad80 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d         } memory]
1ad90 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1ada0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1adb0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1adc0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1add0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1ade0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62  Args $memory " b 1adf0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 1ae00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1ae10 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1ae20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 1ae30 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 known.... 1ae40 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1ae50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ae60 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1ae70 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
1ae80 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
1ae90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1aea0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
1aeb0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1aec0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1aed0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1aee0 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d   "---- current m
1aef0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
1af00 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20  SQLite... "..
1af10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
1af20 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
1af30 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
1af40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
1af50 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
1af60 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
1af70 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
1af80 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
1af90 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
1afa0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
1afb0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c  ativeMethods sql
1afc0 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64  ite3_memory_used
1afd0 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f  ..        } memo
1afe0 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
1aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1b000 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1b010 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1b020 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1b030 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 1b040 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 1b050 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1b060 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1b070 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1b080 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 # NOTE: Maybe 1b090 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core 1b0a0 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 library is unav 1b0b0 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 ailable?.. 1b0c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1b0d0 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e set memory unkn 1b0e0 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 own.... 1b0f0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1b100 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1b110 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1b120 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
1b130 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mory \n]..
1b140 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1b150 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
1b160 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65  ..        set me
1b170 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65  mory unavailable
1b180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1b190 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1b1a0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 1b1b0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1b1c0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 1b1d0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 1b1e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 }.... s 1b1f0 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 et result$memor
1b200 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72  y; # NOTE: Retur
1b210 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20  n memory in-use
1b220 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  to our caller...
1b230 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 1b240 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1b250 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1b260 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75  nel "---- maximu
1b270 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  m memory in use
1b280 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a  by SQLite... "..
1b290 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1b2a0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
1b2b0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
1b2c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1b2d0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1b2e0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1b2f0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1b300 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1b310 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1b320 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
1b330 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
1b340 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1b350 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f   sqlite3_memory_
1b360 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20 20  highwater 0..
1b370 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d       } memory] =
1b380 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1b390 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1b3a0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1b3b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1b3c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1b3d0 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74  gs $memory " byt 1b3e0 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 1b3f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 1b400 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1b410 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1b420 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 NOTE: Maybe the 1b430 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 1b440 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 ary is unavailab 1b450 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 le?.. # 1b460 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1b470 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a memory unknown.. 1b480 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1b490 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1b4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1b4b0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1b4c0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
1b4d0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1b4e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1b4f0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1b500 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1b510 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20  unavailable....
1b520 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1b530 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1b540 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1b550 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b560 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 1b570 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1b580 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 .... if {$c
1b590 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a  ollect} then {..
1b5a0 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47          collectG
1b5b0 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d  arbage $channel. 1b5c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1b5d0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1b5e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
1b5f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 1b600 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f --- current memo 1b610 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 ry in use by the 1b620 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 CLR... ".. 1b630 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 1b640 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 1b650 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 1b660 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 1b670 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1b680 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1b690 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 1b6a0 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 ry false.. 1b6b0 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 } memory] == 0 1b6c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b6d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 1b6e0 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69 is integer -stri 1b6f0 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 ct$memory]} the
1b700 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1b710 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1b720 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1b730 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1b740 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $1b750 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e memory " bytes\n 1b760 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "].. 1b770 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 1b780 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1b790 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e set memory in 1b7a0 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 valid.... 1b7b0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1b7c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b7d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1b7e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1b7f0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1b800 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1b810 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1b820 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1b830 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
1b840 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20  ry unknown....
1b850 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1b860 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1b870 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1b880 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1b890 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 1b8a0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1b8b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1b8c0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1b8d0 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 set memory unav 1b8e0 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 ailable.... 1b8f0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1b900 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1b910 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1b920 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
1b930 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mory \n]..
1b940 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
1b950 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 1b960 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 1b970 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 1b980 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 rSQLiteDirectori 1b990 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 es { channel {re 1b9a0 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a set false} } {.. 1b9b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1b9c0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 1b9d0 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 1b9e0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 1b9f0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 function is avai 1ba00 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d lable... #. 1ba10 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
1ba20 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
1ba30 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
1ba40 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73  g for function s
1ba50 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
1ba60 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d  _directory... ".
1ba70 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1ba80 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63    # NOTE: This c
1ba90 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74  all to the sqlit
1baa0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
1bab0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20  ectory function
1bac0 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20  uses the..
1bad0 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20  #       invalid
1bae0 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20  value 0 for the
1baf0 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20  first argument.
1bb00 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65   This code is de
1bb10 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20  signed..      #
1bb20 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69        to check i
1bb30 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75  f calling the fu
1bb40 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73  nction will rais
1bb50 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28  e an exception (
1bb60 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20  i.e...      #
1bb70 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 72      the actual r
1bb80 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
1bb90 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d  ction does not m
1bba0 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73  atter as long as
1bbb0 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   no..      #
1bbc0 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 20     directory is
1bbd0 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20  changed)...
1bbe0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63   #..      if {[c
1bbf0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1bc00 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1bc10 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1bc20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
1bc30 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1bc40 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
1bc50 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
1bc60 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e       sqlite3_win
1bc70 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
1bc80 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d   0 null..      }
1bc90 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1bca0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1bcb0 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69     # NOTE: Calli
1bcc0 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77  ng the sqlite3_w
1bcd0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
1bce0 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  ry function does
1bcf0 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20   not..        #
1bd00 20 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 65        cause an e
1bd10 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66  xception; theref
1bd20 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ore, it must be
1bd30 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d  available (i.e..
1bd40 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1bd50 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20   even though it
1bd60 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20  should return a
1bd70 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63  failure return c
1bd80 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20  ode in this..
1bd90 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73       #       cas
1bda0 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e)...        #..
1bdb0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
1bdc0 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69  raint sqlite3_wi
1bdd0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
1bde0 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  y....        tpu
1bdf0 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ 1be00 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n.... #.. 1be10 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1be20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 Does our caller 1be30 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 want to reset th 1be40 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a e directories?.. 1be50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1be60 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 if {$reset} t
1be70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1be80 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1be90 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73  NOTE: Now make s
1bea0 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
1beb0 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64   and temporary d
1bec0 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a  irectories are..
1bed0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1bee0 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65    reset their de
1bef0 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68  fault values, wh
1bf00 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75  ich should be nu
1bf10 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20  ll for both...
1bf20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1bf30 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65  Since the sqlite
1bf40 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
1bf50 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69  ctory function i
1bf60 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20  s available,..
1bf70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1bf80 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
1bf90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1bfa0 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31  for {set index 1
1bfb0 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b  } {$index < 3} { 1bfc0 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 incr index} {.. 1bfd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 1bfe0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1bff0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1c000 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1c010 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1c020 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 1c030 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 1c040 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 1c050 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ds \.. 1c060 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f sqlite3_ 1c070 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 1c080 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d ory$index null.
1c090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 72  .            } r
1c0a0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
1c0b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1c0c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1c0d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1c0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1c0f0 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 "---- call sq 1c100 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 1c110 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 directory("$ind
1c120 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ex \..
1c130 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29          ", null)
1c140 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c  ... ok: " $resul 1c150 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 1c160 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1c170 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1c180 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1c190 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1c1a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1c1b0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69   call sqlite3_wi
1c1c0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
1c1d0 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20  y(" $index \.. 1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c1f0 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f ", null)... erro 1c200 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c r: " \n\t$resul
1c210 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
1c220 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1c230 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
1c240 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1c250 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1c260 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 nnel no\n.... 1c270 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1c280 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 # NOTE: Does our 1c290 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 caller want to 1c2a0 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 reset the direct 1c2b0 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e ories? This can 1c2c0 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 only.. # 1c2d0 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f 72 be perfor 1c2e0 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 med if SQLite is 1c2f0 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64 loaded and read 1c300 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 y for use by the 1c310 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 1c320 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 suite... 1c330 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1c340 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26 20 if {$reset &&
1c350 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d  [isSQLiteReady]}
1c360 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c370 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1c380 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65  # NOTE: Now make
1c390 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
1c3a0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
1c3b0 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65   directories are
1c3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
1c3d0 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20      reset their
1c3e0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20  default values,
1c3f0 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20  which should be
1c400 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a  null for both...
1c410 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1c420 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69    Since the sqli
1c430 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
1c440 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
1c450 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20   does not..
1c460 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70       #       app
1c470 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c 61  ear to be availa
1c480 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 73  ble, use the ass
1c490 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 63  ociated PRAGMA c
1c4a0 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 20  ommands..
1c4b0 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65     #       inste
1c4c0 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ad...          #
1c4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
1c4e0 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c  ach directory [l
1c4f0 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  ist data_store_d
1c500 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74  irectory temp_st
1c510 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b  ore_directory] {
1c520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
1c530 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67  t sql [appendArg
1c540 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72  s "PRAGMA " $dir 1c550 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b ectory " = \"\"; 1c560 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 1c570 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 if {[catch {ex 1c580 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 ecuteSql$sql} r
1c590 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
1c5a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1c5b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1c5c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1c5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1c5e0 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 "---- execute 1c5f0 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 PRAGMA "$direc
1c600 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22  tory "... ok: \"
1c610 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1c620 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 5c         $result \ 1c630 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 1c640 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1c650 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1c660 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1c670 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1c680 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1c690 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22  execute PRAGMA "
1c6a0 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e   $directory "... 1c6b0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c \ 1c6d0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
1c6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c6f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1c700 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1c710 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1c720 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c    # NOTE: Finall
1c730 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 72  y, show the curr
1c740 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
1c750 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65   database and te
1c760 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23  mporary..      #
1c770 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 69         directori
1c780 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e  es.  This can on
1c790 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20  ly be performed
1c7a0 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61  if SQLite is loa
1c7b0 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ded..      #
1c7c0 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72     and ready for
1c7d0 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
1c7e0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23   suite...      #
1c7f0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53  ..      if {[isS
1c800 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65  QLiteReady]} the
1c810 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  n {..        for
1c820 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b  each directory [
1c830 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f  list data_store_
1c840 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73  directory temp_s
1c850 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20  tore_directory]
1c860 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1c870 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1c880 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 endArgs "---- ch 1c890 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74 ecking "$direct
1c8a0 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20  ory "... "]....
1c8b0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c           set sql
1c8c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52   [appendArgs "PR
1c8d0 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72  AGMA " $director 1c8e0 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 y \;].... 1c8f0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 if {[catch {e 1c900 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73 xecuteSql$sql s
1c910 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d  calar} result] =
1c920 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1c930 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1c940 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1c950 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 rgs "ok: \""$re
1c960 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  sult \"\n]..
1c970 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1c980 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1c990 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1c9a0 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22 ndArgs "error: " 1c9b0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
1c9c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1c9d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1c9e0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
1c9f0 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74    proc loadSQLit
1ca00 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20  eTestSettings {
1ca10 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20  channel {suffix
1ca20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65  ""} {quiet false
1ca30 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
1ca40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
1ca50 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73  ip loading the s
1ca60 65 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 72  ettings if their
1ca70 20 75 73 61 67 65 20 68 61 73 20 62 65 65 6e 20   usage has been
1ca80 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20  disabled...
1ca90 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b   #..      if {![
1caa0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1cab0 28 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 69  (sqliteTestSetti
1cac0 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ngs)]} then {..
1cad0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1cae0 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63    # NOTE: Load c
1caf0 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61  ustom per-user a
1cb00 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74  nd/or per-host t
1cb10 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77  est settings now
1cb20 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1cb30 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
1cb40 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61  exists ::tcl_pla
1cb50 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68  tform(user)]} th
1cb60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1cb70 73 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 73  set userSettings
1cb80 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a  FileName [file j
1cb90 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69  oin [getCommonDi
1cba0 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20  rectory] \..
1cbb0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
1cbc0 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24  dArgs settings $1cbd0 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f suffix .$::tcl_
1cbe0 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e  platform(user) .
1cbf0 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eagle]]....
1cc00 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
1cc10 78 69 73 74 73 20 24 75 73 65 72 53 65 74 74 69  xists $userSetti 1cc20 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 ngsFileName]} th 1cc30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1cc40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1cc50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1cc60 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1cc70 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1cc80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cc90 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 "---- loadi 1cca0 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 ng per-user test 1ccb0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 1ccc0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1ccd0 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74$userSet
1cce0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22  tingsFileName \"
1ccf0 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ...\n]..
1cd00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1cd10 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1cd20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1cd30 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
1cd40 20 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 74   source $userSet 1cd50 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a tingsFileName].. 1cd60 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 } er 1cd70 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 1cd80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1cd90 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1cda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1cdb0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1cdc0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1cde0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 1cdf0 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 : failed to load 1ce00 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e per-user settin 1ce10 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 gs file \"" \.. 1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ce30 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73$userSettings
1ce40 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72  FileName "\", er
1ce50 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 1ce60 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 1ce70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1ce80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1ce90 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1cea0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1ceb0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1cec0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1ced0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1cee0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1cef0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1cf00 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 skipped loading 1cf10 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 per-user test s 1cf20 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 1cf30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cf40 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69$userSetti
1cf50 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c  ngsFileName "\",
1cf60 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
1cf70 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
1cf80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1cf90 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1cfa0 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23  .        #######
1cfb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cfc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cfd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cfe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1d000 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1d010 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74  cl_platform(host
1d020 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
1d030 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65        set hostSe
1d040 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b  ttingsFileName [
1d050 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f  file join [getCo
1d060 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c  mmonDirectory] \
1d070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d080 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74  [appendArgs sett
1d090 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24  ings $suffix .$
1d0a0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68  ::tcl_platform(h
1d0b0 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d  ost) .eagle]]...
1d0c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
1d0d0 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73  file exists $hos 1d0e0 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 1d0f0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 1d100 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1d110 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1d120 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1d130 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1d140 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1d150 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1d160 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 loading per-hos 1d170 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 t test settings 1d180 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68$h
1d1a0 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
1d1b0 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20  ame \"...\n]..
1d1c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1d1d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
1d1e0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1d1f0 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31         uplevel 1
1d200 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68   [list source $h 1d210 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 1d220 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ame].. 1d230 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e } error]} then 1d240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d250 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1d260 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d270 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1d280 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1d290 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1d2a0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1d2b0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1d2c0 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 o load per-host 1d2d0 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 settings file \" 1d2e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1d2f0 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65$hostSe
1d300 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22  ttingsFileName "
1d310 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
1d320 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 1d330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1d340 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1d350 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1d360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1d370 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1d380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1d390 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1d3a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d3c0 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c "---- skipped l 1d3d0 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 oading per-host 1d3e0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 test settings fi 1d3f0 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 le \"" \.. 1d400 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73$hos
1d410 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
1d420 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e  e "\", it does n
1d430 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
1d440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1d450 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1d460 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
1d470 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1d480 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72   runSQLiteTestPr
1d490 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20  ologue {} {..
1d4a0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1d4b0 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67  TE: Skip running
1d4c0 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c   our custom prol
1d4d0 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e  ogue if the main
1d4e0 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20   one has been..
1d4f0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69       #       ski
1d500 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  pped...      #..
1d510 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
1d520 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f   exists ::no(pro
1d530 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74  logue.eagle)]} t
1d540 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1d550 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1d560 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f  : Load the "befo
1d570 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  re-constraints"
1d580 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
1d590 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d  and/or per-host.
1d5a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1d5b0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e   test settings n
1d5c0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
1d5d0 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
1d5e0 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
1d5f0 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $1d600 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 1d610 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 before].... 1d620 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1d630 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 1d640 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d he [object] comm 1d650 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 and is available 1d660 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64 20 73 6f ; if not, add so 1d670 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 me.. # 1d680 20 20 20 20 73 68 69 6d 73 20 74 6f 20 6d 61 6b shims to mak 1d690 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 e the test suite 1d6a0 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a run smoother... 1d6b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1d6c0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 1d6d0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 24 eObjectCommand$
1d6e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
1d6f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1d700 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74       # NOTE: Det
1d710 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 73  ermine the names
1d720 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 70   of the native p
1d730 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68  latform and arch
1d740 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  itecture...
1d750 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
1d760 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42  t platform [getB
1d770 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75  uildPlatform tru
1d780 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  e]..        set
1d790 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 72  architecture [ar
1d7a0 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61  chitectureForPla
1d7b0 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d  tform $platform] 1d7c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1d7d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 1d7e0 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72 6d how the platform 1d7f0 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 and architectur 1d800 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 6c e used to help l 1d810 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20 20 ocate the.. 1d820 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 # nativ 1d830 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a e build files... 1d840 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1d850 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1d860 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1d870 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1d880 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f      "---- platfo
1d890 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20  rm for locating
1d8a0 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c  native build fil
1d8b0 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20  es is \"" \..
1d8c0 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f           $platfo 1d8d0 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 rm \"\n].... 1d8e0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1d8f0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1d900 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1d910 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69       "---- archi
1d920 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 61  tecture for loca
1d930 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c  ting native buil
1d940 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c  d files is \"" \
1d950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61  ..            $a 1d960 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c 6e rchitecture \"\n 1d970 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 1d980 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1d990 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 Build a list of 1d9a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 configuration fi 1d9b0 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 les that we hand 1d9c0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 1d9d0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 set conf 1d9e0 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 igFileNames [lis 1d9f0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 1da00 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1da10 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d ite.dll.config]. 1da20 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1da30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 1da40 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61 75 ild a list of au 1da50 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64 20 xiliary Managed 1da60 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 1da70 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20 20 ants (MDA).. 1da80 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 # conf 1da90 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 iguration files 1daa0 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d that we handle.. 1dab0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1dac0 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66 69 set mdaConfi 1dad0 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 gFileNames [list 1dae0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1daf0 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78 65 EagleShell32.exe 1db00 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74 .mda.config Inst 1db10 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f aller.exe.mda.co 1db20 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 nfig \.. 1db30 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 test.exe.mda 1db40 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e 71 .config testlinq 1db50 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 .exe.mda.config 1db60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 1db70 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63 estef6.exe.mda.c 1db80 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 onfig].... 1db90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1dba0 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c OTE: Build the l 1dbb0 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c 20 ist of external 1dbc0 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 files that we ha 1dbd0 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a ndle. Some of.. 1dbe0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1dbf0 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79 20 these files may 1dc00 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 be native and/or 1dc10 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 1dc20 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20 20 ies that are.. 1dc30 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 1dc40 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f 72 quired to perfor 1dc50 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 2e m various tests. 1dc60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1dc70 20 20 20 20 20 73 65 74 20 65 78 74 65 72 6e 61 set externa 1dc80 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 lFileNames [list 1dc90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1dca0 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74 [file join Entit 1dcb0 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b yFramework lib [ 1dcc0 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 string map [list 1dcd0 20 46 78 20 22 22 5d 20 5b 73 74 72 69 6e 67 20 Fx ""] [string 1dce0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d \.. m 1dcf0 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34 35 ap [list netFx45 1dd00 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 1 netFx45 netFx4 1dd10 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 52 netFx45 netFx 1dd20 34 36 20 6e 65 74 46 78 34 35 20 5c 0d 0a 20 20 46 netFx45 \.. 1dd30 20 20 20 20 20 20 20 20 20 20 6e 65 74 46 78 34 netFx4 1dd40 36 31 20 6e 65 74 46 78 34 35 5d 20 5b 67 65 74 61 netFx45] [get 1dd50 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 6e BuildNetFx]]] En 1dd60 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c tityFramework.dl 1dd70 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 l]].... # 1dd80 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1dd90 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 : Build the list 1dda0 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65 6d of native assem 1ddb0 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 bly files that w 1ddc0 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d 0a e handle. The.. 1ddd0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1dde0 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79 73 74 reason the "Syst 1ddf0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 1de00 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e 63 6c ll" file is incl 1de10 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a 20 20 uded here is.. 1de20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 1de30 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64 20 62 cause it could b 1de40 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 e the mixed-mode 1de50 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 assembly... 1de60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 1de70 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d et nativeFileNam 1de80 65 73 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 es [getNativeLib 1de90 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c raryFileNamesOnl 1dea0 79 5d 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 y].. lapp 1deb0 65 6e 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 end nativeFileNa 1dec0 6d 65 73 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 mes SQLite.Inter 1ded0 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 op.dll System.Da 1dee0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 0d ta.SQLite.dll... 1def0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1df00 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 1df10 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 d the list of ma 1df20 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 naged assembly f 1df30 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 1df40 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d dle... #. 1df50 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e . set man 1df60 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c agedFileNames [l 1df70 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 1df80 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1df90 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d QLite.dll System 1dfa0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin 1dfb0 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 q.dll \.. 1dfc0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1dfd0 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d .SQLite.EF6.dll] 1dfe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1dff0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 1e000 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20 63 emove any test c 1e010 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 20 onstraints that 1e020 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61 74 refer to the nat 1e030 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 ive and/or.. 1e040 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 # mana 1e050 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c ged assembly fil 1e060 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c es that we handl 1e070 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 e unless forbidd 1e080 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 en from.. 1e090 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20 73 # doing s 1e0a0 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 o... #.. 1e0b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1e0c0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 o exists ::no(sq 1e0d0 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 liteRemoveConstr 1e0e0 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d aints)]} then {. 1e0f0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea 1e100 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e ch fileName$con
1e110 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
1e120 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f              remo
1e130 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
1e140 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24  pendArgs file_ $1e150 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. 1e160 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1e170 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 1e180 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 Name$mdaConfigF
1e190 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
1e1a0 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
1e1b0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
1e1c0 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 1e1d0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 1e1e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1e1f0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 1e200 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61$externalFileNa
1e210 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
1e220 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61     removeConstra
1e230 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
1e240 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c  file_ [file tail
1e250 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20   $fileName]].. 1e260 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1e270 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 1e280 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
1e290 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
1e2a0 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
1e2b0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
1e2c0 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 1e2d0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 1e2e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1e2f0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 1e300 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d$managedFileNam
1e310 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
1e320 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69    removeConstrai
1e330 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1e340 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ile_ $fileName]. 1e350 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1e360 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1e370 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1e380 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 NOTE: Skip all S 1e390 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1e3a0 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 e related file h 1e3b0 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e andling (deletin 1e3c0 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 g,.. # 1e3d0 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 copying, and 1e3e0 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 6e 73 loading) if ins 1e3f0 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 1e400 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 1e410 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1e420 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29 :no(sqliteFiles) 1e430 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1e440 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e450 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 1e460 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 rying to delete 1e470 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 any files if ins 1e480 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 1e490 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e4a0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1e4b0 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 ts ::no(deleteSq 1e4c0 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the 1e4d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1e4e0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1e4f0 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 ts ::no(deleteSq 1e500 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 liteConfigFiles) 1e510 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1e520 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 1e530 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 fileName$confi
1e540 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e560 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c  yDeleteBinaryFil
1e570 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  e $fileName.. 1e580 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1e590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1e5a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1e5b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1e5c0 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 o(deleteSqliteEx 1e5d0 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 ternalFiles)]} t 1e5e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e5f0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 1e600 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 eName$mdaConfig
1e610 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1e630 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20  DeleteBuildFile
1e640 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 1e650 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1e660 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 1e670 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 ach fileName$ex
1e680 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
1e690 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1e6a0 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61     tryDeleteBina
1e6b0 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ryFile $fileName 1e6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e6d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1e6e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1e6f0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 1e700 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c s ::no(deleteSql 1e710 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d iteNativeFiles)] 1e720 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e730 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1e740 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1e750 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 eleteSqliteImpli 1e760 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e citFiles)]} then 1e770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1e780 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 1e790 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
1e7a0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
1e7b0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
1e7c0 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 1e7d0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 1e7e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1e7f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1e800 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1e810 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1e820 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e no(deleteSqliteN 1e830 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 onImplicitFiles) 1e840 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1e850 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1e860 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1e870 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c o(deleteSqlitePl 1e880 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 atformFiles)] && 1e890 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e8a0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 1e8b0 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
1e8c0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e8e0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
1e8f0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 1e900 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 1e910 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 1e920 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
1e930 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d  eName $platform. 1e940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1e950 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1e960 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1e970 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1e980 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1e990 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 o(deleteSqliteAr 1e9a0 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 1e9b0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 1e9d0 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
1e9e0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
1e9f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ea00 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1ea10 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 1ea20 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ea40 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d tryDeleteAssem 1ea50 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 bly$fileName $a 1ea60 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 1ea80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ea90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1eaa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1eab0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1eac0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1ead0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 1eae0 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c SqliteManagedFil 1eaf0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 1eb00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 1eb10 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 ach fileName$ma
1eb20 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  nagedFileNames {
1eb30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1eb40 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d    tryDeleteAssem
1eb50 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  bly $fileName.. 1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1eb70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1eb80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1eb90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1eba0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1ebb0 63 6b 20 66 6f 72 20 74 68 65 20 22 61 75 74 6f ck for the "auto 1ebc0 53 65 6c 65 63 74 22 20 72 75 6e 74 69 6d 65 20 Select" runtime 1ebd0 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 option. If pres 1ebe0 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ent,.. 1ebf0 23 20 20 20 20 20 20 20 61 74 74 65 6d 70 74 20 # attempt 1ec00 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 to automatically 1ec10 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 select the firs 1ec20 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 t available.. 1ec30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 1ec40 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 61 73 uild (or "releas 1ec50 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e e") of SQLite an 1ec60 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 d System.Data.SQ 1ec70 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Lite.. 1ec80 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 65 20 # for use 1ec90 77 69 74 68 20 74 68 65 20 74 65 73 74 20 73 75 with the test su 1eca0 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ite... 1ecb0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 1ecc0 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 {[hasRuntimeOpti 1ecd0 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 on autoSelect]} 1ece0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1ecf0 20 20 20 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 if {![checkF 1ed00 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 orSQLiteBuilds$
1ed10 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74  ::test_channel t
1ed20 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  rue]} then {..
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
1ed40 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73  kForSQLiteReleas
1ed50 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  es $::test_chann 1ed60 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 el true.. 1ed70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1ed80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1ed90 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1eda0 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 1edb0 67 20 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 g to verify the 1edc0 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 1edd0 69 66 20 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a if instructed;.. 1ede0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1edf0 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b otherwise, mak 1ee00 65 20 73 75 72 65 20 69 74 20 61 63 74 75 61 6c e sure it actual 1ee10 6c 79 20 65 78 69 73 74 73 20 6f 72 20 68 61 6c ly exists or hal 1ee20 74 20 74 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 t the entire.. 1ee30 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ee40 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 testing process 1ee50 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 if it does not e 1ee60 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 xist... 1ee70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 1ee80 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1ee90 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 ::no(verifyBuild 1eea0 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 Directory)]} the 1eeb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1eec0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1eed0 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 # NOTE: At this 1eee0 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 point, the build 1eef0 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53 54 20 directory MUST 1ef00 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20 20 20 exist as a.. 1ef10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ef20 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79 20 valid directory 1ef30 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e 67 20 for the testing 1ef40 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 process to conti 1ef50 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 nue... 1ef60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1ef70 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b set directory [ 1ef80 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 1ef90 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 y].... 1efa0 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 1efb0 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 sts$directory]
1efc0 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
1efd0 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64        ![file isd
1efe0 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74  irectory $direct 1eff0 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. 1f000 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 1f020 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 OTE: Just prior 1f030 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 to actually halt 1f040 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 ing the testing 1f050 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 process,.. 1f060 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1f070 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 add an error to 1f080 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c the test log fil 1f090 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 1f0a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1f0b0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1f0c0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1f0d0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1f0e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1f0f0 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79  could not verify
1f100 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
1f110 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20   \"" $directory 1f120 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f130 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 "\", all te 1f140 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d sting halted\n"] 1f150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1f160 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1f170 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 # NOTE: Raisi 1f180 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72 6f ng a script erro 1f190 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e r from this poin 1f1a0 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 t should halt.. 1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 1f1c0 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e 67 the testing 1f1d0 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 process... 1f1e0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1f1f0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error 1f200 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f220 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 "could not veri 1f230 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f fy build directo 1f240 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 ry \""$director
1f250 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
1f260 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20         "\", all
1f270 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d  testing halted"]
1f280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f290 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
1f2a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1f2b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1f2c0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f  kip trying to co
1f2d0 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  py any files if
1f2e0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
1f2f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1f300 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1f310 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
1f320 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68  qliteFiles)]} th
1f330 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1f340 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1f350 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
1f360 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d  iteConfigFiles)]
1f370 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1f380 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
1f390 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67  fileName $config 1f3a0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 1f3c0 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66 CopyBuildFile$f
1f3d0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
1f3e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f3f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1f400 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1f410 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
1f420 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c  pySqliteExternal
1f430 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
1f440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
1f450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f460 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
1f470 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69   Managed Debuggi
1f480 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d  ng Assistants (M
1f490 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  DA) configuratio
1f4a0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..
1f4b0 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f   #       file fo
1f4c0 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c  r the Eagle shel
1f4d0 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f  l to the build o
1f4e0 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c  utput directory,
1f4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f500 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73  #       while us
1f510 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20  ing each of the
1f520 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72  names of the var
1f530 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74  ious legacy test
1f540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f550 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62  #       executab
1f560 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  les.  This will
1f570 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72  help to make sur
1f580 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a  e that all the..
1f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
1f5a0 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73        legacy tes
1f5b0 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63  ts run with exac
1f5c0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74  tly the same set
1f5d0 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20   of Managed..
1f5e0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
1f5f0 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73     Debugging Ass
1f600 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72  istants configur
1f610 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...
1f620 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1f630 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
1f640 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46  Name $mdaConfigF 1f650 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 1f660 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 1f670 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 45 61 opyBinaryFile Ea 1f680 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 gleShell.exe.mda 1f690 2e 63 6f 6e 66 69 67 20 22 22 20 24 66 69 6c 65 .config ""$file
1f6a0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
1f6b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1f6c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1f6d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1f6e0 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e 61  Copy the externa
1f6f0 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61  l binaries, if a
1f700 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63  ny, to the direc
1f710 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20  tory that..
1f720 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1f730 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61   contains the Ea
1f740 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73  gle shell.  This
1f750 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73   is typically us
1f760 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20  ed to make..
1f770 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1f780 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65    sure assemblie
1f790 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  s referenced by
1f7a0 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74  the ones being t
1f7b0 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20  ested are..
1f7c0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1f7d0 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e   available durin
1f7e0 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72  g the testing pr
1f7f0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ocess...
1f800 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1f810 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
1f820 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61  ileName $externa 1f830 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 lFileNames {.. 1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 1f850 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c yCopyExternalFil 1f860 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 e$fileName..
1f870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1f880 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1f890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1f8a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
1f8b0 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69  o(copySqliteNati
1f8c0 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
1f8d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1f8e0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1f8f0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
1f900 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69   test platform i
1f910 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66  s likely the def
1f920 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20  ault for this..
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
1f940 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c       machine, al
1f950 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74  so try to copy t
1f960 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20  he native files
1f970 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
1f980 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69        #       bi
1f990 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  nary location...
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
1f9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1f9c0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1f9d0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
1f9e0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 20  ImplicitFiles)]
1f9f0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1fa00 20 20 20 20 20 20 20 20 5b 69 73 44 65 66 61 75          [isDefau
1fa10 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  ltBuildPlatform
1fa20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  true]} then {..
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1fa40 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
1fa50 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 1fa60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1fa70 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 tryCopyAss 1fa80 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d embly$fileName.
1fa90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1faa0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1fab0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1fac0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
1fad0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
1fae0 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69  SqliteNonImplici
1faf0 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
1fb00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1fb10 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1fb20 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
1fb30 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73  itePlatformFiles
1fb40 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
1fb60 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61  ring length $pla 1fb70 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e tform] > 0} then 1fb80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1fb90 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 1fba0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
1fbb0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1fbd0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24  ryCopyAssembly $1fbe0 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
1fbf0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..
1fc00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1fc10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1fc30 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1fc40 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41  ::no(copySqliteA
1fc50 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73  rchitectureFiles
1fc60 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
1fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
1fc80 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 1fc90 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 1fca0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1fcb0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 1fcc0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
1fcd0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fcf0 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
1fd00 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72  ly $fileName$ar
1fd10 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1fd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1fd40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1fd50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1fd60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1fd70 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1fd80 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
1fd90 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29  iteManagedFiles)
1fda0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1fdb0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1fdc0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67   fileName $manag 1fdd0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 1fdf0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 ryCopyAssembly$
1fe00 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
1fe10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1fe20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1fe30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1fe40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1fe50 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
1fe60 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20  ing to load any
1fe70 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63  files if instruc
1fe80 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ted...
1fe90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
1fea0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
1feb0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69  :no(loadSqliteFi
1fec0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
1fed0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1fee0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
1fef0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c  o(loadSqliteImpl
1ff00 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
1ff10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1ff20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62     tryLoadAssemb
1ff30 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
1ff40 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20  QLite.dll..
1ff50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ff60 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
1ff70 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
1ff80 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46 69 6c  oadSqliteLinqFil
1ff90 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c              tryL
1ffb0 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74  oadAssembly Syst
1ffc0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
1ffd0 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  inq.dll..
1ffe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1fff0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
20000 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61   exists ::no(loa
20010 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65 73 29  dSqliteEf6Files)
20020 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
20030 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
20040 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
20050 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
20060 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dll..
20070 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
20080 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
20090 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c  sts ::no(loadSql
200a0 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
200b0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
200d0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
200e0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 6c  :no(loadSqlitePl
200f0 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26  atformFiles)] &&
20100 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20110 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
20120 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 20130 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 20140 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 20150 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 LoadAssembly Sys 20160 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 20170 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 dll$platform..
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
201a0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
201b0 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
201c0 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c  eArchitectureFil
201d0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
201f0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 20200 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 20210 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 20220 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 tryLoadA 20230 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 ssembly System.D 20240 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 ata.SQLite.dll$
20250 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20  architecture..
20260 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
20270 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
20280 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
202a0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
202b0 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c  Only [getNativeL
202c0 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
202d0 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  nly] {..
202e0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
202f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 20300 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 20310 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 20320 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20330 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 20340 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f f \""$fileNameO
20350 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c  nly "\"... \"" \
20360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20370 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
20380 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
20390 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  me $fileNameOnly 203a0 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 ]] \"\n].. 203b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 203c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 203d0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 203e0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
203f0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
20400 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20410 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
20420 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65  sion of \"SQLite
20430 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e  .Interop.dll\"..
20440 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  . \"" \..
20450 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72         [file ver
20460 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46  sion [getBinaryF
20470 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49  ileName SQLite.I
20480 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 22 5c  nterop.dll]] \"\
20490 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  n]..        }...
204a0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
204b0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
204c0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 204d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 204e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 204f0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 20500 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 n of \"System.Da 20510 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 20520 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 .. \"" \.. 20530 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 [file ve 20540 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 rsion [getBinary 20550 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e FileName System. 20560 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d Data.SQLite.dll] 20570 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ] \"\n].. 20580 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 20590 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 205a0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
205b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
205c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
205d0 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
205e0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74  ersion of \"Syst
205f0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
20600 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22  inq.dll\"... \""
20610 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20620 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
20630 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
20640 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
20650 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d  QLite.Linq.dll]]
20660 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20670 20 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20    \"\n]..
20680 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
20690 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
206a0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 206b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 206c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 206d0 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 206e0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 ersion of \"Syst 206f0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 em.Data.SQLite.E 20700 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 F6.dll\"... \"" 20710 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20720 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 20730 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 20740 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 20750 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c Lite.EF6.dll]] \ 20760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 20770 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d \"\n].. } 20780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 20790 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
207a0 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74  platform] > 0} t
207b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
207c0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
207d0 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65  eOnly [getNative
207e0 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73  LibraryFileNames
207f0 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  Only] {..
20800 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
20810 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
20820 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 20830 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 20840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20850 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 20860 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c rsion of \""$pl
20870 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20  atform \..
20880 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66              / $f 20890 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e ileNameOnly "\". 208a0 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 .. \"" [file ver 208b0 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 sion \.. 208c0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 [getBi 208d0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
208e0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74  leNameOnly $plat 208f0 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 form]] \"\n].. 20900 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 20910 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 20920 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 20930 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 20940 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
20950 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20970 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
20980 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66  on of \"" $platf 20990 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 orm \.. 209a0 20 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e "/SQLite. 209b0 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e Interop.dll\"... 209c0 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 209d0 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 209e0 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 [getBinary 209f0 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e FileName SQLite. 20a00 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c 61 Interop.dll$pla
20a10 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  tform]] \"\n]..
20a20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
20a30 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
20a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
20a50 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 20a60 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 20a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 20a80 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 20a90 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 sion of \""$pla
20aa0 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20  tform \..
20ab0 20 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65           "/Syste
20ac0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
20ad0 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65  l\"... \"" [file
20ae0 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20   version \..
20af0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
20b00 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53  BinaryFileName S
20b10 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
20b20 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d  e.dll $platform] 20b30 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ] \"\n].. 20b40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 20b50 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 20b60 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 string length$a
20b70 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30  rchitecture] > 0
20b80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
20b90 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
20ba0 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74  NameOnly [getNat
20bb0 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61  iveLibraryFileNa
20bc0 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20  mesOnly] {..
20bd0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
20be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
20bf0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 20c00 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 20c10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20c20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 20c30 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 version of \"" 20c40 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d$architecture \.
20c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20c60 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e     / $fileNameOn 20c70 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 ly "\"... \"" [f 20c80 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 ile version \.. 20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20ca0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 20cb0 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ame$fileNameOnl
20cc0 79 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d  y $architecture] 20cd0 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ] \"\n].. 20ce0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 20cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 20d00 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 20d10 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
20d20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
20d30 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
20d40 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
20d50 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
20d60 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75   \"" $architectu 20d70 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 re \.. 20d80 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 "/SQLite.I 20d90 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 nterop.dll\"... 20da0 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f \"" [file versio 20db0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 20dc0 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 [getBinaryF 20dd0 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 ileName SQLite.I 20de0 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 61 72 63 68 nterop.dll$arch
20df0 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d  itecture]] \"\n]
20e00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
20e10 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
20e20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
20e30 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 20e40 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 20e50 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 20e60 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 20e70 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
20e80 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a  architecture \..
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20ea0 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  "/System.Data.SQ
20eb0 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22  Lite.dll\"... \"
20ec0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  " [file version
20ed0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20ee0 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c     [getBinaryFil
20ef0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
20f00 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72  a.SQLite.dll $ar 20f10 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 0d 0a chitecture]] \.. 20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20f30 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 20f40 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 20f50 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 20f60 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 # NOTE: Grab 20f70 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e the list of man 20f80 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 aged assemblies 20f90 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 for the current 20fa0 70 72 6f 63 65 73 73 0d 0a 20 20 20 20 20 20 20 process.. 20fb0 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 # and rep 20fc0 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 ort on the Syste 20fd0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 m.Data.SQLite re 20fe0 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 lated ones... 20ff0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 21000 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 21010 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 21020 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 21030 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 20 set assemblies 21040 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41 [object invoke A 21050 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 ppDomain.Current 21060 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62 Domain GetAssemb 21070 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 lies].... 21080 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 object foreac 21090 68 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 h assembly$asse
210a0 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20  mblies {..
210b0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
210c0 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 6d  g match \{System
210d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 61  .Data.SQLite* $a 210e0 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b ssembly]} then { 210f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21100 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
21110 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
21120 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
21130 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75         "---- fou
21140 6e 64 20 6c 6f 61 64 65 64 20 61 73 73 65 6d 62  nd loaded assemb
21150 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 20  ly: " $assembly 21160 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 21170 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 21180 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 21190 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 211a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
211b0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
211c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
211d0 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e  "---- define con
211e0 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73  stants for \"Sys
211f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
21200 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  "... "....
21210 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
21220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
21230 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
21240 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
21250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21260 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
21270 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69  ite.SQLite3 Defi
21280 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  neConstants..
21290 20 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43         } defineC
212a0 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20  onstants] == 0}
212b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
212c0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 212d0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 212e0 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 dArgs [formatLis 212f0 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 t [lsort \.. 21300 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65 66$def
21310 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e  ineConstants] <n
21320 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  one>] \n]..
21330 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
21340 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
21350 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 21360 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 unknown\n.. 21370 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 21380 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 21390 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 213a0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
213b0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
213c0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f          "---- so
213d0 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  urce version of
213e0 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \"System.Data.SQ
213f0 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d  Lite.dll\"... ".
21400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
21410 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
21420 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
21430 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
21440 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
21450 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
21460 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
21470 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72  iteConnection Pr
21480 6f 76 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20  oviderVersion..
21490 20 20 20 20 20 20 20 20 20 7d 20 76 65 72 73 69           } versi
214a0 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
214b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
214c0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
214d0 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d   $version] == 0} 214e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 214f0 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 set versi 21500 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 on null.. 21510 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 21520 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
21530 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
21540 64 41 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c  dArgs $version \ 21550 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 21560 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 21570 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
21580 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77  t_channel unknow
21590 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n\n..          }
215a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
215b0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
215c0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
215d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 215e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 215f0 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 "---- source ch 21600 65 63 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 eckout of \"Syst 21610 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 21620 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 ll\"... ".... 21630 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 21640 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 21650 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 21660 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 21670 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21680 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 21690 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e SQLite.SQLiteCon 216a0 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 nection Provider 216b0 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 SourceId.. 216c0 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 } sourceId] 216d0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 216e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 216f0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f tring length$so
21700 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68  urceId] == 0} th
21710 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
21720 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64      set sourceId
21730 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..
21740 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
21750 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 21760 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 21770 72 67 73 20 24 73 6f 75 72 63 65 49 64 20 5c 6e rgs$sourceId \n
21780 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
21790 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
217a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 217b0 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e _channel unknown 217c0 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d \n.. }. 217d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 217e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 217f0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 # NOTE: Check t 21800 68 65 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69 he available bui 21810 6c 64 73 20 28 61 6e 64 20 22 72 65 6c 65 61 73 lds (and "releas 21820 65 73 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 es") of SQLite a 21830 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 nd.. # 21840 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 21850 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 SQLite... 21860 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 #.. chec 21870 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 kForSQLiteBuilds 21880 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
21890 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
218a0 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73  orSQLiteReleases
218b0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 218c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 218d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 218e0 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 6b ow, we need to k 218f0 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c 69 74 now if the SQLit 21900 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 21910 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 s available.. 21920 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69 2e # (i. 21930 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20 6d e. because the m 21940 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 anaged-only Syst 21950 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 em.Data.SQLite a 21960 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 ssembly can.. 21970 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 61 # loa 21980 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 68 6f d without it; ho 21990 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 wever, it cannot 219a0 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65 do anything use 219b0 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 ful without.. 219c0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 29 # it) 219d0 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 73 69 . If we are usi 219e0 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 ng the mixed-mod 219f0 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 e assembly and w 21a00 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 e already.. 21a10 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 6e 64 # found 21a20 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 68 69 it (above), thi 21a30 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 s should always 21a40 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 succeed... 21a50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 21a60 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 ckForSQLiteLibra 21a70 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ry$::test_chann
21a80 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  el....        #.
21a90 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
21aa0 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53 51   Check if the SQ
21ab0 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
21ac0 65 6d 62 6c 79 20 69 73 20 61 76 61 69 6c 61 62  embly is availab
21ad0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
21ae0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
21af0 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 24 3a  SQLiteInterop $: 21b00 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d :test_channel... 21b10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 21b20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 21b30 6b 20 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 k the SQLite dat 21b40 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 abase and tempor 21b50 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 2e ary directories. 21b60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 21b70 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 21b80 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 iteDirectories$
21b90 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
21ba0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
21bb0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
21bc0 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e  empt to determin
21bd0 65 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d  e if various com
21be0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
21bf0 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20  s needed for..
21c00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
21c10 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  st constraints w
21c20 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20  ere enabled for
21c30 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
21c40 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 20  mbly.  There..
21c50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
21c60 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74  e some compile-t
21c70 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74  ime options that
21c80 20 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 65 20   must also have
21c90 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20  been enabled..
21ca0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f        #       fo
21cb0 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73  r the interop as
21cc0 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 20  sembly in order
21cd0 74 6f 20 62 65 20 65 66 66 65 63 74 69 76 65 2e  to be effective.
21ce0 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20    For those..
21cf0 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74       #       opt
21d00 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 65  ions, it will be
21d10 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 69 74   assumed that it
21d20 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72   was enabled for
21d30 20 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20   the interop..
21d40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
21d50 73 65 6d 62 6c 79 20 69 66 20 69 74 20 77 61 73  sembly if it was
21d60 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65   enabled for the
21d70 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
21d80 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
21d90 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64         foreach d
21da0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c  efineConstant [l
21db0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
21dc0 20 20 20 43 48 45 43 4b 5f 53 54 41 54 45 20 43     CHECK_STATE C
21dd0 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44 45 42 55  OUNT_HANDLE DEBU
21de0 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20  G INTEROP_CODEC
21df0 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d  INTEROP_DEBUG \.
21e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54  .            INT
21e10 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46  EROP_EXTENSION_F
21e20 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50  UNCTIONS INTEROP
21e30 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20  _FTS5_EXTENSION
21e40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  \..            I
21e50 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 43  NTEROP_INCLUDE_C
21e60 45 52 4f 44 20 49 4e 54 45 52 4f 50 5f 49 4e 43  EROD INTEROP_INC
21e70 4c 55 44 45 5f 45 58 54 52 41 20 49 4e 54 45 52  LUDE_EXTRA INTER
21e80 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 20 5c  OP_INCLUDE_SEE \
21e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e  ..            IN
21ea0 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a 49  TEROP_INCLUDE_ZI
21eb0 50 56 46 53 20 49 4e 54 45 52 4f 50 5f 4a 53 4f  PVFS INTEROP_JSO
21ec0 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a  N1_EXTENSION \..
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45              INTE
21ee0 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45  ROP_LEGACY_CLOSE
21ef0 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 49 4e 54   INTEROP_LOG INT
21f00 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f  EROP_PERCENTILE_
21f10 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20  EXTENSION \..
21f20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
21f30 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f  _REGEXP_EXTENSIO
21f40 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45  N INTEROP_TEST_E
21f50 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20  XTENSION \..
21f60 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
21f70 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e  TOTYPE_EXTENSION
21f80 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
21f90 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 20 4e 45  _TABLE NET_20 NE
21fa0 54 5f 33 35 20 5c 0d 0a 20 20 20 20 20 20 20 20  T_35 \..
21fb0 20 20 20 20 4e 45 54 5f 34 30 20 4e 45 54 5f 34      NET_40 NET_4
21fc0 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 5f 34 35  5 NET_451 NET_45
21fd0 32 20 4e 45 54 5f 34 36 20 4e 45 54 5f 34 36 31  2 NET_46 NET_461
21fe0 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20   NET_COMPACT_20
21ff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  \..            P
22000 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
22010 52 41 4d 45 57 4f 52 4b 20 50 52 45 4c 4f 41 44  RAMEWORK PRELOAD
22020 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 20  _NATIVE_LIBRARY
22030 52 45 54 41 52 47 45 54 41 42 4c 45 20 5c 0d 0a  RETARGETABLE \..
22040 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
22050 54 45 5f 53 54 41 4e 44 41 52 44 20 53 51 4c 49  TE_STANDARD SQLI
22060 54 45 5f 53 54 41 4e 44 41 52 44 5f 4c 49 42 52  TE_STANDARD_LIBR
22070 41 52 59 5f 4e 41 4d 45 20 54 48 52 4f 57 5f 4f  ARY_NAME THROW_O
22080 4e 5f 44 49 53 50 4f 53 45 44 20 5c 0d 0a 20 20  N_DISPOSED \..
22090 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45 20            TRACE
220a0 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
220b0 20 54 52 41 43 45 5f 44 45 54 45 43 54 49 4f 4e   TRACE_DETECTION
220c0 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 54 52   TRACE_HANDLE TR
220d0 41 43 45 5f 50 52 45 4c 4f 41 44 20 5c 0d 0a 20  ACE_PRELOAD \..
220e0 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45             TRACE
220f0 5f 53 48 41 52 45 44 20 54 52 41 43 45 5f 53 54  _SHARED TRACE_ST
22100 41 54 45 4d 45 4e 54 20 54 52 41 43 45 5f 57 41  ATEMENT TRACE_WA
22110 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d 4f  RNING TRACK_MEMO
22120 52 59 5f 42 59 54 45 53 20 5c 0d 0a 20 20 20 20  RY_BYTES \..
22130 20 20 20 20 20 20 20 20 55 53 45 5f 45 4e 54 49          USE_ENTI
22140 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 20 55  TY_FRAMEWORK_6 U
22150 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55  SE_INTEROP_DLL U
22160 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57 49  SE_PREPARE_V2 WI
22170 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20  NDOWS] {..
22180 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
22190 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
221a0 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  f the compile-ti
221b0 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73  me option is lis
221c0 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ted in the list
221d0 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  of..          #
221e0 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 63 6f        "define co
221f0 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74 72  nstants" kept tr
22200 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d 61  ack of by the ma
22210 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d  naged assembly..
22220 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
22230 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
22240 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
22250 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61  tant $::test_cha 22260 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 nnel$defineCons
22270 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d  tant..        }.
22280 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
22290 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
222a0 65 63 6b 20 69 66 20 74 68 65 20 53 79 73 74 65  eck if the Syste
222b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 70 72  m.Data.SQLite pr
222c0 6f 76 69 64 65 72 20 77 61 73 20 63 6f 6d 70 69  ovider was compi
222d0 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20  led with..
222e0 20 20 23 20 20 20 20 20 20 20 73 75 70 70 6f 72    #       suppor
222f0 74 20 66 6f 72 20 61 6e 79 20 65 6e 63 72 79 70  t for any encryp
22300 74 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d 0a  ted databases...
22310 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
22320 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73     if {[haveCons
22330 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20  traint \..
22340 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65            define
22350 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
22360 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
22370 52 4f 50 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d  ROP_CODEC] || \.
22380 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 68 61  .            [ha
22390 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a  veConstraint \..
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
223b0 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
223c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
223d0 65 2e 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  e.INTEROP_INCLUD
223e0 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a  E_SEE]} then {..
223f0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
22400 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
22410 65 73 2c 20 61 64 64 20 67 65 6e 65 72 69 63 20  es, add generic
22420 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 75  constraint for u
22430 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
22440 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  uite...
22450 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64   #..          ad
22460 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74  dConstraint Syst
22470 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
22480 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20  ncryption..
22490 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
224a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
224b0 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  E: Check the cur
224c0 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e  rent build year.
224d0 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69    Basically, thi
224e0 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20  s indicates..
224f0 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
22500 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53  ch version of MS
22510 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73  Build and/or Vis
22520 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75  ual Studio was u
22530 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  sed to..
22540 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20  #       compile
22550 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e  the assembly bin
22560 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74  aries under test
22570 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
22580 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 22590 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 225a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 225b0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 225c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 225d0 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 build year... " 225e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 225f0 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 year [getBuildYe 22600 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 ar].. add 22610 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 22620 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 ndArgs buildYear 22630 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 .$year]..
22640 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 22650 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 22660 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c rgs \"$year \"\
22670 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
22680 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
22690 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
226a0 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72  nt build .NET Fr
226b0 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 61  amework.  Basica
226c0 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 20  lly, this..
226d0 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 63     #       indic
226e0 61 74 65 73 20 77 68 69 63 68 20 76 65 72 73 69  ates which versi
226f0 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46  on of the .NET F
22700 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 6e  ramework is bein
22710 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  g..        #
22720 20 20 20 75 73 65 64 20 62 79 20 74 68 65 20 61     used by the a
22730 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73  ssembly binaries
22740 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20   under test...
22750 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
22760 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 22770 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 22780 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 22790 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 227a0 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 227b0 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b d .NET Framework 227c0 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 227d0 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42 set netFx [getB 227e0 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20 uildNetFx].. 227f0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 22800 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 t [appendArgs bu 22810 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e ildFramework.$n
22820 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74  etFx]..        t
22830 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 22840 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 22850 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d \"$netFx \"\n]
22860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
22870 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
22880 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
22890 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61   build configura
228a0 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75  tion.  This shou
228b0 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20  ld normally..
228c0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
228d0 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f  either "Debug" o
228e0 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20  r "Release"...
228f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
22900 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 22910 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 22920 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 22930 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 22940 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 22950 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 22960 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 22970 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f set configuratio 22980 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 n [getBuildConfi 22990 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 guration].. 229a0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 229b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 229c0 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e ldConfiguration. 229d0 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d$configuration]
229e0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
229f0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 22a00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
22a10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22  configuration \"
22a20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
22a30 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
22a40 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61  : Try to setup a
22a50 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c  n interrupt call
22a60 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73  back using the s
22a70 63 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a  cript debugger..
22a80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
22a90 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c  that will cancel
22aa0 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73   all SQL queries
22ab0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72   in progress for
22ac0 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20   all database..
22ad0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
22ae0 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e  onnections known
22af0 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72   to this interpr
22b00 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
22b10 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
22b20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
22b30 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74  (sqliteInterrupt
22b40 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e  Callback)]} then
22b50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
22b60 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61  tupDbInterruptCa
22b70 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63  llback $::test_c 22b80 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c hannel$::test_l
22b90 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  og..        }...
22ba0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
22bb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
22bc0 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65  k for the native
22bd0 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c   runtime option,
22be0 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61   which would mea
22bf0 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20  n we are..
22c00 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20    #       using
22c10 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
22c20 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
22c30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
22c40 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69  ckForRuntimeOpti
22c50 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  on $::test_chann 22c60 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 el native.... 22c70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22c80 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 22c90 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 22ca0 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 should count the 22cb0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 number of conne 22cc0 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 ctions.. 22cd0 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 # "opened" 22ce0 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 and "closed" fr 22cf0 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e om the pool when 22d00 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 determining if 22d10 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 a test.. 22d20 23 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 # passed. 22d30 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 Disabling this 22d40 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 behavior is some 22d50 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 times necessary 22d60 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 (e.g... # 22d70 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 during th 22d80 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e e release testin 22d90 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 g process) becau 22da0 73 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76 se there are sev 22db0 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 eral.. # 22dc0 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 tests that 22dd0 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 rely on the "op 22de0 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 ened from pool" 22df0 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 count being grea 22e00 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ter.. # 22e10 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 than zero. 22e20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 These tests may 22e30 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 fail due to the 22e40 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 non-determinist 22e50 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ic.. # 22e60 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 behavior of 22e70 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e the CLR GC, even 22e80 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e when there is n 22e90 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 o bug in the cod 22ea0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 22eb0 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e being tested. 22ec0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 22ed0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e checkForRun 22ee0 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 timeOption$::te
22ef0 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f  st_channel noPoo
22f00 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20  lCounts....
22f10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
22f20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
22f30 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68  he test suite sh
22f40 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65 64 2d  ould use shared-
22f50 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20  cache mode...
22f60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22f70 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f  checkForRuntimeO
22f80 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68  ption $::test_ch 22f90 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61 63 68 annel sharedCach 22fa0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 22fb0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 22fc0 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 Report the resou 22fd0 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 rce usage prior 22fe0 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 to running any t 22ff0 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ests... # 23000 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 .. report 23010 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 SQLiteResources 23020 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
23030 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
23040 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72        # NOTE: Gr
23050 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e  ab the list of n
23060 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f  ative modules fo
23070 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
23080 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20  ocess and..
23090 20 20 20 23 20 20 20 20 20 20 20 72 65 70 6f 72     #       repor
230a0 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e  t on the System.
230b0 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61  Data.SQLite rela
230c0 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20  ted ones...
230d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
230e0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
230f0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
23100 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
23110 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65  et modules [obje
23120 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20  ct invoke \..
23130 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
23140 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72  m.Diagnostics.Pr
23150 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74  ocess.GetCurrent
23160 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d  Process Modules]
23170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  ....          ob
23180 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
23190 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75  ias module $modu 231a0 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 les {.. 231b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 231c0 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f # NOTE: The mo 231d0 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 dule file name h 231e0 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d ere must be norm 231f0 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 alized... 23200 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 23210 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 23220 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 [file normalize 23230 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e 61 [$module FileNa
23240 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me]]....
23250 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68      if {[lsearch
23260 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20   -exact -nocase
23270 2d 2d 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  -- [getNativeLib
23280 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
23290 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  y] \..
232a0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
232b0 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 20 21 3d 20   $fileName]] != 232c0 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 -1} then {.. 232d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 232e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
232f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23310 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61   "---- found loa
23320 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ded SQLite nativ
23330 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c 65  e library module
23340 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
23350 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61           $fileNa 23360 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 me \n].. 23370 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73 } elseif {[s 23380 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 tring match \.. 23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d - 233a0 6e 6f 63 61 73 65 20 2a 2f 53 51 4c 69 74 65 2e nocase */SQLite. 233b0 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 66 69 6c Interop.dll$fil
233c0 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
233e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 233f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 23400 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23410 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 "---- found 23420 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69 loaded SQLite i 23430 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 23440 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 module: " \.. 23450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
23460 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20  fileName \n]..
23470 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
23480 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
23490 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
234a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
234b0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 234c0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 234d0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 234e0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 ompile-time opti 234f0 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63 ons for SQLite c 23500 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 ore library... " 23510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 23520 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 23530 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 23540 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 23550 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 23560 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 23570 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 23580 4c 69 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 Lite3 SQLiteComp 23590 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 ileOptions.. 235a0 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f } compileO 235b0 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 ptions] == 0} th 235c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 235d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
235e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
235f0 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20  rgs [formatList
23600 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  [lsort \..
23610 20 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69            $compi 23620 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 leOptions] <none 23630 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 >] \n].. 23640 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 23650 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
23660 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
23670 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
23680 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
23690 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
236a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
236b0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 236c0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 236d0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 "---- compi 236e0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 le-time options 236f0 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 for SQLite inter 23700 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 op assembly... " 23710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 23720 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 23730 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 23740 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 23750 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 23760 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 23770 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 23780 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d Lite3 InteropCom 23790 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 pileOptions.. 237a0 20 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 } compile 237b0 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 Options] == 0} t 237c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 237d0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
237e0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
237f0 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74  Args [formatList
23800 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20   [lsort \..
23810 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70             $comp 23820 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e ileOptions] <non 23830 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e>] \n].. 23840 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 23850 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
23860 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75  ::test_channel u
23870 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20  nknown\n..
23880 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
23890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
238a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
238b0 68 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 74  how the active t
238c0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  est constraints.
238d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
238e0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 238f0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 23900 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e ndArgs "---- con 23910 73 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 straints: " \.. 23920 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d [form 23930 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 atList [lsort [g 23940 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 etConstraints]] 23950 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 <none>] \n].... 23960 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 23970 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 # NOTE: Save t 23980 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 he test constrai 23990 6e 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 nts for use by t 239a0 68 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69 hreads created i 239b0 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 n this.. 239c0 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 # applicat 239d0 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 ion domain. Thi 239e0 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 s is necessary b 239f0 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 ecause all the E 23a00 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 agle.. # 23a10 20 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 "test cont 23a20 65 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e ext" information 23a30 20 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d is per-thread.. 23a40 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 23a50 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 23a60 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e xists ::test_con 23a70 73 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 straints]} then 23a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 23a90 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 ::test_constrai 23aa0 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 nts$::eagle_tes
23ab0 74 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d  ts(constraints).
23ac0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
23ad0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
23ae0 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68   # NOTE: Load th
23af0 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61  e "after-constra
23b00 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72  ints" custom per
23b10 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
23b20 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23  -host..        #
23b30 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74         test sett
23b40 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
23b50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
23b60 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
23b70 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
23b80 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 23b90 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a nnel .after].... 23ba0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 23bb0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 # NOTE: If ne 23bc0 63 65 73 73 61 72 79 2c 20 65 6e 61 62 6c 65 20 cessary, enable 23bd0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 shared-cache mod 23be0 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... 23bf0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 23c00 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption 23c10 20 73 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 sharedCache]} t 23c20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23c30 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 enableSharedCac 23c40 68 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e he$::test_chann
23c50 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  el true..
23c60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
23c70 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
23c80 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74   Show when our t
23c90 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65  ests actually be
23ca0 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20  gan (now)...
23cb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
23cc0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 23cd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 23ce0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23cf0 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 "---- System.Dat 23d00 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 a.SQLite tests b 23d10 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 egan at " \.. 23d20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 [clock 23d30 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 format [clock se 23d40 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 conds]] \n].. 23d50 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 23d60 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 proc runSQLi 23d70 74 65 54 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f teTestFilesProlo 23d80 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 gue {} {.. 23d90 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 uplevel 1 {.. 23da0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 23db0 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 # NOTE: Setup th 23dc0 65 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 e variables that 23dd0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 refer to the va 23de0 72 69 6f 75 73 20 6e 6f 6e 2d 64 61 74 61 20 66 rious non-data f 23df0 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 iles.. # 23e00 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20 62 required b 23e10 79 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 y the tests in t 23e20 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 his file... 23e30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 23e40 74 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 t entityFramewor 23e50 6b 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 kDllFile \.. 23e60 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c [getBuil 23e70 64 46 69 6c 65 4e 61 6d 65 20 45 6e 74 69 74 79 dFileName Entity 23e80 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 0d 0a Framework.dll].. 23e90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e .. set in 23ea0 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5b stallerExeFile [ 23eb0 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 23ec0 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 5d 0d Installer.exe]. 23ed0 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c . set sql 23ee0 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 iteDesignerDllFi 23ef0 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 le [getBuildFile 23f00 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44 65 73 69 Name SQLite.Desi 23f10 67 6e 65 72 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 gner.dll].... 23f20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 set systemD 23f30 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 ataSQLiteDllFile 23f40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23f50 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 23f60 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 23f70 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 Lite.dll].... 23f80 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 set systemD 23f90 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c ataSQLiteLinqDll 23fa0 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 23fb0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c [getBuildFil 23fc0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 23fd0 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c a.SQLite.Linq.dl 23fe0 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 l].... se 23ff0 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 t systemDataSQLi 24000 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a teEf6DllFile \.. 24010 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 24020 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 BuildFileName Sy 24030 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 24040 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 .EF6.dll].... 24050 20 20 20 20 20 73 65 74 20 74 65 73 74 45 78 65 set testExe 24060 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 File [getBuildFi 24070 6c 65 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 5d leName test.exe] 24080 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 .. set te 24090 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 67 stLinqExeFile [g 240a0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 240b0 74 65 73 74 6c 69 6e 71 2e 65 78 65 5d 0d 0a 20 testlinq.exe].. 240c0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 45 set testE 240d0 66 36 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 f6ExeFile [getBu 240e0 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 ildFileName test 240f0 65 66 36 2e 65 78 65 5d 0d 0a 0d 0a 20 20 20 20 ef6.exe].... 24100 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 24110 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 NOTE: Setup the 24120 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 variables that 24130 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 refer to the var 24140 69 6f 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d ious data files. 24150 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 24160 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 required by the 24170 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 tests in this f 24180 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ile... #. 24190 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 . set tes 241a0 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 tLinqOutFile [fi 241b0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 241c0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 241d0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 241e0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 241f0 74 65 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a testlinq.out]].. 24200 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f .. set no 24210 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 rthwindEfDbFile 24220 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 24230 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 24240 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 24250 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 dirname [file d 24260 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 74 irname [getSQLit 24270 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d 5d eTestDataPath]]] 24280 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24290 74 65 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 testlinq northwi 242a0 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 ndEF.db]].... 242b0 20 20 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44 set nonWalD 242c0 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 bFile [file nati 242d0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 242e0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 242f0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 24300 61 74 61 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e ataPath] nonWal. 24310 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 db]].... 24320 73 65 74 20 77 61 6c 44 62 46 69 6c 65 20 5b 66 set walDbFile [f 24330 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 24340 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 24350 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 24360 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 24370 20 77 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 wal.db]].... 24380 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24390 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 # NOTE: The vari 243a0 6f 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e ous install/unin 243b0 73 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 stall log files 243c0 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 used to test the 243d0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 243e0 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f design-time co 243f0 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65 mponent installe 24400 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 r... #.. 24410 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 set testI 24420 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 24430 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 24440 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 24450 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 24460 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 24470 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 aPath] Installer 24480 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 _Test_Vs2005.log 24490 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 ]].... se 244a0 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 t testInstallVs2 244b0 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 008LogFile [file 244c0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 244d0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 244e0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 244f0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e TestDataPath] In 24500 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 24510 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 008.log]].... 24520 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 set testIns 24530 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 24540 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 24550 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 24560 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 . [ge 24570 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 24580 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 ath] Installer_T 24590 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d est_Vs2010.log]] 245a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 245b0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 245c0 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 2LogFile [file n 245d0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 245e0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 245f0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 24600 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 stDataPath] Inst 24610 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 aller_Test_Vs201 24620 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 2.log]].... 24630 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 set testInsta 24640 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 llVs2013LogFile 24650 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 24660 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 24670 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 24680 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 24690 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 h] Installer_Tes 246a0 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a t_Vs2013.log]].. 246b0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 .. set te 246c0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c stInstallVs2015L 246d0 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 ogFile [file nat 246e0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 246f0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 24700 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 24710 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c DataPath] Instal 24720 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e ler_Test_Vs2015. 24730 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 24740 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 set testUninsta 24750 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 llVs2005LogFile 24760 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 24770 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 24780 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 24790 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 247a0 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 h] Uninstaller_T 247b0 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d est_Vs2005.log]] 247c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 247d0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 247e0 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 008LogFile [file 247f0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 24800 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 24810 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 24820 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e TestDataPath] Un 24830 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 installer_Test_V 24840 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2008.log]].... 24850 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 set testU 24860 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f ninstallVs2010Lo 24870 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 24880 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 24890 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 248a0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 248b0 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 ataPath] Uninsta 248c0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30 ller_Test_Vs2010 248d0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .log]].... 248e0 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 set testUninst 248f0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 24900 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 24910 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 24920 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 24930 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 24940 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f th] Uninstaller_ 24950 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d Test_Vs2012.log] 24960 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 24970 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 24980 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 2013LogFile [fil 24990 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 249a0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 249b0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 249c0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 eTestDataPath] U 249d0 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f ninstaller_Test_ 249e0 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a Vs2013.log]].... 249f0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 24a00 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c UninstallVs2015L 24a10 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 ogFile [file nat 24a20 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 24a30 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 24a40 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 24a50 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 DataPath] Uninst 24a60 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 aller_Test_Vs201 24a70 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 5.log]].... 24a80 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ############# 24a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24ac0 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 ##########.... 24ad0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 24ae0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 24af0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 24b00 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 24b10 65 20 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72 e tail$entityFr
24b20 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d  ameworkDllFile]]
24b30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24b40 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
24b50 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 24b60 24 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b$entityFramework
24b70 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  DllFile..
24b80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
24b90 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
24ba0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
24bb0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
24bc0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $24bd0 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 installerExeFile 24be0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 24bf0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 24c00 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
24c10 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46  l $installerExeF 24c20 69 6c 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 ile Installer.ex 24c30 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 24c40 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 24c50 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 24c60 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 24c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 24c80 69 6c 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65 ile tail$sqlite
24c90 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d  DesignerDllFile]
24ca0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
24cb0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
24cc0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 24cd0 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72$sqliteDesigner
24ce0 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  DllFile..
24cf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
24d00 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
24d10 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
24d20 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
24d30 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $24d40 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 24d50 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e DllFile]]]} then 24d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 24d70 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
24d80 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d  _channel $system 24d90 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c DataSQLiteDllFil 24da0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 24db0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 24dc0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 24dd0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 24de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 24df0 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d ile tail$system
24e00 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c  DataSQLiteLinqDl
24e10 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  lFile]]]} then {
24e20 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
24e30 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 24e40 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 hannel$systemDa
24e50 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46  taSQLiteLinqDllF
24e60 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
24e70 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
24e80 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
24e90 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
24ea0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24eb0 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74  [file tail $syst 24ec0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 emDataSQLiteEf6D 24ed0 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 llFile]]]} then 24ee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 24ef0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
24f00 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44  channel $systemD 24f10 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 ataSQLiteEf6DllF 24f20 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 24f30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 24f40 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 24f50 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 24f60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24f70 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
24f80 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  ExeFile]]]} then
24f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
24fa0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 24fb0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 _channel$testEx
24fc0 65 46 69 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a  eFile test.exe..
24fd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24fe0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
24ff0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
25000 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
25010 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
25020 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45   tail $testLinqE 25030 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 xeFile]]]} then 25040 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 25050 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
25060 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e  channel $testLin 25070 71 45 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e qExeFile testlin 25080 71 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d q.exe.. } 25090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 250a0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 250b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 250c0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 250d0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
250e0 73 74 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d  stEf6ExeFile]]]}
250f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
25100 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
25110 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
25120 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65  estEf6ExeFile te
25130 73 74 65 66 36 2e 65 78 65 0d 0a 20 20 20 20 20  stef6.exe..
25140 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
25150 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
25160 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
25170 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
25180 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
25190 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c   $testLinqOutFil 251a0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 251b0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 251c0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
251d0 65 6c 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46  el $testLinqOutF 251e0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 251f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 25200 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 25210 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 25220 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25230 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 [file tail$nort
25240 68 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d  hwindEfDbFile]]]
25250 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25260 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
25270 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
25280 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c  northwindEfDbFil
25290 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
252a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
252b0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
252c0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
252d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
252e0 69 6c 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c  ile tail $nonWal 252f0 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 DbFile]]]} then 25300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 25310 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
25320 63 68 61 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44  channel $nonWalD 25330 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d bFile.. } 25340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 25350 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 25360 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 25370 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 25380 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61 [file tail$wa
25390 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  lDbFile]]]} then
253a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
253b0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 253c0 5f 63 68 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 _channel$walDbF
253d0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
253e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
253f0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
25400 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
25410 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25420 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 25430 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 InstallVs2005Log 25440 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 25450 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 25460 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
25470 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61  annel $testInsta 25480 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d llVs2005LogFile. 25490 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 254a0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 254b0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 254c0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 254d0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 254e0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
254f0 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
25500 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
25510 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
25520 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 25530 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
25540 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2008LogFile..
25550 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
25560 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
25570 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
25580 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
25590 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
255a0 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 255b0 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2010LogFile]]]} 255c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 255d0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 255e0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 255f0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 estInstallVs2010 25600 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 25610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 25620 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 25630 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 25640 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 25650 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
25660 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
25670 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  2LogFile]]]} the
25680 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
25690 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 256a0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 t_channel$testI
256b0 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46  nstallVs2012LogF
256c0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
256d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
256e0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
256f0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
25700 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25710 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 25720 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 InstallVs2013Log 25730 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 25740 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 25750 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
25760 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61  annel $testInsta 25770 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d llVs2013LogFile. 25780 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 25790 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 257a0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 257b0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 257c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 257d0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
257e0 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
257f0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
25800 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
25810 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 25820 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
25830 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2015LogFile..
25840 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
25850 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
25860 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
25870 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
25880 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
25890 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 258a0 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d lVs2005LogFile]] 258b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 258c0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 258d0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
258e0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 258f0 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2005LogFile.. 25900 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 25910 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 25920 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 25930 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 25940 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 25950 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
25960 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d  lVs2008LogFile]]
25970 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
25980 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
25990 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 259a0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
259b0 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2008LogFile..
259c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
259d0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
259e0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
259f0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
25a00 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
25a10 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 25a20 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d lVs2010LogFile]] 25a30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 25a40 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 25a50 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
25a60 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 25a70 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2010LogFile.. 25a80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 25a90 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 25aa0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 25ab0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 25ac0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 25ad0 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
25ae0 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d  lVs2012LogFile]]
25af0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
25b00 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
25b10 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 25b20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
25b30 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2012LogFile..
25b40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
25b50 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
25b60 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
25b70 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
25b80 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
25b90 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 25ba0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d lVs2013LogFile]] 25bb0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 25bc0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 25bd0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
25be0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 25bf0 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2013LogFile.. 25c00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 25c10 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 25c20 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 25c30 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 25c40 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 25c50 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
25c60 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d  lVs2015LogFile]]
25c70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
25c80 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
25c90 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 25ca0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
25cb0 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2015LogFile..
25cc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
25cd0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
25ce0 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73  roc runSQLiteTes
25cf0 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b  tFilesEpilogue {
25d00 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76  } {..      uplev
25d10 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20  el 1 {..
25d20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
25d30 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
25d40 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
25d50 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74  2015LogFile test
25d60 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c  UninstallVs2013L
25d70 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  ogFile \..
25d80 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74        testUninst
25d90 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
25da0 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
25db0 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2010LogFile \..
25dc0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55             testU
25dd0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  ninstallVs2008Lo
25de0 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74  gFile testUninst
25df0 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65  allVs2005LogFile
25e00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25e10 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
25e20 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73  5LogFile testIns
25e30 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c  tallVs2013LogFil
25e40 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
25e50 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
25e60 31 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e  12LogFile testIn
25e70 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
25e80 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
25e90 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32    testInstallVs2
25ea0 30 30 38 4c 6f 67 46 69 6c 65 20 74 65 73 74 49  008LogFile testI
25eb0 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
25ec0 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75  ile....        u
25ed0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
25ee0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25ef0 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c  northwindEfDbFil
25f00 65 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c  e testLinqOutFil
25f10 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
25f20 20 77 61 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61   walDbFile nonWa
25f30 6c 44 62 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20  lDbFile....
25f40 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70     unset -nocomp
25f50 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  lain \..
25f60 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 69      testEf6ExeFi
25f70 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69  le testLinqExeFi
25f80 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
25f90 20 20 74 65 73 74 45 78 65 46 69 6c 65 20 73 79    testExeFile sy
25fa0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66  stemDataSQLiteEf
25fb0 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20  6DllFile \..
25fc0 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 61          systemDa
25fd0 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46  taSQLiteLinqDllF
25fe0 69 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51  ile systemDataSQ
25ff0 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20  LiteDllFile \..
26000 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
26010 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65  eDesignerDllFile
26020 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c   installerExeFil
26030 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
26040 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b   entityFramework
26050 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d  DllFile..      }
26060 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
26070 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65  proc runSQLiteTe
26080 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d  stEpilogue {} {.
26090 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
260a0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e  # NOTE: Skip run
260b0 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20  ning our custom
260c0 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20  epilogue if the
260d0 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65  main one has bee
260e0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
260f0 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20   skipped...
26100 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b   #..      if {![
26110 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
26120 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29  (epilogue.eagle)
26130 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
26140 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
26150 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20  NOTE: Show when
26160 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c  our tests actual
26170 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d  ly ended (now)..
26180 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
26190 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 261a0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 261b0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 261c0 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 "---- Syste 261d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 m.Data.SQLite te 261e0 73 74 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c sts ended at " \ 261f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 .. [c 26200 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f lock format [clo 26210 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d ck seconds]] \n] 26220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 26230 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c # NOTE: L 26240 6f 61 64 20 74 68 65 20 22 65 70 69 6c 6f 67 75 oad the "epilogu 26250 65 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 e" custom per-us 26260 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f er and/or per-ho 26270 73 74 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 st test.. 26280 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 # setting 26290 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 s now... 262a0 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 #.. uplev 262b0 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 el 1 [list loadS 262c0 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 QLiteTestSetting 262d0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
262e0 6c 20 2e 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a  l .epilogue]....
262f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
26300 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66     # BUGFIX: Bef
26310 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65  ore checking the
26320 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73   final resources
26330 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74   in use by SQLit
26340 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20  e, make..
26350 20 23 20 20 20 20 20 20 20 20 20 73 75 72 65 20   #         sure
26360 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41 47  both of the PRAG
26370 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63  MA related direc
26380 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66  tory names are f
26390 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  reed...        #
263a0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
263b0 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
263c0 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ies $::test_chan 263d0 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 nel true.... 263e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 263f0 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f NOTE: Also repo 26400 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 rt the resource 26410 75 73 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e usage after runn 26420 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a ing the tests... 26430 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 26440 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 reportSQLiteR 26450 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 esources$::test
26460 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
26470 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
26480 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68   NOTE: Report th
26490 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  e critical handl
264a0 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72  e counts after r
264b0 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73  unning the tests
264c0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
264d0 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 65 48        getSQLiteH
264e0 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74  andleCounts $::t 264f0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 26500 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 26510 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 # NOTE: If nec 26520 65 73 73 61 72 79 2c 20 64 69 73 61 62 6c 65 20 essary, disable 26530 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 shared-cache mod 26540 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... 26550 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 26560 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption 26570 20 73 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 sharedCache]} t 26580 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 26590 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 enableSharedCac 265a0 68 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e he$::test_chann
265b0 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  el false..
265c0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
265d0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23    }.....    ####
265e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
265f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26620 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
26630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26640 23 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45  ########## END E
26650 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23  agle ONLY ######
26660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26670 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23  ########..    ##
26680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
266a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
266b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
266c0 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a  #########..  }..
266d0 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
266e0 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f   Save the name o
266f0 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  f the directory
26700 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this
26710 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66  file...  #..  if
26720 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
26730 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
26740 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73  ]} then {..    s
26750 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  et common_direct
26760 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ory [file dirnam
26770 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d  e [info script]]
26780 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20  ..  }....  #..
26790 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20  # NOTE: Provide
267a0 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
267b0 53 51 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b  SQLite test pack
267c0 61 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72  age to the inter
267d0 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20  preter...  #..
267e0 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide
267f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
26800 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a  te.Test 1.0..}..