System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 277d445fa1f9e9457501516d32cb5505ddda0d4d:

• File Tests/common.eagle — part of check-in [d3eb5c0fcc] at 2015-02-12 18:18:43 on branch trunk — Enable easier integration with CEROD. (user: mistachkin size: 132167)

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 6f 72 20   2010, 2012, or
0460: 32 30 31 33 20 62 75 69 6c 64 20 73 79 73 74 65  2013 build syste
0470: 6d 73 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65  ms.  To override
0480: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
0490: 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74       value via t
04a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c  he command line,
04b0: 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64   enter a command
04c0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
04d0: 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  of..      #
04e0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following
04f0: 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65  (all on one line
0500: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
0510: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0520: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0530: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0540: 73 74 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20  st_year 2005"..
0550: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0560: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0570: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0580: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0590: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
05a0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
05b0: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
05c0: 30 38 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  08"..      #
05d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
05e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
05f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0600: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0610: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0620: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0630: 65 61 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20  ear 2010"..
0640: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0650: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0660: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0670: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0680: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0690: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
06a0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d  test_year 2012".
06b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
06c0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
06d0: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
06e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
06f0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0700: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0710: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0720: 32 30 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20  2013"..      #
0730: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0740: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0750: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0760: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0770: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0780: 69 61 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e  ialize "unset -n
0790: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79  ocomplain test_y
07a0: 65 61 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ear"..      #
07b0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
07c0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
07d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
07e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
07f0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26   ::test_year] &&
0800: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0810: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20  $::test_year] > 0820: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0830: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 0840: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 0850: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 0860: 72 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 r. If this vari 0870: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 0880: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 0890: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 default va 08a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 08b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 08c0: 6e 6f 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 not Eagle has be 08d0: 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 en.. # 08e0: 20 20 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 compiled aga 08f0: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 0900: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 0910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0920: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
0930: 74 5f 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20  t_year..      }
0940: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
0960: 45 3a 20 49 66 20 45 61 67 6c 65 20 68 61 73 20  E: If Eagle has
0970: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67  been compiled ag
0980: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34  ainst the CLR v4
0990: 2e 30 2c 20 75 73 65 20 22 32 30 31 30 22 20 62  .0, use "2010" b
09a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
09b0: 20 20 20 64 65 66 61 75 6c 74 20 28 77 65 20 63     default (we c
09c0: 6f 75 6c 64 20 75 73 65 20 22 32 30 31 32 22 20  ould use "2012"
09d0: 6f 72 20 22 32 30 31 33 22 20 69 6e 20 74 68 61  or "2013" in tha
09e0: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 20  t case as well)
09f0: 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
0a00: 20 20 20 20 74 68 65 20 74 65 73 74 20 79 65 61      the test yea
0a10: 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 75 73  r; otherwise, us
0a20: 65 20 22 32 30 30 38 22 20 62 79 20 64 65 66 61  e "2008" by defa
0a30: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
0a50: 20 20 20 22 32 30 30 35 22 20 69 6e 20 74 68 61     "2005" in tha
0a60: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 2e  t case as well).
0a70: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
0a80: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
0a90: 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ]..        #
0aa0: 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68     version of th
0ab0: 65 20 43 4c 52 20 69 73 20 72 65 6c 65 61 73 65  e CLR is release
0ac0: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
0ad0: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 0d 0a 20  ll have to be..
0ae0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
0af0: 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66  hanged.  The def
0b00: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 74  ault test year t
0b10: 6f 20 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  o use for a part
0b20: 69 63 75 6c 61 72 20 43 4c 52 0d 0a 20 20 20 20  icular CLR..
0b30: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73      #       vers
0b40: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72  ion may be overr
0b50: 69 64 64 65 6e 20 62 79 20 73 65 74 74 69 6e 67  idden by setting
0b60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
0b70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
0b80: 20 20 20 20 20 20 22 74 65 73 74 5f 79 65 61 72        "test_year
0b90: 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72 65  _clr_v$X", where 0ba0: 20 22 24 58 22 20 6d 61 79 20 5b 63 75 72 72 65 "$X" may [curre
0bb0: 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20  ntly] be either
0bc0: 22 32 22 0d 0a 20 20 20 20 20 20 20 20 23 20 20  "2"..        #
0bd0: 20 20 20 20 20 6f 72 20 22 34 22 2e 0d 0a 20 20       or "4"...
0be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0bf0: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
0c00: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
0c10: 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e40]} then {..
0c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0c30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
0c40: 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 26 26 20  year_clr_v4] &&
0c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
0c60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0c70: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72  $::test_year_clr 0c80: 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _v4] > 0} then { 0c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 0ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 0cb0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 0cc0: 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 cified test year 0cd0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 0ce0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 0cf0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 0d00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
0d10: 61 72 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20  ar_clr_v4..
0d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0d30: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d40: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
0d50: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
0d60: 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  t test year for
0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
0d80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0da0: 20 32 30 31 30 3b 20 23 20 54 4f 44 4f 3a 20 47   2010; # TODO: G
0db0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64  ood "fallback" d
0dc0: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20  efault?..
0dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
0de0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0df0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0e00: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
0e10: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
0e20: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
0e30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 0e40: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 3e t_year_clr_v2] > 0e50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 0e60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0e70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 0e80: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 0e90: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 0ea0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 he CLR v2.0... 0eb0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 0ed0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
0ee0: 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v2..          }
0ef0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
0f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0f20: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
0f30: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
0f40: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
0f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f60: 20 20 20 20 72 65 74 75 72 6e 20 32 30 30 38 3b      return 2008;
0f70: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
0f80: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
0f90: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
0fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0fb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
0fc0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59    proc getBuildY
0fd0: 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ears {} {..
0fe0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0ff0: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73  : See if the lis
1000: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1010: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1020: 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d  den by the user.
1030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28  .      #       (
1040: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1050: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
1060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1070: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
1080: 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c  st_years] && [ll
1090: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 10a0: 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ars] > 0} then { 10b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 10d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 10e0: 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 ist of test year 10f0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1110: 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20  :test_years..
1120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1140: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1150: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
1160: 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 2e  test years (i.e.
1170: 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20   all)...
1180: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1190: 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30  n [list 2005 200
11a0: 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 33  8 2010 2012 2013
11b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
11c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
11d0: 65 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d 20  etBuildNetFx {}
11e0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
11f0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
1200: 20 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20 46   the test .NET F
1210: 72 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e 67  ramework setting
1220: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
1230: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
1240: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
1250: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
1260: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
1270: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1280: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1290: 65 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20 5c  est_net_fx] && \
12a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
12b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 12c0: 73 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d 20 st_net_fx] > 0} 12d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12f0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 1300: 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 fied test .NET F 1310: 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 ramework... 1320: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 1330: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 74 turn$::test_net
1340: 5f 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  _fx..      } els
1350: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1360: 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59   year [getBuildY
1370: 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ear]....
1380: 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d  switch -exact --
1390: 20 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20 20   $year {.. 13a0: 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 20 20 20 2005 {.. 13b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 13c0: 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 etFx20.. 13d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 13e0: 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 008 {.. 13f0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 1400: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 5.. }.. 1410: 20 20 20 20 20 20 20 20 20 20 32 30 31 30 20 7b 2010 { 1420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1430: 74 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 20 turn netFx40.. 1440: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1450: 20 20 20 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 2012 {.. 1460: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 1470: 6e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 netFx45.. 1480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1490: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 2013 {.. 14a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 14b0: 34 35 31 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 451.. } 14c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 66 61 .. defa 14d0: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ult {.. 14e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 14f0: 35 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 5; # TODO: Good 1500: 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 "fallback" defau 1510: 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lt?.. } 1520: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1530: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1540: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1550: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 1560: 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 e should return 1570: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 non-zero if the 1580: 63 6f 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d configured test. 1590: 0a 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 . # pla 15a0: 74 66 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 tform is most li 15b0: 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 kely the default 15c0: 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e for this machin 15d0: 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 e... #.. p 15e0: 72 6f 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 roc isDefaultBui 15f0: 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 ldPlatform { {ve 1600: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b rbose false} } { 1610: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1620: 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 # NOTE: Running 1630: 20 6f 6e 20 57 6f 57 36 34 20 69 73 20 6e 65 76 on WoW64 is nev 1640: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 er the default p 1650: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 1660: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 1670: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 RunningWoW64]} t 1680: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1690: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
16a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
16b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 16c0: 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 16d0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 "---- dete 16e0: 63 74 65 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 cted non-default 16f0: 20 70 6c 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 platform (WoW64 1700: 29 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d )\n".. }. 1710: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1720: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. 1730: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1740: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 # NOTE: This ha 1750: 73 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 s a good chance 1760: 6f 66 20 62 65 69 6e 67 20 74 68 65 20 64 65 66 of being the def 1770: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a ault platform... 1780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1790: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
17a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
17b0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17c0: 65 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 el "---- detecte 17d0: 64 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f d default platfo 17e0: 72 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rm\n".. }.. 17f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 1800: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 1810: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c proc getBuildPl 1820: 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 atform { native 1830: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 1840: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1850: 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 st_platform] && 1860: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 1870: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
1880: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  est_platform] >
1890: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
18a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18b0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
18c0: 65 63 69 66 69 65 64 20 74 65 73 74 20 70 6c 61  ecified test pla
18d0: 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20  tform.  If this
18e0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20  variable is not
18f0: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  set,..        #
1900: 20 20 20 20 20 20 74 68 65 20 64 65 66 61 75 6c        the defaul
1910: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be
1920: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63  based on the mac
1930: 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72  hine architectur
1940: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
1950: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65         return [e
1960: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24  xpr {$native ?$
1970: 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20  ::test_platform
1980: 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20  : ""}]..      }
1990: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
19a0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68  ists ::test_mach
19b0: 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ine] && \..
19c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
19d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68  gth $::test_mach 19e0: 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ine] > 0} then { 19f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 1a10: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 native builds, 1a20: 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 return the platf 1a30: 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 orm name corresp 1a40: 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 onding to.. 1a50: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 # the t 1a60: 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 est machine arch 1a70: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 itecture; otherw 1a80: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ise, return an e 1a90: 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 mpty.. # 1aa0: 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 string... 1ab0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ac0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 1ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 74 ..$nat
1ae0: 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f  ive ? [machineTo
1af0: 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74  Platform $::test 1b00: 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a _machine] : "".. 1b10: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 }].. 1b20: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 1b30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 o exists ::tcl_p 1b40: 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 latform(machine) 1b50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1b60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b70: 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 NOTE: For native 1b80: 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 builds, return 1b90: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d the platform nam 1ba0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 e corresponding 1bb0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 to.. # 1bc0: 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 the machine 1bd0: 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 architecture; ot 1be0: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 herwise, return 1bf0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1c00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c10: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1c20: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 r {..$
1c30: 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e  native ? [machin
1c40: 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74  eToPlatform $::t 1c50: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach 1c60: 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 20 ine)] : "".. 1c70: 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 }].. } 1c80: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1c90: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1ca0: 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 72 E: No machine ar 1cb0: 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 76 chitecture is av 1cc0: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 ailable, return 1cd0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1ce0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1cf0: 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e It is importan 1d00: 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 t to return an e 1d10: 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 mpty string here 1d20: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 because the.. 1d30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 1d40: 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f sult of this pro 1d50: 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 cedure may be us 1d60: 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f ed with [file jo 1d70: 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d in]... #. 1d80: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1d90: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 "".. }.. 1da0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1db0: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 1dc0: 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 ation {} {.. 1dd0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1de0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 63 E: See if the "c 1df0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65 onfiguration" se 1e00: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f tting has been o 1e10: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 verridden by the 1e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1e30: 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 user (e.g. on th 1e40: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e e command line). 1e50: 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e This helps con 1e60: 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 trol exactly.. 1e70: 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 # whic 1e80: 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69 65 h set of binarie 1e90: 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 s we are testing 1ea0: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 (i.e. those bui 1eb0: 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 lt in the.. 1ec0: 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67 22 # "Debug" 1ed0: 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62 75 or "Release" bu 1ee0: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 1ef0: 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 ns). To overrid 1f00: 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 e this.. # 1f10: 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 value via 1f20: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 1f30: 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e , enter a comman 1f40: 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 d similar to one 1f50: 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 of.. # 1f60: 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 the following 1f70: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 1f80: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 1f90: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 1fa0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 1fb0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 1fc0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 1fd0: 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20 n Debug".. 1fe0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 1ff0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 2000: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 2010: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 2020: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 2030: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 2040: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 2050: 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 n Release".. 2060: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c # -fil 2070: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e e .\path\to\all. 2080: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a eagle.. #.. 2090: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 20a0: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 gleShell.exe -fi 20b0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 20c0: 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d .eagle -preTest. 20d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 20e0: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c "unset -nocompl 20f0: 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 ain test_configu 2100: 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 ration".. # 2110: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 2120: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 2130: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 configuration] & 2140: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 2150: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2160: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
2170: 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ion] > 0} then {
2180: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2190: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
21a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
21b0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
21c0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default
21d0: 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20  value used..
21e0: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20      #       for
21f0: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73  this variable is
2200: 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c 65   typically "Rele
2210: 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79 20  ase", as set by
2220: 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20  the test..
2230: 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 20    #       suite
2240: 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20  itself...
2250: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
2260: 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  rn $::test_confi 2270: 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 2280: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 2290: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 22a0: 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 OTE: Normally, w 22b0: 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 e will never hit 22c0: 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61 75 this case becau 22d0: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 se the value of 22e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 22f0: 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69 67 test config 2300: 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 uration variable 2310: 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 62 is always set b 2320: 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 2330: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2340: 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 itself; howeve 2350: 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76 65 r, it can be ove 2360: 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74 68 rridden using th 2370: 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d e unset command. 2380: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2390: 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 from the -preTe 23a0: 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 st option to the 23b0: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 23c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 23d0: 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 return$::eagle
23e0: 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67  _platform(config
23f0: 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  uration)..
2400: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
2410: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f   proc getBuildCo
2420: 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20  nfigurations {}
2430: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
2440: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
2450: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 73   the list of tes
2460: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t configurations
2470: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2480: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
2490: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
24a0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
24b0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
24c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
24d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
24e0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
24f0: 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ns] && \..
2500: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a      [llength $:: 2510: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 2520: 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ons] > 0} then { 2530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2540: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 2550: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 2560: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 2570: 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 igurations... 2580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2590: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 return$::test_c
25a0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20  onfigurations..
25b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
25c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
25e0: 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f  e default list o
25f0: 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61  f test configura
2600: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  tions...
2610: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
2620: 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52 65  n [list Debug Re
2630: 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  lease]..      }.
2640: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
2650: 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 65  roc getBuildBase
2660: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
2670: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
2680: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
2690: 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 63  t the base direc
26a0: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74  tory where all t
26b0: 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c 64  he builds should
26c0: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
26d0: 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69     located.  Thi
26e0: 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 69  s will be the di
26f0: 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f 6e  rectory that con
2700: 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 6c  tains the actual
2710: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2720: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72  build output dir
2730: 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 72  ectory (e.g. par
2740: 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a  ent of "bin")...
2750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
2760: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
2770: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
2780: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
2790: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
27a0: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f  length $::build_ 27b0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 27c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 27d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27e0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 27f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c tion of the buil 2800: 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 d base directory 2810: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 2820: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 2830: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 2840: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 2850: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 2860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2870: 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65  :build_base_dire
2880: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
2890: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
28a0: 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72  sts ::common_dir
28b0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
28c0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
28d0: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e  length $::common 28e0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 28f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2900: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2910: 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 TE: Next, fallba 2920: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 ck to the parent 2930: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 directory of th 2940: 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 e one containing 2950: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2960: 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 this file (i.e 2970: 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 . "common.eagle" 2980: 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e ), if available. 2990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 29a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 29b0: 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d e dirname$::com
29c0: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 0d 0a  mon_directory]..
29d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
29e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 70  [info exists ::p
29f0: 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ath] && \..
2a00: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
2a10: 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30  gth $::path] > 0 2a20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2a30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a40: 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 OTE: Finally, fa 2a50: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 llback to the pa 2a60: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f rent directory o 2a70: 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d f the EagleTest. 2a80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2a90: 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 67 6c path. The Eagl 2aa0: 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 67 75 eTest package gu 2ab0: 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 74 68 arantees that th 2ac0: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 is variable.. 2ad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 6c # wil 2ae0: 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 l be set to the 2af0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 directory contai 2b00: 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 66 ning the first f 2b10: 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 ile to.. 2b20: 23 20 20 20 20 20 20 20 65 78 65 63 75 74 65 20 # execute 2b30: 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c the [runTestProl 2b40: 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c 69 62 ogue] script lib 2b50: 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 2e 0d rary procedure.. 2b60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2b70: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 2b80: 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 dirname$::path
2b90: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
2ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2bb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
2bc0: 20 70 61 74 68 20 69 73 20 61 76 61 69 6c 61 62   path is availab
2bd0: 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d  le, return an em
2be0: 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54 68 69  pty string.  Thi
2bf0: 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  s point..
2c00: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
2c10: 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64 2e 0d  not be reached..
2c20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2c30: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
2c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
2c50: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51  ..    proc getSQ
2c60: 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
2c70: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
2c80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
2c90: 67 75 72 65 20 6f 75 74 20 74 68 65 20 64 69 72  gure out the dir
2ca0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c  ectory where all
2cb0: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 20 66   the test data f
2cc0: 69 6c 65 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20  iles should..
2cd0: 20 20 20 23 20 20 20 20 20 20 20 62 65 20 6c 6f     #       be lo
2ce0: 63 61 74 65 64 2e 20 20 54 68 69 73 20 73 68 6f  cated.  This sho
2cf0: 75 6c 64 20 62 65 20 74 68 65 20 22 64 61 74 61  uld be the "data
2d00: 22 20 64 69 72 65 63 74 6f 72 79 20 62 65 6e 65  " directory bene
2d10: 61 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ath the..      #
2d20: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
2d30: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
2d40: 61 63 74 75 61 6c 20 74 65 73 74 20 73 63 72 69  actual test scri
2d50: 70 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  pts...      #..
2d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
2d70: 65 20 6a 6f 69 6e 20 24 3a 3a 70 61 74 68 20 64  e join $::path d 2d80: 61 74 61 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a ata].. }..... 2d90: 20 20 20 20 70 72 6f 63 20 69 73 52 75 6e 6e 69 proc isRunni 2da0: 6e 67 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 ngWoW64 {} {.. 2db0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2dc0: 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 OTE: For now, ju 2dd0: 73 74 20 75 73 65 20 74 68 65 20 65 78 69 73 74 st use the exist 2de0: 69 6e 67 20 74 65 73 74 20 63 6f 6e 73 74 72 61 ing test constra 2df0: 69 6e 74 20 66 6f 72 20 64 65 74 65 63 74 69 6e int for detectin 2e00: 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 g.. # 2e10: 20 61 20 57 6f 57 36 34 20 70 72 6f 63 65 73 73 a WoW64 process 2e20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 2e30: 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f return [haveCo 2e40: 6e 73 74 72 61 69 6e 74 20 77 6f 77 36 34 5d 0d nstraint wow64]. 2e50: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 2e60: 72 6f 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 41 roc isMixedModeA 2e70: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 ssembly { fileNa 2e80: 6d 65 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 me {varName ""} 2e90: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 2ea0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 2eb0: 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 t, make sure the 2ec0: 20 74 65 73 74 20 73 75 69 74 65 20 69 6e 66 72 test suite infr 2ed0: 61 73 74 72 75 63 74 75 72 65 20 69 73 20 61 6c astructure is al 2ee0: 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 lowed to.. 2ef0: 23 20 20 20 20 20 20 20 75 73 65 20 74 68 65 20 # use the 2f00: 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d [exec] command.. 2f10: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2f20: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2f30: 73 20 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 26 s ::no(exec)] && 2f40: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a ![info exists : 2f50: 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d 20 :no(corFlags)]} 2f60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2f70: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2f80: 45 3a 20 49 66 20 74 68 65 20 6c 6f 63 61 74 69 E: If the locati 2f90: 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 69 on of CorFlags i 2fa0: 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 s present in the 2fb0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 environment,.. 2fc0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 2fd0: 73 65 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 se it; otherwise 2fe0: 20 61 73 73 75 6d 65 20 69 74 20 69 73 20 69 6e assume it is in 2ff0: 20 74 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 the PATH... 3000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 3010: 65 74 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 70 et corFlags [exp 3020: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5b r {.. [ 3030: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e info exists ::en 3040: 76 28 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 24 v(CorFlags)] ?$
3050: 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 20  ::env(CorFlags)
3060: 3a 20 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20 20  : "CorFlags"..
3070: 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20        }]....
3080: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
3090: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
30a0: 6f 20 65 78 65 63 75 74 65 20 43 6f 72 46 6c 61  o execute CorFla
30b0: 67 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66  gs on the specif
30c0: 69 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ied file...
30d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
30e0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
30f0: 20 20 20 20 20 20 65 78 65 63 20 2d 2d 20 24 63        exec -- $c 3100: 6f 72 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e 61 orFlags [file na 3110: 74 69 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 tivename$fileNa
3120: 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  me]..        } e
3130: 78 65 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  xec] == 0} then
3140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
3150: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
3160: 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62  : If requested b
3170: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 74  y our caller, at
3180: 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69  tempt to determi
3190: 6e 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ne the..
31a0: 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f    #       platfo
31b0: 72 6d 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  rm for the speci
31c0: 66 69 65 64 20 66 69 6c 65 20 61 73 20 77 65 6c  fied file as wel
31d0: 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  l...          #.
31e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
31f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 3200: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 arName] > 0} the 3210: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 3220: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3230: 23 20 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 68 # NOTE: Store th 3240: 65 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 68 e platform in th 3250: 65 20 6e 61 6d 65 64 20 76 61 72 69 61 62 6c 65 e named variable 3260: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 in the.. 3270: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 3280: 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c text of our call 3290: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er... 32a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 32b0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
32c0: 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20   platform....
32d0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
32e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
32f0: 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  Attempt to extra
3300: 63 74 20 74 68 65 20 50 45 20 6c 69 6e 65 20 66  ct the PE line f
3310: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64  rom the captured
3320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
3330: 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49        output.  I
3340: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20  f this value is
3350: 22 50 45 33 32 22 20 6f 72 20 22 50 45 33 32 2b  "PE32" or "PE32+
3360: 22 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ", the..
3370: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
3380: 6d 62 6c 79 20 66 69 6c 65 20 69 73 20 33 32 2d  mbly file is 32-
3390: 62 69 74 20 6f 72 20 36 34 2d 62 69 74 2c 20 72  bit or 64-bit, r
33a0: 65 73 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20 20  espectively;..
33b0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
33c0: 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 73    otherwise, its
33d0: 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77 6e   type is unknown
33e0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
3400: 74 20 70 61 74 74 65 72 6e 20 7b 5e 50 45 20 20  t pattern {^PE
3410: 20 20 20 20 20 20 3a 20 28 50 45 33 32 7c 50 45        : (PE32|PE
3420: 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20  32\+)\s+$}.... 3430: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 if {[r 3440: 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 egexp -line --$
3450: 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64 75  pattern $exec du 3460: 6d 6d 79 20 70 65 33 32 5d 7d 20 74 68 65 6e 20 mmy pe32]} then 3470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 3480: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3490: 20 20 23 20 48 41 43 4b 3a 20 54 68 69 73 20 5b # HACK: This [ 34a0: 73 77 69 74 63 68 5d 20 61 73 73 75 6d 65 73 20 switch] assumes 34b0: 74 68 61 74 20 33 32 2d 62 69 74 20 65 78 65 63 that 32-bit exec 34c0: 75 74 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 20 utables are.. 34d0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 34e0: 20 20 20 61 6c 77 61 79 73 20 78 38 36 20 61 6e always x86 an 34f0: 64 20 74 68 61 74 20 36 34 2d 62 69 74 20 65 78 d that 64-bit ex 3500: 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 61 6c ecutables are al 3510: 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ways.. 3520: 20 20 20 20 23 20 20 20 20 20 20 20 78 36 34 2e # x64. 3530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 3540: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3550: 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d switch -exact - 3560: 2d 20 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 20 -$pe32 {..
3570: 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32 20             PE32
3580: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
3590: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
35a0: 6d 20 57 69 6e 33 32 0d 0a 20 20 20 20 20 20 20  m Win32..
35b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32              PE32
35d0: 2b 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  + {..
35e0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
35f0: 6f 72 6d 20 78 36 34 0d 0a 20 20 20 20 20 20 20  orm x64..
3600: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
3610: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
3620: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ult {..
3630: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
3640: 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20  tform ""..
3650: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
3660: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
3670: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
3680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
3690: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22    set platform "
36a0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  "..            }
36b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
36c0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
36d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
36e0: 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  Attempt to extra
36f0: 63 74 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c 69  ct the ILONLY li
3700: 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74  ne from the capt
3710: 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ured..
3720: 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20  #       output.
3730: 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69   If this value i
3740: 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 70 65 63  s zero, the spec
3750: 69 66 69 65 64 20 66 69 6c 65 20 6d 75 73 74 0d  ified file must.
3760: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
3770: 20 20 20 62 65 20 61 20 6d 69 78 65 64 2d 6d 6f     be a mixed-mo
3780: 64 65 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74 68  de assembly; oth
3790: 65 72 77 69 73 65 2c 20 69 74 20 63 6f 6e 74 61  erwise, it conta
37a0: 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20  ins only..
37b0: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61      #       mana
37c0: 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d  ged components..
37d0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
37e0: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74          set patt
37f0: 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20  ern {^ILONLY
3800: 3a 20 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a  : (0|1)\s+$}.... 3810: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 3820: 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 regexp -line -- 3830: 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64$pattern $exec d 3840: 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 ummy ilOnly]} th 3850: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 3860: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 3870: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 3880: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 69 if {!$i
3890: 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  lOnly} then {..
38a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38b0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  n true..
38c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
38d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
38e0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
38f0: 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 73 75  : If the test su
3900: 69 74 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 5b  ite cannot use [
3910: 65 78 65 63 5d 20 6f 72 20 65 78 65 63 75 74 69  exec] or executi
3920: 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d 0a  on of CorFlags..
3930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 61        #       fa
3940: 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 66 61 6c  iled, return fal
3950: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
3960: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3970: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3980: 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76 61 69  proc isBuildAvai
3990: 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65 20 64  lable { native d
39a0: 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d  irectory {varNam
39b0: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e ""} } {..
39c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
39d0: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
39e0: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65  y qualified file
39f0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 72   name for the pr
3a00: 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a  imary assembly..
3a10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
3a20: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73  ntaining the Sys
3a30: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
3a40: 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e  managed componen
3a50: 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20 20 23  ts.  It..      #
3a60: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
3a70: 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68 69 73   noted that this
3a80: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6d   assembly file m
3a90: 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 20  ay also contain
3aa0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
3ab0: 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e     native compon
3ac0: 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74 69 76  ents, if a nativ
3ad0: 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20 75 73  e build is in us
3ae0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
3af0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
3b00: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
3b10: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir 3b20: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 3b30: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 3b40: 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a SQLite.dll]].... 3b50: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 if {![file 3b60: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
3b70: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
3b80: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3b90: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
3ba0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
3bb0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 61  TE: Attempt to a
3bc0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 74  utomatically det
3bd0: 65 63 74 20 69 66 20 74 68 65 20 70 72 69 6d 61  ect if the prima
3be0: 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ry assembly..
3bf0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61     #       conta
3c00: 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 20 63  ins any native c
3c10: 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 6e 65  omponents, if ne
3c20: 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20  cessary...
3c30: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
3c40: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 74  ring length $nat 3c50: 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ive] == 0} then 3c60: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 3c70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
3c80: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  arName] > 0} the
3c90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75  n {..          u
3ca0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 3cb0: 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20$varName..
3cc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
3cd0: 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d 69 78  et native [isMix
3ce0: 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 24  edModeAssembly $3cf0: 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e 61 6d fileName$varNam
3d00: 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  e]..      }....
3d10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
3d20: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 72 69  NOTE: If the pri
3d30: 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 61 6c  mary assembly al
3d40: 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  so contains the
3d50: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
3d60: 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  s,..      #
3d70: 20 20 77 65 20 68 61 76 65 20 65 76 65 72 79 74    we have everyt
3d80: 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20  hing we need...
3d90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
3da0: 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20   {$native} then 3db0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 3dc0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. 3dd0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 3de0: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 3df0: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif 3e00: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f ied file name fo 3e10: 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 r the interop as 3e20: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 sembly.. # 3e30: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 containing 3e40: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 the System.Data 3e50: 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 .SQLite native c 3e60: 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 omponents. If t 3e70: 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 his.. # 3e80: 20 20 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 file exists, 3e90: 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 we should have e 3ea0: 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 verything we nee 3eb0: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 3ec0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 3ed0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 3ee0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
3ef0: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
3f00: 20 20 20 20 53 51 4c 69 74 65 2e 49 6e 74 65 72      SQLite.Inter
3f10: 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20  op.dll]]....
3f20: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
3f30: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 3f40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 3f50: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 3f60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 3f70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 3f80: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu 3f90: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d alified file nam 3fa0: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 e for the SQLite 3fb0: 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 core.. # 3fc0: 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 49 library. I 3fd0: 66 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 73 f this file exis 3fe0: 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 ts, we should ha 3ff0: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 ve everything we 4000: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 4010: 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a need... #.. 4020: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 4030: 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e me [file nativen 4040: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 ame [file join$
4050: 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20  directory \..
4060: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e 64         sqlite3.d
4070: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ll]]....      if
4080: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $4090: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 40a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 40b0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. 40c0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 40d0: 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f 72 # NOTE: One or 40e0: 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63 6f 6d more native com 40f0: 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64 20 62 ponents needed b 4100: 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 4110: 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 Lite.. # 4120: 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e 67 2e are missing. 4130: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4140: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. 4150: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 4160: 63 20 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c c isReleaseAvail 4170: 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f 72 79 able { directory 4180: 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 {varName ""} } 4190: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 {.. if {[st 41a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
41b0: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
41c0: 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72  {..        upvar
41d0: 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72   1 $varName$var
41e0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  Name..      }...
41f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69  .      return [i
4200: 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20  sBuildAvailable
4210: 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 24 76  "" $directory$v
4220: 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a  arName]..    }..
4230: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e  ...    proc join
4240: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b  BuildDirectory {
4250: 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 65 61   native path yea
4260: 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69  r platform confi
4270: 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20  guration } {..
4280: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
4290: 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20  OTE: Figure out
42a0: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20  and then return
42b0: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
42c0: 69 65 64 20 70 61 74 68 20 74 6f 20 74 68 65 20  ied path to the
42d0: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20  build..      #
42e0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 62       directory b
42f0: 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20  ased on all the
4300: 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64  arguments provid
4310: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
4320: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
4330: 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74    if {$native} t 4340: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 4350: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e eturn [file join 4360: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72$path bin $year 4370: 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66$platform $conf 4380: 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 iguration].. 4390: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 43a0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 43b0: 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 join$path bin
43c0: 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75 72 61  $year$configura
43d0: 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20  tion bin]..
43e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
43f0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 44    proc getBuildD
4400: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20  irectory {} {..
4410: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
4420: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65  NOTE: See if the
4430: 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d   "native" runtim
4440: 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65  e option has bee
4450: 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20 75  n set.  If so, u
4460: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  se the..      #
4470: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
4480: 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  for the mixed-mo
4490: 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e 6b  de assembly (a.k
44a0: 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20 69  .a. the native i
44b0: 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23 20  nterop..      #
44c0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29 2e        assembly).
44d0: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73    To enable this
44e0: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20   option via the
44f0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e  command line, en
4500: 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20 20  ter a..      #
4510: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69 6d       command sim
4520: 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74  ilar to one of t
4530: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c  he following (al
4540: 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d  l on one line):.
4550: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4560: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
4570: 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69  ll.exe -initiali
4580: 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69 6f  ze -runtimeOptio
4590: 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  n native..
45a0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
45b0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
45c0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
45d0: 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 20 65      #       To e
45e0: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f  nable this optio
45f0: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  n via the comman
4600: 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f 20  d line prior to
4610: 74 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a 20  the "beta 16"..
4620: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c       #       rel
4630: 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20 74  ease of Eagle, t
4640: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d  he following com
4650: 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65  mand must be use
4660: 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20 20  d instead..
4670: 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20 61   #       (also a
4680: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
4690: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
46a0: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
46b0: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c  ell.exe -initial
46c0: 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61 6c  ize -postInitial
46d0: 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ize..      #
46e0: 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e 76       "object inv
46f0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
4700: 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e  GetActive AddRun
4710: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
4720: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e"..      #
4730: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
4740: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
4750: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
4760: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
4770: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79  :build_directory
4780: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
4790: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
47a0: 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74   $::build_direct 47b0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { 47c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 47d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The 47e0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 location of the 47f0: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 4800: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 4810: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 4820: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 4830: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 4840: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 4850: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
4860: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79  :build_directory
4870: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
4880: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4890: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
48a0: 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e  the "native" run
48b0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73  time option is s
48c0: 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  et, the mixed-mo
48d0: 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  de assembly..
48e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is
48f0: 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20 49  being tested.  I
4900: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68 65  n that case, the
4910: 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69   path to the bui
4920: 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ld directory..
4930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69        #       wi
4940: 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 70  ll contain the p
4950: 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e 64  latform name and
4960: 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69 65   all the binarie
4970: 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20 20  s under test..
4980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
4990: 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74 20  ould be present
49a0: 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f 72  in that director
49b0: 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74 69  y.  If the "nati
49c0: 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20  ve" runtime..
49d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74       #       opt
49e0: 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c 20  ion is not set,
49f0: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
4a00: 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e 73  ory will be cons
4a10: 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20 20  idered to be..
4a20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 70        #       "p
4a30: 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c 22  latform-neutral"
4a40: 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61 62  , with the notab
4a50: 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20  le exception of
4a60: 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  any native..
4a70: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
4a80: 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c 69  mbly (e.g. "SQLi
4a90: 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 29  te.Interop.dll")
4aa0: 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 64 75   copied there du
4ab0: 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  ring the..
4ac0: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
4ad0: 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e 20  process itself.
4ae0: 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 70 72   If the build pr
4af0: 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64 6f  ocess somehow do
4b00: 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  es not..
4b10: 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 68 65  #       copy the
4b20: 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79   native assembly
4b30: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
4b40: 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 20  rm, most of the
4b50: 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20 23  tests..        #
4b60: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 73 75         in the su
4b70: 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20  ite will simply
4b80: 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65 6e  be skipped.  Gen
4b90: 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c  erally speaking,
4ba0: 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   there..
4bb0: 23 20 20 20 20 20 20 20 61 72 65 20 74 77 6f 20  #       are two
4bc0: 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74 68  ways to build th
4bd0: 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e 20  e binaries when
4be0: 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75 6e  preparing to run
4bf0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
4c00: 20 20 20 20 20 20 74 65 73 74 20 73 75 69 74 65        test suite
4c10: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  :..        #..
4c20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 31 2e        #       1.
4c30: 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 61 72   Build the separ
4c40: 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64 20  ate managed and
4c50: 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69 65  native assemblie
4c60: 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20 20  s using some..
4c70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
4c80: 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c 61   commands simila
4c90: 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23  r to:..        #
4ca0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4cb0: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24       build.bat $4cc0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4d {Configuration}M 4cd0: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c 61 anagedOnly${Pla
4ce0: 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20  tform}..
4cf0: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64  #          build
4d00: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61  .bat ${Configura 4d10: 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 20 tion}NativeOnly 4d20: 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20${Platform}..
4d30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4d40: 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65  #          Where
4d50: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ${Configuration 4d60: 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62 } is either "Deb 4d70: 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 ug" or "Release" 4d80: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 and.. # 4d90: 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66${Platf
4da0: 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22  orm} is either "
4db0: 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e  Win32" or "x64".
4dc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4dd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 32 2e 20       #       2.
4de0: 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64 2d  Build the mixed-
4df0: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75 73  mode assembly us
4e00: 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69  ing a command si
4e10: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20  milar to:..
4e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
4e30: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62           build.b
4e40: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69  at ${Configurati 4e50: 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d on}${Platform}.
4e60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4e70: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57      #          W
4e80: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61  here ${Configura 4e90: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 tion} is either 4ea0: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 "Debug" or "Rele 4eb0: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 ase" and.. 4ec0: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 #${P
4ed0: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68  latform} is eith
4ee0: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78  er "Win32" or "x
4ef0: 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 63 6f  64".  If this co
4f00: 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20  mmand is..
4f10: 20 20 23 20 20 20 20 20 20 20 20 20 20 75 73 65    #          use
4f20: 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74 73  d, various tests
4f30: 20 74 68 61 74 20 72 65 71 75 69 72 65 20 73 75   that require su
4f40: 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e 61  pplementary mana
4f50: 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ged..        #
4f60: 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 69          assembli
4f70: 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20 6d  es (e.g. LINQ) m
4f80: 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 75 6e  ay be skipped un
4f90: 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61 72  less those binar
4fa0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ies..        #
4fb0: 20 20 20 20 20 20 20 20 61 72 65 20 73 75 62 73          are subs
4fc0: 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64 20  equently copied
4fd0: 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63 74  into the correct
4fe0: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
4ff0: 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20   by..        #
5000: 20 20 20 20 20 20 20 20 22 74 65 73 74 5f 61 6c          "test_al
5010: 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20 20  l.bat")...
5020: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
5030: 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20 61       Note that a
5040: 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20  ll of the build
5050: 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 77  commands above w
5060: 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20 75  ill default to u
5070: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20  sing..        #
5080: 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 73 74        the latest
5090: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75   version of MSBu
50a0: 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61 6e  ild available an
50b0: 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 61 72  d the "test_year
50c0: 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 23  " may..        #
50d0: 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 62         need to b
50e0: 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f 72  e adjusted accor
50f0: 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61 6c  dingly to actual
5100: 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74 20  ly run the test
5110: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
5120: 23 20 20 20 20 20 20 20 52 65 66 65 72 20 74 6f  #       Refer to
5130: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69 6e   the comments in
5140: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20   [getBuildYear]
5150: 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61  for more informa
5160: 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20 20  tion on..
5170: 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f 20   #       how to
5180: 73 65 74 20 74 68 69 73 20 76 61 72 69 61 62 6c  set this variabl
5190: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
51a0: 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
51b0: 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74  e [hasRuntimeOpt
51c0: 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20  ion native]....
51d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a         return [j
51e0: 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72  oinBuildDirector
51f0: 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75  y $native [getBu 5200: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 ildBaseDirectory 5210: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 5220: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 [getBuildYear] 5230: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 [getBuildPlatfor 5240: 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42 m$native] [getB
5250: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
5260: 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  n]]..      }..
5270: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5280: 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69   getReleaseVersi
5290: 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  on {} {..      #
52a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
52b0: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 72  Figure out the r
52c0: 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66  elease version f
52d0: 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20  or use with the
52e0: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d  build directory.
52f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
5300: 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  hen checking for
5310: 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61   available relea
5320: 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ses...      #..
5330: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
5340: 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f  xists ::release_
5350: 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20  version] && \..
5360: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5370: 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61   length $::relea 5380: 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d se_version] > 0} 5390: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 53a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 53b0: 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20 TE: The release 53c0: 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e version has been 53d0: 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65 overridden; the 53e0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a refore, use it.. 53f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5400: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 verbatim... 5410: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 5420: 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f turn$::release_
5430: 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d  version..      }
5440: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
5450: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
5460: 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76  TE: No release v
5470: 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  ersion is availa
5480: 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ble, return an e
5490: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20  mpty string...
54a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 49 74        #       It
54b0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
54c0: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
54d0: 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 65 63   string here bec
54e0: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20  ause the..
54f0: 20 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74    #       result
5500: 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75   of this procedu
5510: 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 20 77  re may be used w
5520: 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e  ith [file join].
5530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5540: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
5550: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5560: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
5570: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66  uildFileName { f
5580: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
5590: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
55a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
55b0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70  : Returns the sp
55c0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  ecified file nam
55d0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  e as if it were
55e0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a  located in the..
55f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
5600: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64  ild directory, d
5610: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69  iscarding any di
5620: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74  rectory informat
5630: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20  ion present..
5640: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68     #       in th
5650: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70  e file name as p
5660: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
5670: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
5680: 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
5690: 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  t [file nativena
56a0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
56b0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
56c0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 20 24  uildDirectory] $56d0: 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 platform [file t 56e0: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d ail$fileName]]]
56f0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
5700: 20 20 20 23 20 48 41 43 4b 3a 20 57 68 65 6e 20     # HACK: When
5710: 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34  running on WoW64
5720: 2c 20 61 73 73 75 6d 65 20 74 68 65 20 74 65 73  , assume the tes
5730: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72  t executables ar
5740: 65 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20  e present..
5750: 20 23 20 20 20 20 20 20 20 77 69 74 68 20 74 68   #       with th
5760: 65 20 22 33 32 22 20 73 75 66 66 69 78 20 6f 6e  e "32" suffix on
5770: 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d   them...      #.
5780: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75  .      if {[isRu
5790: 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 26 26 20 5b  nningWoW64] && [
57a0: 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 24  file extension $57b0: 72 65 73 75 6c 74 5d 20 65 71 20 22 2e 65 78 65 result] eq ".exe 57c0: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 57d0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61 set result [a 57e0: 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 ppendArgs [file 57f0: 72 6f 6f 74 6e 61 6d 65 20 24 72 65 73 75 6c 74 rootname$result
5800: 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 20 20 20 20  ] 32.exe]..
5810: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
5820: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 5830: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 5840: 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 etExternalDirect 5850: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 5860: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 5870: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 5880: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 returns the dire 5890: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 ctory where the 58a0: 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 79 0d external binary. 58b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 . # f 58c0: 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 74 65 64 iles are located 58d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 58e0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 58f0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 5900: 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 dirname [file di 5910: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 6e 61 rname [info bina 5920: 72 79 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c ry]]]].. }... 5930: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 .. proc getBi 5940: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d naryDirectory {} 5950: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 5960: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 5970: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e procedure return 5980: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 s the directory 5990: 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 61 where the test a 59a0: 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 pplication.. 59b0: 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 # itself 59c0: 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 6c 65 (i.e. the Eagle 59d0: 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61 74 shell) is locat 59e0: 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 ed. This will b 59f0: 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 20 20 e used as.. 5a00: 20 23 20 20 20 20 20 20 20 74 68 65 20 64 65 73 # the des 5a10: 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 tination for the 5a20: 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d 2e 44 copied System.D 5a30: 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 ata.SQLite nativ 5a40: 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 e and.. # 5a50: 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 managed ass 5a60: 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 62 65 emblies (i.e. be 5a70: 63 61 75 73 65 20 74 68 69 73 20 69 73 20 6f 6e cause this is on 5a80: 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 6c 61 e of the few pla 5a90: 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ces.. # 5aa0: 20 20 20 77 68 65 72 65 20 74 68 65 20 43 4c 52 where the CLR 5ab0: 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 66 will actually f 5ac0: 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 ind and load the 5ad0: 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 m properly)... 5ae0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 5af0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 5b00: 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 binary_directory 5b10: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 5b20: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 5b30: 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63$::binary_direc
5b40: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
5b50: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
5b60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
5b70: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  e location of th
5b80: 65 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f  e binary directo
5b90: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
5ba0: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
5bb0: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
5bc0: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61  re, use it verba
5bd0: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  tim...        #.
5be0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
5bf0: 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74  $::binary_direct 5c00: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 5c10: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 e {.. ret 5c20: 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 urn [info binary 5c30: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 5c40: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 5c50: 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 etExternalFileNa 5c60: 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 me { fileName } 5c70: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 5c80: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 5c90: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 5ca0: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 file name as if 5cb0: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 it were located 5cc0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 5cd0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 5ce0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 containing the e 5cf0: 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 xternal binaries 5d00: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 5d10: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 5d20: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 5d30: 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 6e 61 join [getExterna 5d40: 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c lDirectory]$fil
5d50: 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  eName]]..    }..
5d60: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
5d70: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20  inaryFileName {
5d80: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f  fileName {platfo
5d90: 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  rm ""} } {..
5da0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
5db0: 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73  E: Returns the s
5dc0: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61  pecified file na
5dd0: 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65  me as if it were
5de0: 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d   located in the.
5df0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
5e00: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2c  inary directory,
5e10: 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20   discarding any
5e20: 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d  directory inform
5e30: 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20  ation present..
5e40: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in
5e50: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  the file name as
5e60: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
5e70: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
5e80: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
5e90: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
5ea0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66   \..          [f
5eb0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
5ec0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 5ed0: 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 latform [file ta 5ee0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d il$fileName]]].
5ef0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
5f00: 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72  roc getCoreBinar
5f10: 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70 6c 61  yFileName { {pla
5f20: 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61 6e 64  tform ""} {stand
5f30: 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ard false} } {..
5f40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5f50: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74   NOTE: Returns t
5f60: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72  he full path for
5f70: 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69   the file contai
5f80: 6e 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20  ning the SQLite
5f90: 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20  core..      #
5fa0: 20 20 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61      native libra
5fb0: 72 79 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73  ry code for this
5fc0: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73   platform.  Firs
5fd0: 74 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65  t, check and see
5fe0: 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   if..      #
5ff0: 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f     the SQLite co
6000: 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72  re native librar
6010: 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  y has already be
6020: 65 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74  en loaded.  Next
6030: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
6040: 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61   fallback to wha
6050: 74 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20  t the full path
6060: 73 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64  should be, based
6070: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d   on whether the.
6080: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
6090: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
60a0: 6c 79 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  ly is being used
60b0: 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
60c0: 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20   the current..
60d0: 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74      #       plat
60e0: 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  form...      #..
60f0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
6100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
6110: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
6120: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
6130: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
6140: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
6150: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6160: 73 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  s _SQLiteNativeM
6170: 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20  oduleFileName..
6180: 20 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d       } fileName]
6190: 20 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67   == 0 && [string
61a0: 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d   length $fileNam 61b0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 61c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 61d0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 # NOTE: The S 61e0: 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 QLite core nativ 61f0: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c e library has al 6200: 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 ready been loade 6210: 64 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 d via.. # 6220: 20 20 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 the nativ 6230: 65 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f e library pre-lo 6240: 61 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 ader. Return th 6250: 61 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 at file name now 6260: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 6270: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 return$fi
6280: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d  leName..      }.
6290: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
62a0: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
62b0: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ative]} then {..
62c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
62d0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
62e0: 6e 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  n the mixed-mode
62f0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e   assembly file n
6300: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
6310: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
6320: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
6330: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
6340: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
6350: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
6360: 24 70 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d  $platform System 6370: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 6380: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ]].. } else 6390: 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 74 if {$standard} t
63a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
63b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
63c0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74  : Return the nat
63d0: 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72  ive-only standar
63e0: 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  d SQLite library
63f0: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
6400: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6410: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
6420: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
6430: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
6440: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
6450: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 6460: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a sqlite3.dll]].. 6470: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 6480: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6490: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 64a0: 6e 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c n the native-onl 64b0: 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 y interop assemb 64c0: 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 ly file name... 64d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 64e0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 64f0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 ativename \.. 6500: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j 6510: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 oin [getBinaryDi 6520: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f rectory]$platfo
6530: 72 6d 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  rm SQLite.Intero
6540: 70 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d  p.dll]]..      }
6550: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
6560: 70 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69  proc getCommonDi
6570: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
6580: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
6590: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
65a0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
65b0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
65c0: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73  the test scripts
65d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
65e0: 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65  should be locate
65f0: 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20  d.  By default,
6600: 74 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e  this just return
6610: 73 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  s the Eagle..
6620: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
6630: 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
6640: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
6650: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
6660: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
6670: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
6680: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
6690: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 66a0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 66b0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 66c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 66d0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 66e0: 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f e common directo 66f0: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b ry has been set; 6700: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6710: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 6720: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 6730: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6740: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74$::common_direct
6750: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
6760: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
6770: 73 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63  s ::vendor_direc
6780: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
6790: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
67a0: 6e 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64  ngth $::vendor_d 67b0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 67c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 67d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 67e0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 67f0: 66 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 f the vendor dir 6800: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 6810: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 6820: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 6830: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 6840: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 6850: 75 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 urn$::vendor_di
6860: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
6870: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
6880: 78 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72  xists ::tcl_libr
6890: 61 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ary] && \..
68a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
68b0: 67 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  gth $::tcl_libra 68c0: 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ry] > 0 && \.. 68d0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 [file is 68e0: 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c directory$::tcl
68f0: 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20  _library]} then
6900: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
6910: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
6920: 65 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20  e variable with
6930: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  the location of
6940: 74 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61  the script libra
6950: 72 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23  ry is..        #
6960: 20 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61         set and a
6970: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72  ppears to be a r
6980: 65 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69  eal directory (i
6990: 2e 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64  .e. not embedded
69a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
69b0: 20 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29    within a file)
69c0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65  ; therefore, use
69d0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
69e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
69f0: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a  $::tcl_library.. 6a00: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 6a10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6a20: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 # NOTE: Fallb 6a30: 61 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 ack to the direc 6a40: 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 tory containing 6a50: 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d the executable.. 6a60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6a70: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f return [info 6a80: 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 binary].. 6a90: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 6aa0: 20 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 proc getDatabas 6ab0: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 6ac0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 6ad0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 6ae0: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 cedure returns t 6af0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 he directory whe 6b00: 72 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 re the test data 6b10: 62 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 bases.. # 6b20: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c should be l 6b30: 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 ocated. By defa 6b40: 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 ult, this just u 6b50: 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 ses the temporar 6b60: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 6b70: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 directory confi 6b80: 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 gured for this s 6b90: 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d ystem... #. 6ba0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 6bb0: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 exists ::databa 6bc0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 6bd0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 6be0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
6bf0: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f  database_directo
6c00: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
6c10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
6c20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
6c30: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
6c40: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
6c50: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6c60: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6c70: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6c80: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6c90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6ca0: 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61  return $::databa 6cb0: 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 se_directory.. 6cc0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 6cd0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr 6ce0: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 6cf0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 6d00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
6d10: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
6d20: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
6d30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6d40: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
6d50: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
6d60: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
6d70: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6d80: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6d90: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6da0: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6db0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6dc0: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc 6dd0: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. 6de0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 6df0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get 6e00: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. 6e10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 6e20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 6e30: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector 6e40: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 6e50: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 6e60: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 6e70: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 6e80: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 6e90: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 mporary files.. 6ea0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho 6eb0: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 uld be located. 6ec0: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 By default, thi 6ed0: 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 s just uses the 6ee0: 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 temporary.. 6ef0: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f # directo 6f00: 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f ry configured fo 6f10: 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a r this system... 6f20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 6f30: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 6f40: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 6f50: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 6f60: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6f70: 65 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 ength$::tempora
6f80: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
6f90: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
6fa0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6fb0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
6fc0: 6f 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  on of the tempor
6fd0: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
6fe0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
6ff0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
7000: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
7010: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
7020: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
7030: 6e 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64  n $::temporary_d 7040: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 7050: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 7060: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 exists ::scratch 7070: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 7080: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 7090: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 ing length$::sc
70a0: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
70b0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
70c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
70d0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
70e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72  ation of the scr
70f0: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68  atch directory h
7100: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
7110: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
7120: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
7130: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
7140: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
7150: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69  rn $::scratch_di 7160: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 7170: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 7180: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 return [getTemp 7190: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 oraryPath].. 71a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 71b0: 20 20 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 proc getExecu 71c0: 74 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a teOnSetup {} {.. 71d0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 71e0: 65 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 exists ::execute 71f0: 5f 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d _on_setup] && \. 7200: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 7210: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 ng length$::exe
7220: 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e  cute_on_setup] >
7230: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7240: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7250: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
7260: 65 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c  e configured SQL
7270: 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69   to execute duri
7280: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
7290: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
72a0: 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75     setup procedu
72b0: 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65  re (i.e. for eve
72c0: 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65  ry test database
72d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20   connection)...
72e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
72f0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63    return $::exec 7300: 75 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 ute_on_setup.. 7310: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 7320: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7330: 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 # NOTE: By defa 7340: 75 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f ult, there is no 7350: 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 SQL to execute 7360: 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 during the conne 7370: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 ction.. # 7380: 20 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f setup pro 7390: 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 cedure (i.e. for 73a0: 20 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61 every test data 73b0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 base connection) 73c0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 73d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 73e0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 73f0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 7400: 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 TestOverridesPre 7410: 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 amble { {extraVa 7420: 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a rNames ""} } {.. 7430: 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d set varNam 7440: 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 es [list].... 7450: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7460: 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 TE: If available 7470: 2c 20 73 74 61 72 74 20 77 69 74 68 20 74 68 65 , start with the 7480: 20 6d 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 master list of 7490: 74 65 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 test override.. 74a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 74b0: 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 iables... # 74c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 74d0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 74e0: 6f 76 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d overrides] && \. 74f0: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e . [llen 7500: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 gth$::test_over
7510: 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e  rides] > 0} then
7520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c   {..        eval
7530: 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65   lappend varName
7540: 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69  s $::test_overri 7550: 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a des.. }.... 7560: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 7570: 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 NOTE: If reques 7580: 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ted by our calle 7590: 72 2c 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 r, add any addit 75a0: 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a ional variable.. 75b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 75c0: 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e mes to copy now. 75d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 75e0: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 if {[llength$e
75f0: 78 74 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20  xtraVarNames] >
7600: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
7610: 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
7620: 76 61 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56  varNames $extraV 7630: 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d arNames.. } 7640: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 7650: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 7660: 20 74 68 65 20 73 63 72 69 70 74 20 66 72 61 67 the script frag 7670: 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 ment to be retur 7680: 6e 65 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e ned by processin 7690: 67 20 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 g each.. # 76a0: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e variable n 76b0: 61 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 ame and adding t 76c0: 68 65 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 he nececessary s 76d0: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 cript fragments 76e0: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 for.. # 76f0: 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 each one... 7700: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 7710: 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 result "".... 7720: 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e foreach varN 7730: 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d ame$varNames {.
7740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
7750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
7760: 64 20 74 68 65 20 71 75 61 6c 69 66 69 65 64 20  d the qualified
7770: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable
7780: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
7790: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 75  ..        set fu
77a0: 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e  llVarName [appen
77b0: 64 41 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d  dArgs :: $varNam 77c0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d e].... #. 77d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 77e0: 20 44 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 Does the variab 77f0: 6c 65 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 le exist in this 7800: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e interpreter con 7810: 74 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 text?.. # 7820: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 7830: 6e 66 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c nfo exists$full
7840: 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  VarName]} then {
7850: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
7860: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
7870: 20 41 70 70 65 6e 64 20 61 20 73 63 72 69 70 74   Append a script
7880: 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65   fragment to the
7890: 20 72 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c   result that wil
78a0: 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20  l correctly..
78b0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
78c0: 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65  opy any containe
78d0: 64 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68  d value to anoth
78e0: 65 72 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  er interpreter c
78f0: 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20  ontext...
7900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
7910: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e  append result \n
7920: 20 22 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72   "set " $fullVar 7930: 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 Name " \{" [set 7940: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d$fullVarName] \}
7950: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
7960: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
7970: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
7980: 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  f the result con
7990: 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
79a0: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  e script fragmen
79b0: 74 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20  ts, append a..
79c0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c      #       newl
79d0: 69 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ine...      #..
79e0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
79f0: 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d   length $result] 7a00: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 7a10: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 append res 7a20: 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d ult \n.. }. 7a30: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 7a40: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
7a50: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41  ...    proc getA
7a60: 70 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65  ppDomainPreamble
7a70: 20 7b 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b   { {prefix ""} {
7a80: 73 75 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a  suffix ""} } {..
7a90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
7aa0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
7ab0: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 61 20  edure returns a
7ac0: 74 65 73 74 20 73 65 74 75 70 20 73 63 72 69 70  test setup scrip
7ad0: 74 20 66 72 61 67 6d 65 6e 74 20 73 75 69 74 61  t fragment suita
7ae0: 62 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23  ble for..      #
7af0: 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 69 6f         evaluatio
7b00: 6e 20 62 79 20 61 6e 20 69 6e 74 65 72 70 72 65  n by an interpre
7b10: 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 61  ter created in a
7b20: 6e 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69  n isolated appli
7b30: 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  cation..      #
7b40: 20 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54        domain.  T
7b50: 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65  he script fragme
7b60: 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65  nt being returne
7b70: 64 20 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75  d will be surrou
7b80: 6e 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23  nded by..      #
7b90: 20 20 20 20 20 20 20 74 68 65 20 70 72 65 66 69         the prefi
7ba0: 78 20 61 6e 64 20 73 75 66 66 69 78 20 22 73 63  x and suffix "sc
7bb0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20  ript fragments"
7bc0: 73 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72  specified by our
7bd0: 20 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20   caller,..
7be0: 23 20 20 20 20 20 20 20 69 66 20 61 6e 79 2e 20  #       if any.
7bf0: 20 54 68 65 20 65 6e 74 69 72 65 20 73 63 72 69   The entire scri
7c00: 70 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65  pt being returne
7c10: 64 20 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69  d will be substi
7c20: 74 75 74 65 64 20 76 69 61 0d 0a 20 20 20 20 20  tuted via..
7c30: 20 23 20 20 20 20 20 20 20 5b 73 75 62 73 74 5d   #       [subst]
7c40: 2c 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  , in the context
7c50: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20   of our caller,
7c60: 62 65 66 6f 72 65 20 62 65 69 6e 67 20 72 65 74  before being ret
7c70: 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 23 20  urned...      #
7c80: 20 20 20 20 20 20 54 68 69 73 20 73 74 65 70 20        This step
7c90: 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20  is necessary so
7ca0: 74 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65  that some limite
7cb0: 64 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d  d context inform
7cc0: 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20  ation,..      #
7cd0: 20 20 20 20 20 20 70 72 69 6d 61 72 69 6c 79 20        primarily
7ce0: 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 74  related to the t
7cf0: 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69  esting directori
7d00: 65 73 2c 20 63 61 6e 20 62 65 20 74 72 61 6e 73  es, can be trans
7d10: 66 65 72 72 65 64 0d 0a 20 20 20 20 20 20 23 20  ferred..      #
7d20: 20 20 20 20 20 20 74 6f 20 74 68 65 20 69 6e 74        to the int
7d30: 65 72 70 72 65 74 65 72 20 69 6e 20 74 68 65 20  erpreter in the
7d40: 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61  isolated applica
7d50: 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b  tion domain, mak
7d60: 69 6e 67 20 69 74 0d 0a 20 20 20 20 20 20 23 20  ing it..      #
7d70: 20 20 20 20 20 20 61 62 6c 65 20 74 6f 20 73 75        able to su
7d80: 63 63 65 73 73 66 75 6c 6c 79 20 72 75 6e 20 74  ccessfully run t
7d90: 65 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72  ests that requir
7da0: 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  e one or more of
7db0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
7dc0: 20 20 20 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65      files in one
7dd0: 20 6f 66 20 74 68 65 20 74 65 73 74 69 6e 67 20   of the testing
7de0: 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 43 61  directories.  Ca
7df0: 6c 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b 65 65  llers should kee
7e00: 70 20 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  p in..      #
7e10: 20 20 20 20 6d 69 6e 64 20 74 68 61 74 20 74 68      mind that th
7e20: 65 20 74 65 73 74 20 73 63 72 69 70 74 20 66 72  e test script fr
7e30: 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74  agment being ret
7e40: 75 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c  urned cannot rel
7e50: 79 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  y on..      #
7e60: 20 20 20 20 61 6e 79 20 73 63 72 69 70 74 20 6c      any script l
7e70: 69 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65  ibrary procedure
7e80: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70  s that are not p
7e90: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 45  rovided by the E
7ea0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20  agle..      #
7eb0: 20 20 20 20 6c 69 62 72 61 72 79 20 70 61 63 6b      library pack
7ec0: 61 67 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e  age (i.e. "init.
7ed0: 65 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69  eagle"), includi
7ee0: 6e 67 20 74 68 6f 73 65 20 70 72 6f 76 69 64 65  ng those provide
7ef0: 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20  d by..      #
7f00: 20 20 20 20 74 68 65 20 45 61 67 6c 65 20 74 65      the Eagle te
7f10: 73 74 20 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65  st package, unle
7f20: 73 73 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74  ss the file cont
7f30: 61 69 6e 69 6e 67 20 74 68 65 6d 20 69 73 20 6c  aining them is l
7f40: 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20  oaded..      #
7f50: 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69       manually vi
7f60: 61 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63  a some other mec
7f70: 68 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62 79 20  hanism (e.g. by
7f80: 69 6e 63 6c 75 64 69 6e 67 20 61 70 70 72 6f 70  including approp
7f90: 72 69 61 74 65 0d 0a 20 20 20 20 20 20 23 20 20  riate..      #
7fa0: 20 20 20 20 20 5b 70 61 63 6b 61 67 65 20 72 65       [package re
7fb0: 71 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63  quire] or [sourc
7fc0: 65 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74  e] commands in t
7fd0: 68 65 20 70 72 65 66 69 78 20 6f 72 20 73 75 66  he prefix or suf
7fe0: 66 69 78 0d 0a 20 20 20 20 20 20 23 20 20 20 20  fix..      #
7ff0: 20 20 20 73 63 72 69 70 74 20 66 72 61 67 6d 65     script fragme
8000: 6e 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c  nts).  Also, all
8010: 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
8020: 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73  nces and all nes
8030: 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ted..      #
8040: 20 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65     commands (i.e
8050: 2e 20 74 68 6f 73 65 20 69 6e 20 73 71 75 61 72  . those in squar
8060: 65 20 62 72 61 63 6b 65 74 73 29 20 63 6f 6e 74  e brackets) cont
8070: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6e  ained in the fin
8080: 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  al..      #
8090: 20 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e    script fragmen
80a0: 74 20 77 69 6c 6c 20 65 6e 64 20 75 70 20 62 65  t will end up be
80b0: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e  ing evaluated in
80c0: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
80d0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
80e0: 20 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72     calling inter
80f0: 70 72 65 74 65 72 20 61 6e 64 20 6e 6f 74 20 74  preter and not t
8100: 68 65 20 74 61 72 67 65 74 20 69 6e 74 65 72 70  he target interp
8110: 72 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e  reter created in
8120: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
8130: 20 20 20 20 69 73 6f 6c 61 74 65 64 20 61 70 70      isolated app
8140: 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20  lication domain
8150: 75 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c 6c 61  unless the dolla
8160: 72 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73  r signs and/or s
8170: 71 75 61 72 65 0d 0a 20 20 20 20 20 20 23 20 20  quare..      #
8180: 20 20 20 20 20 62 72 61 63 6b 65 74 73 20 61 72       brackets ar
8190: 65 20 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74  e specially quot
81a0: 65 64 20 77 69 74 68 20 62 61 63 6b 73 6c 61 73  ed with backslas
81b0: 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  hes...      #..
81c0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c       return [upl
81d0: 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62  evel 1 [list sub
81e0: 73 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  st [appendArgs $81f0: 70 72 65 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 prefix {.. 8200: 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d if {[hasRuntim 8210: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d eOption native]} 8220: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8230: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 8240: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 8250: 41 63 74 69 76 65 20 41 64 64 52 75 6e 74 69 6d Active AddRuntim 8260: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a eOption native.. 8270: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 8280: 20 7d 20 5b 67 65 74 54 65 73 74 4f 76 65 72 72 } [getTestOverr 8290: 69 64 65 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 idesPreamble [li 82a0: 73 74 20 70 61 74 68 20 74 65 73 74 5f 63 68 61 st path test_cha 82b0: 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d nnel]]$suffix]]
82c0: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
82d0: 20 70 72 6f 63 20 74 72 79 43 6f 70 79 45 78 74   proc tryCopyExt
82e0: 65 72 6e 61 6c 46 69 6c 65 20 7b 0d 0a 20 20 20  ernalFile {..
82f0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
8300: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
8310: 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d  {newFileName ""}
8320: 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d   {verbose false}
8330: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
8340: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b  sourceFileName [
8350: 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e  getExternalFileN
8360: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ame $fileName].. 8370: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi 8380: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 le exists$sourc
8390: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  eFileName]} then
83a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
83b0: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b  $verbose} then { 83c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 83d0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
83e0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
83f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
8400: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70  ---- skipped cop
8410: 79 69 6e 67 20 65 78 74 65 72 6e 61 6c 20 66 69  ying external fi
8420: 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  le \"" $sourceFi 8430: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. 8440: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 "\", it 8450: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n 8460: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 "].. }.. 8470: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 return.. 8480: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 8490: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 84a0: 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d th$newFileName]
84b0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
84c0: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
84d0: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e  FileName [getBin
84e0: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77  aryFileName $new 84f0: 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f FileName$platfo
8500: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  rm]..      } els
8510: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
8520: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20   targetFileName
8530: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
8540: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  me $fileName$pl
8550: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
8560: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61  ....      set ta
8570: 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66  rgetDirectory [f
8580: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72  ile dirname $tar 8590: 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a getFileName].... 85a0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 85b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 85c0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 ![file exists$t
85d0: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d  argetDirectory]}
85e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
85f0: 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74     file mkdir $t 8600: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a argetDirectory.. 8610: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 8620: 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f file copy -fo 8630: 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e rce$sourceFileN
8640: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN 8650: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d ame.. }] == 8660: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 8670: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
8680: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
8690: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
86a0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65       "---- copie
86b0: 64 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20  d external file
86c0: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source 86d0: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 FileName "\" to 86e0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 86f0: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61$targetFileNa
8700: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
8710: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
8720: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 8730: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 8740: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 8750: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 "---- failed 8760: 74 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c to copy external 8770: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
8780: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
8790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
87a0: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target 87b0: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 87c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 87d0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 ... proc tryC 87e0: 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d opyBinaryFile {. 87f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c . fil 8800: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform 8810: 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 ""} {newFileName 8820: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 ""} {verbose fa 8830: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 8840: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 set sourceFileNa 8850: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil 8860: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
8870: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20  $platform].... 8880: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 8890: 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c xists$sourceFil
88a0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
88b0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver 88c0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. 88d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
88e0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
88f0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
8900: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
8910: 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67   skipped copying
8920: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22   binary file \""
8930: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 8940: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8950: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n 8960: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. 8970: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 8980: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } 8990: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s 89a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 tring length$ne
89b0: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  wFileName] > 0}
89c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
89d0: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61  set targetFileNa
89e0: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  me [getBuildFile
89f0: 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d  Name $newFileNam 8a00: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 e$platform]..
8a10: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
8a20: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
8a30: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69  FileName [getBui
8a40: 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ldFileName $file 8a50: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
8a60: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
8a70: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65    set targetDire
8a80: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e  ctory [file dirn
8a90: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN 8aa0: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if 8ab0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 8ac0: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 8ad0: 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 xists$targetDir
8ae0: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
8af0: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
8b00: 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72  mkdir $targetDir 8b10: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. 8b20: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 }.. file 8b30: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 copy -force$sou
8b40: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72  rceFileName $tar 8b50: 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 getFileName.. 8b60: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e }] == 0} then 8b70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 8b80: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
8b90: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
8ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
8bb0: 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 72 79  -- copied binary
8bc0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $8bd0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 sourceFileName " 8be0: 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 \" to \"" \.. 8bf0: 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74$target
8c00: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
8c10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
8c20: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 8c30: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 8c40: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 8c50: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 8c60: 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 69 ailed to copy bi 8c70: 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c nary file from \ 8c80: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
8c90: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
8ca0: 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61    "\" to \"" $ta 8cb0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c rgetFileName \"\ 8cc0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 8cd0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 8ce0: 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 tryCopyBuildFile 8cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 8d00: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f fileName {platfo 8d10: 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e rm ""} {newFileN 8d20: 61 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 ame ""} {verbose 8d30: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 8d40: 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c set sourceFil 8d50: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 eName [getBuildF 8d60: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
8d70: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a  e $platform].... 8d80: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 if {![file 8d90: 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 exists$sourceF
8da0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
8db0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76  ..        if {$v 8dc0: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a erbose} then {.. 8dd0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 8de0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
8df0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
8e10: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69  -- skipped copyi
8e20: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  ng build file \"
8e30: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 8e40: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 8e50: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does 8e60: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. 8e70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 8e80: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. 8e90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 8ea0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
8eb0: 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d  ewFileName] > 0}
8ec0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8ed0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
8ee0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
8ef0: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e  leName $newFileN 8f00: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
8f10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
8f20: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
8f30: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
8f40: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 8f50: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
8f60: 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  m]..      }....
8f70: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44       set targetD
8f80: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
8f90: 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69  irname $targetFi 8fa0: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 8fb0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 8fc0: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c if {![fil 8fd0: 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 e exists$target
8fe0: 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  Directory]} then
8ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   {..          fi
9000: 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74  le mkdir $target 9010: 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. 9020: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 }.. fi 9030: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
9040: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $9050: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. 9060: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t 9070: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 9080: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
9090: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
90a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
90b0: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 75 69  "---- copied bui
90c0: 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  ld file from \""
90d0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 90e0: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 "\" to \"" \.. 90f0: 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67$targ
9100: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
9110: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
9120: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
9130: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 9140: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 9150: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 9160: 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 failed to copy 9170: 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 build file from 9180: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
9190: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
91a0: 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74     "\" to \"" $t 91b0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 argetFileName \" 91c0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 91d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 91e0: 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 tryDeleteBinary 91f0: 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 File { fileName 9200: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 {platform ""} {v 9210: 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 erbose false} } 9220: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c {.. set fil 9230: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary 9240: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
9250: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d  me $platform]... 9260: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil 9270: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
9280: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
9290: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 92a0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 92b0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
92c0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
92d0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
92e0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
92f0: 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62  ipped deleting b
9300: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $9310: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. 9320: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i 9330: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 9340: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. 9350: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. 9360: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 9370: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi 9380: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e le delete$fileN
9390: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
93a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
93b0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 93c0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 93d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 93e0: 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e 61 72 -- deleted binar 93f0: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 y file \""$file
9400: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
9410: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
9420: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 9430: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 9440: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 9450: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 "---- faile 9460: 64 20 74 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 d to delete bina 9470: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ry file \""$fil
9480: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
9490: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
94a0: 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65      proc tryDele
94b0: 74 65 42 75 69 6c 64 46 69 6c 65 20 7b 20 66 69  teBuildFile { fi
94c0: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d  leName {platform
94d0: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61   ""} {verbose fa
94e0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
94f0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65  set fileName [ge
9500: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $9510: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
9520: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
9530: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $9540: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 9550: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 {.. if {$
9560: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
9570: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
9580: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 9590: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 95b0: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 --- skipped dele 95c0: 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 ting build file 95d0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d \""$fileName \.
95e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
95f0: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
9600: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
9610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
9620: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  turn..      }...
9630: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
9640: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $9650: 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d fileName}] == 0} 9660: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9670: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
9680: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
9690: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
96a0: 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20    "---- deleted
96b0: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $96c0: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a fileName \"\n].. 96d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 96e0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
96f0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
9700: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
9710: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
9720: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
9730: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $9740: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a fileName \"\n].. 9750: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 9760: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 ... proc tryC 9770: 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 opyAssembly {.. 9780: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN 9790: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" 97a0: 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 } {pdb true} {ve 97b0: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b rbose false} } { 97c0: 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 .. tryCopyB 97d0: 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 uildFile$fileNa
97e0: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20  me $platform "" 97f0: 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20$verbose....
9800: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e    if {$pdb} then 9810: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 43 {.. tryC 9820: 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 opyBuildFile [ap 9830: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 9840: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f [file ro 9850: 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 otname$fileName
9860: 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72  ] .pdb] $platfor 9870: 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 m ""$verbose..
9880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
9890: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65  ..    proc tryDe
98a0: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a  leteAssembly {..
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
98c0: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
98d0: 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76  "} {pdb true} {v
98e0: 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20  erbose false} }
98f0: 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65  {..      tryDele
9900: 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69  teBinaryFile $fi 9910: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
9920: 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20   $verbose.... 9930: 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 if {$pdb} the
9940: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79  n {..        try
9950: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
9960: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
9970: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
9980: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65  e rootname $file 9990: 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 Name] .pdb]$pla
99a0: 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a  tform $verbose.. 99b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 99c0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 4c ... proc tryL 99d0: 6f 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 oadAssembly { fi 99e0: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d leName {platform 99f0: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 9a00: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 set fileName [ge 9a10: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 9a20: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66$fileName $platf 9a30: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 orm].... if 9a40: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 9a50: 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 79 set assembly 9a60: 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c [object load -l 9a70: 6f 61 64 74 79 70 65 20 46 69 6c 65 20 2d 61 6c oadtype File -al 9a80: 69 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a ias$fileName]..
9a90: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74        }] == 0} t
9aa0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
9ab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
9ac0: 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e  : Now, add the n
9ad0: 65 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f  ecessary test co
9ae0: 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20  nstraint...
9af0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
9b00: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c  dConstraint [fil
9b10: 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65  e rootname [file
9b20: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName] 9b30: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 9b40: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9b50: 47 72 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 Grab the image r 9b60: 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 untime version f 9b70: 72 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 rom the assembly 9b80: 20 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 because.. 9b90: 20 20 23 20 20 20 20 20 20 20 73 65 76 65 72 61 # severa 9ba0: 6c 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 l tests rely on 9bb0: 69 74 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 it having a cert 9bc0: 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 ain value... 9bd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 #.. a 9be0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 9bf0: 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 pendArgs [file t 9c00: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f ail$fileName] _
9c10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9c20: 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65  [$assembly Image 9c30: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d RuntimeVersion]] 9c40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 9c50: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 9c60: 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 eturn the full p 9c70: 61 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 ath of the loade 9c80: 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 d file... 9c90: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 9ca0: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 rn$fileName..
9cb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
9cc0: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d  eturn ""..    }.
9cd0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53  ....    proc isS
9ce0: 51 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d  QLiteReady {} {.
9cf0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9d00: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
9d10: 63 65 64 75 72 65 20 6d 75 73 74 20 72 65 74 75  cedure must retu
9d20: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79  rn non-zero only
9d30: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e   if the SQLite n
9d40: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20  ative..      #
9d50: 20 20 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64       library and
9d60: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
9d70: 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20  .SQLite managed
9d80: 61 73 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61  assembly are loa
9d90: 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ded..      #
9da0: 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72     and ready for
9db0: 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
9dc0: 20 73 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74   suite.  Current
9dd0: 6c 79 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75  ly, this procedu
9de0: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  re..      #
9df0: 20 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c    should be call
9e00: 65 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68  ed only after th
9e10: 65 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62  e [tryLoadAssemb
9e20: 6c 79 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61  ly] procedure ha
9e30: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
9e40: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20   been called to
9e50: 70 72 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79  probe for the Sy
9e60: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
9e70: 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
9e80: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
9e90: 20 61 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46   and the [checkF
9ea0: 6f 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64  orSQLite] proced
9eb0: 75 72 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c  ure has been cal
9ec0: 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72  led to probe for
9ed0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
9ee0: 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76  the SQLite nativ
9ef0: 65 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72  e library; other
9f00: 77 69 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65  wise, this proce
9f10: 64 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79  dure will simply
9f20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
9f30: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65  always return ze
9f40: 72 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ro...      #..
9f50: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
9f60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68 61 76   {..        [hav
9f70: 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74  eConstraint Syst
9f80: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5d 20  em.Data.SQLite]
9f90: 26 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  && [haveConstrai
9fa0: 6e 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20  nt SQLite]..
9fb0: 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a    }]..    }.....
9fc0: 20 20 20 20 70 72 6f 63 20 6d 61 74 63 68 4d 61      proc matchMa
9fd0: 63 68 69 6e 65 20 7b 20 70 6c 61 74 66 6f 72 6d  chine { platform
9fe0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
9ff0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20       # NOTE: An
a000: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72  empty string for
a010: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65   the platform me
a020: 61 6e 73 20 74 68 61 74 20 74 68 65 20 62 75 69  ans that the bui
a030: 6c 64 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  ld is not..
a040: 20 23 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72   #       [primar
a050: 69 6c 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75  ily] a native bu
a060: 69 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ild; therefore,
a070: 69 74 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65  it always matche
a080: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
a090: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
a0a0: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] a0b0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. a0c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr a0d0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... a0e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # a0f0: 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 NOTE: Does the s a100: 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 pecified platfor a110: 6d 20 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 m match up to th a120: 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 e current proces a130: 73 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s?.. #.. a140: 20 20 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d if {$platform
a150: 20 65 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c   eq [machineToPl
a160: 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c  atform $::tcl_pl a170: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d atform(machine)] a180: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. a190: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. a1a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... a1b0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: a1c0: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 The specified p a1d0: 6c 61 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 latform does not a1e0: 20 6d 61 74 63 68 20 75 70 20 77 69 74 68 20 74 match up with t a1f0: 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 he platform.. a200: 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 # for t a210: 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce a220: 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ss... #.. a230: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false a240: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... a250: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL a260: 69 74 65 42 75 69 6c 64 73 20 7b 20 63 68 61 6e iteBuilds { chan a270: 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 nel {select fals a280: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. a290: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C a2a0: 68 65 63 6b 20 66 6f 72 20 65 76 65 72 79 20 70 heck for every p a2b0: 6f 73 73 69 62 6c 65 20 76 61 6c 69 64 20 63 6f ossible valid co a2c0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c mbination of val a2d0: 75 65 73 20 75 73 65 64 20 77 68 65 6e 0d 0a 20 ues used when.. a2e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 # loc a2f0: 61 74 69 6e 67 20 6f 75 74 20 74 68 65 20 62 75 ating out the bu a300: 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 ild output direc a310: 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67 20 65 61 tory, showing ea a320: 63 68 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 ch available.. a330: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil a340: 64 20 76 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e d variation alon a350: 67 20 74 68 65 20 77 61 79 2e 0d 0a 20 20 20 20 g the way... a360: 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 #.. forea a370: 63 68 20 6e 61 74 69 76 65 20 5b 6c 69 73 74 20 ch native [list a380: 66 61 6c 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20 false true] {.. a390: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 79 foreach y a3a0: 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 ear [getBuildYea a3b0: 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 rs] {.. a3c0: 20 66 6f 72 65 61 63 68 20 63 6f 6e 66 69 67 75 foreach configu a3d0: 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 ration [getBuild a3e0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 Configurations] a3f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # a400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # a410: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 NOTE: Figure out a420: 20 74 68 65 20 65 66 66 65 63 74 69 76 65 20 62 the effective b a430: 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20 uild platform. a440: 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 This is.. a450: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 61 73 # bas a460: 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 ed on whether or a470: 20 6e 6f 74 20 61 20 5b 70 72 69 6d 61 72 69 6c not a [primaril a480: 79 5d 20 6e 61 74 69 76 65 20 62 75 69 6c 64 0d y] native build. a490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # a4a0: 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 75 73 is being us a4b0: 65 64 2e 20 20 46 6f 72 20 5b 70 72 69 6d 61 72 ed. For [primar a4c0: 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 ily] non-native a4d0: 62 75 69 6c 64 73 2c 0d 0a 20 20 20 20 20 20 20 builds,.. a4e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 # thi a4f0: 73 20 77 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70 s will be an emp a500: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 ty string... a510: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a520: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf a530: 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 orm [getBuildPla a540: 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a tform$native]..
a550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
a560: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap a570: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. a580: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a590: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S a5a0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a5b0: 65 20 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 e build \"" [exp a5c0: 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 r \.. a5d0: 20 20 20 20 20 7b 24 6e 61 74 69 76 65 20 3f 20 {$native ?
a5e0: 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d  "native/" : ""}]
a5f0: 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20   [expr {[string
a600: 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20 20 20 20  length \..
a610: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66            $platf a620: 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 orm] > 0 ? [appe a630: 6e 64 41 72 67 73 20 24 70 6c 61 74 66 6f 72 6d ndArgs$platform
a640: 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72   /] : ""}] $year a650: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a660: 20 20 20 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 /$configura
a670: 74 69 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a  tion "\"... "]..
a680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
a690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
a6a0: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66  OTE: Build the f
a6b0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64  ully qualified d
a6c0: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
a6d0: 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20  he necessary..
a6e0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
a6f0: 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72    components for
a700: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
a710: 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f  ite should be fo
a720: 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  und...
a730: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
a740: 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b   set directory [
a750: 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f  joinBuildDirecto
a760: 72 79 20 24 6e 61 74 69 76 65 20 5c 0d 0a 20 20  ry $native \.. a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g a780: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 etBuildBaseDirec a790: 74 6f 72 79 5d 20 24 79 65 61 72 20 24 70 6c 61 tory]$year $pla a7a0: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 tform$configura
a7b0: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  tion]....
a7c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a7d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 20 74      # NOTE: Do t
a7e0: 68 65 20 6e 65 63 65 73 73 61 72 79 20 66 69 6c  he necessary fil
a7f0: 65 73 20 65 78 69 73 74 3f 20 20 43 75 72 72 65  es exist?  Curre
a800: 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 72 20 73  ntly, no other s
a810: 74 65 70 73 0d 0a 20 20 20 20 20 20 20 20 20 20  teps..
a820: 20 20 23 20 20 20 20 20 20 20 61 72 65 20 74 61    #       are ta
a830: 6b 65 6e 20 74 6f 20 76 65 72 69 66 79 20 74 68  ken to verify th
a840: 69 73 20 62 75 69 6c 64 20 69 73 20 61 63 74 75  is build is actu
a850: 61 6c 6c 79 20 76 69 61 62 6c 65 2e 0d 0a 20 20  ally viable...
a860: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
a870: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73           if {[is
a880: 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 24  BuildAvailable $a890: 6e 61 74 69 76 65 20 24 64 69 72 65 63 74 6f 72 native$director
a8a0: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
a8b0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
a8c0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
a8d0: 45 3a 20 57 68 65 6e 20 69 6e 20 22 73 65 6c 65  E: When in "sele
a8e0: 63 74 22 20 6d 6f 64 65 2c 20 61 75 74 6f 6d 61  ct" mode, automa
a8f0: 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74  tically select t
a900: 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20  he first..
a910: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
a920: 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 20  available build
a930: 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  of System.Data.S
a940: 51 4c 69 74 65 20 61 6e 64 20 74 68 65 6e 20 72  QLite and then r
a950: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 20  eturn..
a960: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6d 6d       #       imm
a970: 65 64 69 61 74 65 6c 79 2e 0d 0a 20 20 20 20 20  ediately...
a980: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
a990: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73            if {$s a9a0: 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 4d elect && [matchM a9b0: 61 63 68 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d achine$platform
a9c0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
a9d0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
a9f0: 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f  NOTE: Manually o
aa00: 76 65 72 72 69 64 65 20 61 6c 6c 20 74 68 65 20  verride all the
aa10: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20  build directory
aa20: 73 65 6c 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20  selection..
aa30: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
aa40: 20 20 20 72 65 6c 61 74 65 64 20 74 65 73 74 20     related test
aa50: 73 65 74 74 69 6e 67 73 20 69 6e 20 6f 72 64 65  settings in orde
aa60: 72 20 74 6f 20 66 6f 72 63 65 20 74 68 69 73 20  r to force this
aa70: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20  build..
aa80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
aa90: 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  f System.Data.SQ
aaa0: 4c 69 74 65 20 74 6f 20 62 65 20 75 73 65 64 2e  Lite to be used.
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
aac0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
aad0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
aae0: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
aaf0: 65 74 41 63 74 69 76 65 20 5b 65 78 70 72 20 7b  etActive [expr {
ab00: 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20  $native ? \.. ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ab20: 20 22 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 "AddRuntimeOpti ab30: 6f 6e 22 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e on" : "RemoveRun ab40: 74 69 6d 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 timeOption"}] na ab50: 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tive.... ab60: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 set ::te ab70: 73 74 5f 79 65 61 72 20 24 79 65 61 72 0d 0a 20 st_year$year..
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ab90: 65 74 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f  et ::test_platfo
aba0: 72 6d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  rm $platform.. abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se abc0: 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 t ::test_configu abd0: 72 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72 ration$configur
abe0: 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  ation....
abf0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $ac00: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA ac10: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. ac20: 20 20 20 20 20 20 20 20 20 20 20 22 79 65 73 2c "yes, ac30: 20 73 65 6c 65 63 74 65 64 20 28 22 20 5b 65 78 selected (" [ex ac40: 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e pr {$native ? "n
ac50: 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5c  ative/" : ""}] \
ac60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ac70: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 73 74        [expr {[st
ac80: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61  ring length $pla ac90: 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 tform] > 0 ? [ap aca0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 acc0: 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22$platform /] : "
acd0: 22 7d 5d 20 24 79 65 61 72 20 2f 20 24 63 6f 6e  "}] $year /$con
ace0: 66 69 67 75 72 61 74 69 6f 6e 20 22 29 5c 6e 22  figuration ")\n"
acf0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
ad00: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
ad10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ad20: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
ad30: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
ad40: 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. ad60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e ad70: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. ad80: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
ad90: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20  nel no\n..
ada0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
adb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
adc0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
add0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
ade0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
adf0: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
ae00: 65 52 65 6c 65 61 73 65 73 20 7b 20 63 68 61 6e  eReleases { chan
ae10: 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73  nel {select fals
ae20: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
ae30: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
ae40: 68 65 63 6b 20 66 6f 72 20 70 61 73 74 20 72 65  heck for past re
ae50: 6c 65 61 73 65 73 20 6f 66 20 53 79 73 74 65 6d  leases of System
ae60: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 69 6e 20  .Data.SQLite in
ae70: 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  the directory..
ae80: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
ae90: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 22 53  tained in the "S
aea0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
aeb0: 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  e" environment v
aec0: 61 72 69 61 62 6c 65 2c 20 69 66 0d 0a 20 20 20  ariable, if..
aed0: 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65     #       prese
aee0: 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  nt...      #..
aef0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
af00: 69 73 74 73 20 3a 3a 65 6e 76 28 53 79 73 74 65  ists ::env(Syste
af10: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20  m.Data.SQLite)]
af20: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
af30: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $af40: 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 ::env(System.Dat af50: 61 2e 53 51 4c 69 74 65 29 5d 20 3e 20 30 7d 20 a.SQLite)] > 0} af60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. af70: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT af80: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c E: Build the ful af90: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 ly qualified dir afa0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 ectory where the afb0: 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 necessary.. afc0: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 # comp afd0: 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 onents for Syste afe0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 m.Data.SQLite sh aff0: 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a ould be found... b000: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. b010: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 set directory b020: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam b030: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. b040: 20 20 20 20 20 20 20 20 20 20 20 20 24 3a 3a 65$::e
b050: 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nv(System.Data.S
b060: 51 4c 69 74 65 29 20 5b 67 65 74 52 65 6c 65 61  QLite) [getRelea
b070: 73 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a  seVersion]]]....
b080: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c b090: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr b0a0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. b0b0: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking b0c0: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data b0d0: 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 .SQLite release b0e0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. b0f0: 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c$directory "\
b100: 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20  "... "]....
b110: 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73     if {[isReleas
b120: 65 41 76 61 69 6c 61 62 6c 65 20 24 64 69 72 65  eAvailable $dire b130: 63 74 6f 72 79 20 70 6c 61 74 66 6f 72 6d 5d 7d ctory platform]} b140: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b150: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l b160: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
b170: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
b180: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
b190: 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d  latform unknown.
b1a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
b1b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73            if {$s b1c0: 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 4d elect && [matchM b1d0: 61 63 68 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d achine$platform
b1e0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
b1f0: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69         set ::bui
b200: 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24 64 69  ld_directory $di b210: 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 rectory.... b220: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
b230: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
b240: 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64  s "yes, selected
b250: 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29   (" $platform ") b260: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... b270: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. b280: 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els b290: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. b2a0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
b2b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
b2c0: 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29   (" $platform ") b2d0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. b2e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els b2f0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 e {.. t b300: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
b310: 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  \n....
b320: 66 6f 72 65 61 63 68 20 70 61 74 68 20 5b 6c 73  foreach path [ls
b330: 6f 72 74 20 2d 64 65 63 72 65 61 73 69 6e 67 20  ort -decreasing
b340: 5b 66 69 6c 65 20 6c 69 73 74 20 24 64 69 72 65  [file list $dire b350: 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 ctory *]] {.. b360: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 if {[fi b370: 6c 65 20 65 78 69 73 74 73 20 24 70 61 74 68 5d le exists$path]
b380: 20 26 26 20 5b 66 69 6c 65 20 69 73 64 69 72 65   && [file isdire
b390: 63 74 6f 72 79 20 24 70 61 74 68 5d 7d 20 74 68  ctory $path]} th b3a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. b3b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
b3c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
b3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
b3e0: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
b3f0: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ng for System.Da
b400: 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73  ta.SQLite releas
b410: 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
b420: 20 20 20 20 20 20 20 20 20 20 20 24 70 61 74 68             $path b430: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 "\"... "].... b440: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { b450: 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 [isReleaseAvaila b460: 62 6c 65 20 24 70 61 74 68 20 70 6c 61 74 66 6f ble$path platfo
b470: 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  rm]} then {..
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
b490: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
b4a0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d  $platform] == 0} b4b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b4c0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p b4d0: 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d latform unknown. b4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b4f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... b500: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 if {$selec
b510: 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69  t && [matchMachi
b520: 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74  ne $platform]} t b530: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. b540: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62 set ::b b550: 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24 uild_directory$
b560: 70 61 74 68 0d 0a 0d 0a 20 20 20 20 20 20 20 20  path....
b570: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
b580: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append b590: 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63 Args "yes, selec b5a0: 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d ted ("$platform
b5b0: 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20   ")\n"]....
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b5d0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
b5e0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
b5f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
b600: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha b610: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs b620: 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f "yes ("$platfo
b630: 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20  rm ")\n"]..
b640: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
b650: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
b660: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
b670: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha b680: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 nnel no\n.. b690: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. b6a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. b6b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. b6c0: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else b6d0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs b6e0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
b6f0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
b700: 20 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 72       "---- envir
b710: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable
b720: 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \"System.Data.SQ
b730: 4c 69 74 65 5c 22 20 69 73 20 6e 6f 74 20 22 20  Lite\" is not "
b740: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
b750: 73 65 74 2c 20 73 6b 69 70 70 69 6e 67 20 63 68  set, skipping ch
b760: 65 63 6b 20 66 6f 72 20 72 65 6c 65 61 73 65 73  eck for releases
b770: 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d  ...\n"]..      }
b780: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
b790: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
b7a0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
b7b0: 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79  ForSQLiteLibrary
b7c0: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a   { channel } {..
b7d0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha b7e0: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b nnel "---- check b7f0: 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 63 ing for SQLite c b800: 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 ore library... " b810: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c b820: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. b830: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f b840: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic b850: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S b860: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit b870: 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 e.SQLite3 SQLite b880: 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d Version.. } b890: 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 version] == 0} b8a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. b8b0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT b8c0: 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the b8d0: 72 65 74 75 72 6e 65 64 20 76 65 72 73 69 6f 6e returned version b8e0: 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73 was null. If s b8f0: 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 0d o, make it easy. b900: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # b910: 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 to spot... b920: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if b930: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length b940: 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d$version] == 0}
b950: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b960: 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e     set version n
b970: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
b980: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b990: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
b9a0: 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20 74 68  empt to query th
b9b0: 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20  e Fossil source
b9c0: 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74  identifier for t
b9d0: 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  he SQLite..
b9e0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 20     #       core
b9f0: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20  library...
ba00: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
ba10: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
ba20: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
ba30: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
ba40: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
ba50: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
ba60: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33  a.SQLite.SQLite3
ba70: 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d   SQLiteSourceId.
ba80: 0a 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 63  .        } sourc
ba90: 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  eId]} then {..
baa0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
bab0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We
bac0: 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 79 20  failed to query
bad0: 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63  the Fossil sourc
bae0: 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20  e identifier...
baf0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
bb00: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
bb10: 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20  Id unknown..
bb20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
bb30: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
bb40: 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
bb50: 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 69 6c   returned Fossil
bb60: 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69   source identifi
bb70: 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66  er was null.  If
bb80: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
bb90: 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61    so, make it ea
bba0: 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20  sy to spot...
bbb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
bbc0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
bbd0: 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d  th $sourceId] == bbe0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. bbf0: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 set source bc00: 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 Id null.. bc10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. bc20: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: bc30: 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74 65 Yes, the SQLite bc40: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 61 70 core library ap bc50: 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 pears to be avai bc60: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... bc70: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f #.. addCo bc80: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 0d nstraint SQLite. bc90: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs bca0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
bcb0: 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 76  dArgs "yes (" $v bcc0: 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 ersion " "$sour
bcd0: 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20  ceId ")\n"]..
bce0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
bcf0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan bd00: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. bd10: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... bd20: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ bd30: 4c 69 74 65 49 6e 74 65 72 6f 70 20 7b 20 63 68 LiteInterop { ch bd40: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 annel } {.. bd50: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
bd60: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
bd70: 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f  or SQLite intero
bd80: 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d  p assembly... ".
bd90: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
bda0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
bdb0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
bdc0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
bdd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
bde0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
bdf0: 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70  .SQLite3 Interop
be00: 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d  Version..      }
be10: 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20   version] == 0}
be20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
be30: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
be40: 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
be50: 72 65 74 75 72 6e 65 64 20 76 65 72 73 69 6f 6e  returned version
be60: 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73   was null.  If s
be70: 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 0d  o, make it easy.
be80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
be90: 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20   to spot...
bea0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
beb0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
bec0: 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d   $version] == 0} bed0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. bee0: 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e set version n bef0: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ull.. }.. bf00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. bf10: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att bf20: 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20 74 68 empt to query th bf30: 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 e Fossil source bf40: 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 identifier for t bf50: 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 he SQLite.. bf60: 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 20 # core bf70: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 library... bf80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if bf90: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. bfa0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo bfb0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu bfc0: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. bfd0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat bfe0: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 bff0: 20 49 6e 74 65 72 6f 70 53 6f 75 72 63 65 49 64 InteropSourceId c000: 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 .. } sour c010: 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ceId]} then {.. c020: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. c030: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We c040: 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 79 failed to query c050: 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 the Fossil sour c060: 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a ce identifier... c070: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. c080: 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 set sourc c090: 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 eId unknown.. c0a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... c0b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N c0c0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th c0d0: 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 69 e returned Fossi c0e0: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 l source identif c0f0: 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 ier was null. I c100: 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 f.. # c110: 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 so, make it e c120: 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 asy to spot... c130: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. c140: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len c150: 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d gth$sourceId] =
c160: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
c170: 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63         set sourc
c180: 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  eId null..
c190: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
c1a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
c1b0: 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74  : Yes, the SQLit
c1c0: 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
c1d0: 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ly appears to be
c1e0: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
c1f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
c200: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  addConstraint SQ
c210: 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20  LiteInterop....
c220: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch c230: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg c240: 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 s "yes ("$versi
c250: 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64  on " " $sourceId c260: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ")\n"].. } c270: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. c280: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
c290: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  no\n..      }..
c2a0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
c2b0: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
c2c0: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b  DefineConstant {
c2d0: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20   channel name }
c2e0: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  {..      tputs $c2f0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA c300: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. c310: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking c320: 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. c330: 53 51 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f SQLite define co c340: 6e 73 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 nstant \""$name
c350: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c   \..          "\
c360: 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20  "... "]....
c370: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
c380: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
c390: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
c3a0: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
c3b0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
c3c0: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33  a.SQLite.SQLite3
c3d0: 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73   DefineConstants
c3e0: 0d 0a 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65  ..      } define
c3f0: 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d  Constants] == 0}
c400: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
c410: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65   if {[lsearch -e
c420: 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65  xact -nocase $de c430: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e fineConstants$n
c440: 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e  ame] != -1} then
c450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
c460: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
c470: 45 3a 20 59 65 73 2c 20 74 68 69 73 20 64 65 66  E: Yes, this def
c480: 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73  ine constant was
c490: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68   enabled when th
c4a0: 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20  e managed..
c4b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
c4c0: 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c  embly was compil
c4d0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ed...          #
c4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
c4f0: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
c500: 64 41 72 67 73 20 64 65 66 69 6e 65 43 6f 6e 73  dArgs defineCons
c510: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
c520: 2e 53 51 4c 69 74 65 2e 20 24 6e 61 6d 65 5d 0d  .SQLite. $name]. c530: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 ... tpu c540: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c ts$channel yes\
c550: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  n..        } els
c560: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  e {..          t
c570: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no c580: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 \n.. }.. c590: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. c5a0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
c5b0: 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20  annel error\n..
c5c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
c5d0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 61  ..    proc getDa
c5e0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 7b 7d 20  teTimeFormat {}
c5f0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
c600: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70    # NOTE: This p
c610: 72 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79 20  rocedure simply
c620: 72 65 74 75 72 6e 73 20 74 68 65 20 22 64 65 66  returns the "def
c630: 61 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20 66  ault" DateTime f
c640: 6f 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20 20  ormat used..
c650: 20 20 23 20 20 20 20 20 20 20 62 79 20 74 68 65    #       by the
c660: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20   test suite...
c670: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
c680: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
c690: 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d  datetime_format]
c6a0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
c6b0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
c6c0: 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d  $::datetime_form c6d0: 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d at] > 0} then {. c6e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. c6f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu c700: 72 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79 20 rn the manually c710: 6f 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75 65 overridden value c720: 20 66 6f 72 20 74 68 65 20 44 61 74 65 54 69 6d for the DateTim c730: 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20 20 e format... c740: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re c750: 74 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d 65 turn$::datetime
c760: 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 7d  _format..      }
c770: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
c780: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
c790: 54 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49 53  TE: Return an IS
c7a0: 4f 38 36 30 31 20 44 61 74 65 54 69 6d 65 20 66  O8601 DateTime f
c7b0: 6f 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c 65  ormat compatible
c7c0: 20 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a 20   with SQLite,..
c7d0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53         #       S
c7e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c7f0: 65 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65 20  e, and suitable
c800: 66 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70 69  for round-trippi
c810: 6e 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20  ng with the..
c820: 20 20 20 20 20 23 20 20 20 20 20 20 20 44 61 74       #       Dat
c830: 65 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20 74  eTime class of t
c840: 68 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20 49  he framework.  I
c850: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20  f this value is
c860: 63 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20 20  changed,..
c870: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 6f 75    #       variou
c880: 73 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c  s tests may fail
c890: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
c8a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 79 79        return "yy
c8b0: 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73  yy-MM-dd HH:mm:s
c8c0: 73 2e 46 46 46 46 46 46 46 4b 22 0d 0a 20 20 20  s.FFFFFFFK"..
c8d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
c8e0: 20 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61      proc enumera
c8f0: 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d  bleToList { enum
c900: 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20  erable } {..
c910: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
c920: 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  st]....      if
c930: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
c940: 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20  $enumerable] == c950: 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65 0 ||$enumerable
c960: 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e   eq "null"} then
c970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
c980: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. c990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a }.... obj c9a0: 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 ect foreach -ali c9b0: 61 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 as item$enumera
c9c0: 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  ble {..        i
c9d0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
c9e0: 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68  h $item] > 0} th c9f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. ca00: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [ ca10: 24 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d$item ToString].
ca20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
ca30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
ca40: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. ca50: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc ca60: 63 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b catchAndReturn { ca70: 20 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72 script {stackTr ca80: 61 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69 ace false} {stri ca90: 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 ct true} } {.. caa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N cab0: 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 OTE: Evaluate th cac0: 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 e script provide cad0: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 d by our caller cae0: 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74 in their context caf0: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ,.. # cb00: 20 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20 capturing both cb10: 74 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74 the result and t cb20: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d he return code.. cb30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. cb40: 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 set code [catch cb50: 7b 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69 {uplevel 1$scri
cb60: 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20  pt} result]....
cb70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
cb80: 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 63  NOTE: Did the sc
cb90: 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79  ript provided by
cba0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20   our caller NOT
cbb0: 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d  raise an error?.
cbc0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
cbd0: 69 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 24  if {$strict &&$
cbe0: 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73  code == 0 || !$s cbf0: 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 21 trict &&$code !
cc00: 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 1} then {..
cc10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
cc20: 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e  # NOTE: Success.
cc30: 20 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20    Return a list
cc40: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
cc50: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73  code and the res
cc60: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ult...        #.
cc70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
cc80: 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73  [list $code$res
cc90: 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ult]..      } el
cca0: 73 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63  seif {$stackTrac ccb0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. ccc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # ccd0: 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 NOTE: Failure. cce0: 4f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 Our caller wants ccf0: 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 a full stack tr cd00: 61 63 65 20 28 69 66 20 61 70 70 6c 69 63 61 62 ace (if applicab cd10: 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 le),.. # cd20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c return a l cd30: 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 ist with the ret cd40: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 urn code and the cd50: 20 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d result verbatim cd60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. cd70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li cd80: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 st$code $result cd90: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else cda0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. cdb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa cdc0: 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c ilure. Our call cdd0: 65 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74 er does not want cde0: 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 a full stack tr cdf0: 61 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20 ace (if.. ce00: 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 # applica ce10: 62 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c ble), return a l ce20: 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 ist with the ret ce30: 75 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72 urn code, the er ce40: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ror.. # ce50: 20 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68 code for th ce60: 65 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61 e interpreter, a ce70: 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 nd the error mes ce80: 73 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a sage up to the.. ce90: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # cea0: 70 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 point where the ceb0: 73 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75 stack trace shou cec0: 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20 ld start... ced0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se cee0: 74 20 69 6e 64 65 78 20 5b 73 74 72 69 6e 67 20 t index [string cef0: 66 69 72 73 74 20 22 20 20 20 61 74 20 22 20 24 first " at "$
cf00: 72 65 73 75 6c 74 5d 3b 20 23 20 48 41 43 4b 3a  result]; # HACK:
cf10: 20 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d 0a 20 20   Reliable?....
cf20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
cf30: 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f  st $code$::erro
cf40: 72 43 6f 64 65 20 5b 65 78 70 72 20 7b 24 69 6e  rCode [expr {$in cf50: 64 65 78 20 21 3d 20 2d 31 20 3f 20 5c 0d 0a 20 dex != -1 ? \.. cf60: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri cf70: 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 ng trim [string cf80: 72 61 6e 67 65 20 24 72 65 73 75 6c 74 20 30 20 range$result 0
cf90: 24 69 6e 64 65 78 5d 5d 20 3a 20 24 72 65 73 75  $index]] :$resu
cfa0: 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  lt}]]..      }..
cfb0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
cfc0: 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  oc compileCSharp
cfd0: 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  With {..
cfe0: 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20      text memory
cff0: 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72  symbols strict r
d000: 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72  esultsVarName er
d010: 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65  rorsVarName file
d020: 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20  Names..
d030: 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20     args } {..
d040: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
d050: 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65  TE: Since we are
d060: 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68   going to use th
d070: 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61  is method name a
d080: 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 20   lot, assign it
d090: 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20  to a..      #
d0a0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 72      variable fir
d0b0: 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  st...      #..
d0c0: 20 20 20 20 73 65 74 20 61 64 64 20 52 65 66 65      set add Refe
d0d0: 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73  rencedAssemblies
d0e0: 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  .Add....      #.
d0f0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
d100: 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20 63  reate the base c
d110: 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61  ommand to evalua
d120: 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 70  te and add the p
d130: 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 73  roperty settings
d140: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
d150: 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 20  that are almost
d160: 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 79  always needed by
d170: 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 20   our unit tests
d180: 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 6d  (i.e. the System
d190: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
d1a0: 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20  and System.Data
d1b0: 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e  assembly referen
d1c0: 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ces)...      #..
d1d0: 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e        set comman
d1e0: 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  d [list \..
d1f0: 20 20 20 20 20 63 6f 6d 70 69 6c 65 43 53 68 61       compileCSha
d200: 72 70 20 24 74 65 78 74 20 24 6d 65 6d 6f 72 79  rp $text$memory
d210: 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 72 69 63   $symbols$stric
d220: 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  t results errors
d230: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61   \..          $a d240: 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 dd System.dll$a
d250: 64 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 64  dd System.Data.d
d260: 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 54  ll $add System.T d270: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 ransactions.dll d280: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 64 \..$ad
d290: 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c  d System.Xml.dll
d2a0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
d2b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20      # NOTE: Add
d2c0: 61 6c 6c 20 74 68 65 20 70 72 6f 76 69 64 65 64  all the provided
d2d0: 20 66 69 6c 65 20 6e 61 6d 65 73 20 61 73 20 61   file names as a
d2e0: 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63  ssembly referenc
d2f0: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
d300: 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
d310: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20  Name $fileNames d320: 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 {.. lappe d330: 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20 nd command$add
d340: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
d350: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  me $fileName].. d360: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... d370: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: d380: 20 41 64 64 20 74 68 65 20 65 78 74 72 61 20 61 Add the extra a d390: 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79 rguments, if any d3a0: 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 , to the command d3b0: 20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20 to evaluate... d3c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 #.. ev d3d0: 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 al lappend comma d3e0: 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 nd$args....
d3f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
d400: 45 3a 20 41 6c 69 61 73 20 74 68 65 20 63 6f 6d  E: Alias the com
d410: 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65 73 75  piler local resu
d420: 6c 74 73 20 61 6e 64 20 65 72 72 6f 72 73 20 76  lts and errors v
d430: 61 72 69 61 62 6c 65 73 20 74 6f 20 74 68 65 0d  ariables to the.
d440: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
d450: 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72  ariable names pr
d460: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
d470: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ller...      #..
d480: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72        upvar 1 $r d490: 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 esultsVarName re d4a0: 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 75 70 76 sults.. upv d4b0: 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e ar 1$errorsVarN
d4c0: 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  ame errors....
d4d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
d4e0: 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68  OTE: Evaluate th
d4f0: 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b 63  e constructed [c
d500: 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63 6f  ompileCSharp] co
d510: 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 6e  mmand and return
d520: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
d530: 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20      result...
d540: 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c     #..      eval
d550: 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d   $command.. } d560: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is d570: 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e MemoryDb { fileN d580: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ame } {.. # d590: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d5a0: 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 Is the specified d5b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n d5c0: 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e ame really an in d5d0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 -memory database d5e0: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ?.. #.. d5f0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { d600: 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d$fileName eq ":m
d610: 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20  emory:" || \..
d620: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
d630: 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 20  range $fileName d640: 30 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 0 12] eq "file:: d650: 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 memory:"}].. d660: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i d670: 73 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d sTableInDb { nam d680: 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d e {varName db} } d690: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. d6a0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer d6b0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie d6c0: 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. d6d0: 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co d6e0: 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. d6f0: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call d700: 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 er. It contains d710: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f the database co d720: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle d730: 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 that will be.. d740: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 # used d750: 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 to execute the d760: 71 75 65 72 79 20 75 73 65 64 20 74 6f 20 64 65 query used to de d770: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e termine if the n d780: 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 amed table is.. d790: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 # pre d7a0: 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61 74 sent in that dat d7b0: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. d7c0: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
d7d0: 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
d7e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
d7f0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 71 6c  OTE: Use the sql
d800: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
d810: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
d820: 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65   the named table
d830: 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   is..      #
d840: 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68     present in th
d850: 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  e database...
d860: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
d870: 73 71 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 53  sql {..        S
d880: 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46  ELECT COUNT(*) F
d890: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
d8a0: 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27  r WHERE type = '
d8b0: 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20  table' AND name
d8c0: 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = ?;..      }...
d8d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d8e0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e  # NOTE: Return n
d8f0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e  on-zero if the n
d900: 61 6d 65 64 20 74 61 62 6c 65 20 69 73 20 70 72  amed table is pr
d910: 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d  esent...      #.
d920: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
d930: 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b  xpr {..        [
d940: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
d950: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db d960: 24 73 71 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d$sql [list param
d970: 31 20 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d  1 String $name]] d980: 20 3e 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a > 0.. }].. d990: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr d9a0: 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c oc trimSql { sql d9b0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 } {.. retu d9c0: 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 rn [regsub -all d9d0: 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 -- {\s+} [string d9e0: 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d trim$sql] " "]
d9f0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
da00: 70 72 6f 63 20 65 78 65 63 75 74 65 53 71 6c 20  proc executeSql
da10: 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65 20 6e  { sql {execute n
da20: 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e  one} {format non
da30: 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d  e} {fileName ""}
da40: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
da50: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $da60: 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 fileName] == 0} da70: 74 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 then {set fileNa da80: 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 me :memory:}.. da90: 20 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c setupDb$fil
daa0: 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
dab0: 22 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65  " "" false false
dac0: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 64 62 20   false false db
dad0: 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74 72  true....      tr
dae0: 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  y {..        ret
daf0: 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b  urn [uplevel 1 [
db00: 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
db10: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute
db20: 2d 65 78 65 63 75 74 65 20 24 65 78 65 63 75 74  -execute $execut db30: 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d 61 e -format$forma
db40: 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 20  t $db$sql]]..
db50: 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d      } finally {.
db60: 0a 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70  .        cleanup
db70: 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db db80: 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 false false fals db90: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 e.. }.. dba0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g dbb0: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 etConnectionFlag dbc0: 73 20 7b 20 66 69 6c 65 4e 61 6d 65 20 66 6c 61 s { fileName fla dbd0: 67 73 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d gs {quiet false} dbe0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. dbf0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 # NOTE: Fig dc00: 75 72 65 20 6f 75 74 20 77 68 69 63 68 20 64 61 ure out which da dc10: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 tabase file name dc20: 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 or connection s dc30: 74 72 69 6e 67 20 74 68 65 73 65 0d 0a 20 20 20 tring these.. dc40: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 # conne dc50: 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c ction flags will dc60: 20 61 63 74 75 61 6c 6c 79 20 61 70 70 6c 79 20 actually apply dc70: 74 6f 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 to. This is not dc80: 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 necessary.. dc90: 20 20 23 20 20 20 20 20 20 20 69 6e 20 71 75 69 # in qui dca0: 65 74 20 6d 6f 64 65 20 62 65 63 61 75 73 65 20 et mode because dcb0: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e this information dcc0: 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f is only used fo dcd0: 72 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 r logging.. dce0: 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 # and rep dcf0: 6f 72 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e orting purposes. dd00: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. dd10: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
dd20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
dd30: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
dd40: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d   $fileName] > 0} dd50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. dd60: 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 set database dd70: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 66 69 6c [appendArgs "fil dd80: 65 20 6e 61 6d 65 20 5c 22 22 20 24 66 69 6c 65 e name \""$file
dd90: 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20  Name \"]..
dda0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
ddb0: 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53  o exists ::dataS
ddc0: 6f 75 72 63 65 5d 20 26 26 20 5c 0d 0a 20 20 20  ource] && \..
ddd0: 20 20 20 20 20 20 20 20 20 21 5b 61 72 72 61 79           ![array
dde0: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f   exists ::dataSo
ddf0: 75 72 63 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  urce]} then {..
de00: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74           set dat
de10: 61 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67  abase [appendArg
de20: 73 20 22 64 61 74 61 20 73 6f 75 72 63 65 20 5c  s "data source \
de30: 22 22 20 24 3a 3a 64 61 74 61 53 6f 75 72 63 65  "" $::dataSource de40: 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 \"].. } de50: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. de60: 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 3c set database < de70: 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 unknown>.. de80: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... de90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # dea0: 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 NOTE: Show (and deb0: 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63 61 6c 20 log) the local dec0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags ded0: 20 61 6e 64 20 74 68 65 20 61 73 73 6f 63 69 61 and the associa dee0: 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ted.. # def0: 20 20 20 64 61 74 61 20 73 6f 75 72 63 65 20 6f data source o df00: 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 r file name... df10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if df20: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
df30: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
df40: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel df50: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. df60: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- df70: 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f local connectio df80: 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 n flags for "$d
df90: 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20  atabase \..
dfa0: 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20         " are: "
dfb0: 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c  [expr {[string l
dfc0: 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20  ength $flags] > dfd0: 30 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 0 ? \.. dfe0: 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c [appendArgs \ dff0: 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 "$flags \"] : "
e000: 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20  <none>"}] \n]..
e010: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
e020: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
e030: 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
e040: 74 68 65 20 73 68 61 72 65 64 20 63 6f 6e 6e 65  the shared conne
e050: 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20  ction flags...
e060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
e070: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { e080: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c e090: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. e0a0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke e0b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi e0c0: 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 te.SQLiteConnect e0d0: 69 6f 6e 20 53 68 61 72 65 64 46 6c 61 67 73 0d ion SharedFlags. e0e0: 0a 20 20 20 20 20 20 20 20 7d 20 73 68 61 72 65 . } share e0f0: 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 dFlags] == 0} th e100: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. e110: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
e120: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
e130: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
e140: 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20     "---- shared
e150: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
e160: 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65   for " $database e170: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e180: 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 " are: " [expr e190: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length e1a0: 20 24 73 68 61 72 65 64 46 6c 61 67 73 5d 20 3e$sharedFlags] >
e1b0: 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20   0 && \..
e1c0: 20 20 20 20 20 20 20 24 73 68 61 72 65 64 46 6c         $sharedFl e1d0: 61 67 73 20 6e 65 20 22 4e 6f 6e 65 22 20 3f 20 ags ne "None" ? e1e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. e1f0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 [appendArgs \" e200: 24 73 68 61 72 65 64 46 6c 61 67 73 20 5c 22 5d$sharedFlags \"]
e210: 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e   : "<none>"}] \n
e220: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ]..        } els
e230: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  e {..          t
e240: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha e250: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs e260: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e270: 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 "---- shared c e280: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags e290: 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 for "$database
e2a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
e2b0: 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 69 6c   " are: <unavail
e2c0: 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20  able>\n"]..
e2d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
e2e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
e2f0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65  # NOTE: If there
e300: 20 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20   are any global
e310: 28 70 65 72 20 74 65 73 74 20 72 75 6e 29 20 63  (per test run) c
e320: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
e330: 63 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20  currently..
e340: 20 23 20 20 20 20 20 20 20 73 65 74 2c 20 75 73   #       set, us
e350: 65 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e  e them now (i.e.
e360: 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68   by combining th
e370: 65 6d 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73  em with the ones
e380: 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20   for this..
e390: 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74   #       connect
e3a0: 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ion)...      #..
e3b0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
e3c0: 65 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74  exists ::connect
e3d0: 69 6f 6e 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d  ion_flags] && \.
e3e0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
e3f0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6e  ng length $::con e400: 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e nection_flags] > e410: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. e420: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # e430: 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 NOTE: Show (and e440: 20 6c 6f 67 29 20 74 68 65 20 64 65 74 65 63 74 log) the detect e450: 65 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 ed global connec e460: 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 tion flags... e470: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e480: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
e490: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
e4a0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha e4b0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs e4c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e4d0: 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 "---- global c e4e0: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags e4f0: 64 65 74 65 63 74 65 64 3a 20 22 20 5c 0d 0a 20 detected: " \.. e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex e510: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 pr {[info exists e520: 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c ::connection_fl e530: 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ags] && \.. e540: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string e550: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 length$::conne
e560: 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30  ction_flags] > 0
e570: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
e580: 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20      [appendArgs
e590: 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e  \" $::connection e5a0: 5f 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e _flags \"] : "<n e5b0: 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 one>"}] \n].. e5c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e5d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N e5e0: 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 OTE: Combine and e5f0: 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20 /or replace the e600: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags e610: 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74 and then show t e620: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # e630: 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a new value... e640: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e650: 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f set flags [co e660: 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 mbineFlags$flag
e670: 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f  s $::connection_ e680: 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 flags].... e690: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N e6a0: 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c OTE: Show (and l e6b0: 6f 67 29 20 74 68 65 20 6e 65 77 20 65 66 66 65 og) the new effe e6c0: 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e ctive connection e6d0: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 flags... e6e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { e6f0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
e700: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
e710: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel e720: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- e740: 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e --- combined con e750: 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f nection flags fo e760: 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d r "$database \.
e770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
e780: 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 5b   are: " [expr {[
e790: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66  string length $f e7a0: 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c 0d 0a 20 lags] > 0 ? \.. e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 [ap e7c0: 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 pendArgs \"$fla
e7d0: 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e  gs \"] : "<none>
e7e0: 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  "}] \n]..
e7f0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
e800: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 6c 61       return $fla e810: 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 gs.. }..... e820: 20 20 70 72 6f 63 20 67 65 74 46 6c 61 67 73 50 proc getFlagsP e830: 72 6f 70 65 72 74 79 20 7b 20 7b 66 6c 61 67 73 roperty { {flags e840: 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 ""} {quiet fals e850: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. e860: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 . # NOTE: D e870: 65 74 65 72 6d 69 6e 65 20 77 68 61 74 20 74 68 etermine what th e880: 65 20 63 6f 6d 62 69 6e 65 64 20 28 67 6c 6f 62 e combined (glob e890: 61 6c 20 61 6e 64 20 6c 6f 63 61 6c 29 20 63 6f al and local) co e8a0: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 nnection.. e8b0: 23 20 20 20 20 20 20 20 66 6c 61 67 73 20 73 68 # flags sh e8c0: 6f 75 6c 64 20 62 65 2c 20 70 6f 73 73 69 62 6c ould be, possibl e8d0: 79 20 71 75 69 65 74 6c 79 2e 0d 0a 20 20 20 20 y quietly... e8e0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 #.. set f e8f0: 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 lags [getConnect e900: 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 ionFlags ""$fla
e910: 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20  gs $quiet].... e920: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N e930: 4f 54 45 3a 20 49 66 20 6e 6f 20 67 6c 6f 62 61 OTE: If no globa e940: 6c 20 6f 72 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 l or local conne e950: 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 65 72 65 ction flags were e960: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 0d specified, the. e970: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d e980: 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f efault connectio e990: 6e 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 n flags should b e9a0: 65 20 75 73 65 64 3b 20 74 68 65 72 65 66 6f 72 e used; therefor e9b0: 65 2c 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 e, return.. e9c0: 20 23 20 20 20 20 20 20 20 61 6e 20 65 6d 70 74 # an empt e9d0: 79 20 73 74 72 69 6e 67 20 69 6e 20 74 68 61 74 y string in that e9e0: 20 63 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d case... #. e9f0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri ea00: 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 ng length$flags
ea10: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
ea20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
ea30: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
ea40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
ea50: 4f 54 45 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f  OTE: In order to
ea60: 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 64 65   check if the de
ea70: 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  fault connection
ea80: 20 66 6c 61 67 73 20 61 72 65 20 62 65 69 6e 67   flags are being
ea90: 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20   used..      #
eaa0: 20 20 20 20 20 69 74 20 69 73 20 6e 65 63 65 73       it is neces
eab0: 73 61 72 79 20 74 6f 20 61 74 74 65 6d 70 74 20  sary to attempt
eac0: 61 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20  a conversion to
ead0: 74 68 65 20 61 63 74 75 61 6c 20 65 6e 75 6d 65  the actual enume
eae0: 72 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20  rated..      #
eaf0: 20 20 20 20 20 74 79 70 65 2e 20 20 46 61 69 6c       type.  Fail
eb00: 69 6e 67 20 74 68 61 74 2c 20 74 68 65 20 63 68  ing that, the ch
eb10: 65 63 6b 20 61 67 61 69 6e 73 74 20 74 68 65 20  eck against the
eb20: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
eb30: 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20  ll be..      #
eb40: 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20       skipped...
eb50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
eb60: 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 20  t error null; #
eb70: 49 47 4e 4f 52 45 44 0d 0a 20 20 20 20 20 20 73  IGNORED..      s
eb80: 65 74 20 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74  et value [object
eb90: 20 69 6e 76 6f 6b 65 20 55 74 69 6c 69 74 79 20   invoke Utility
eba0: 54 72 79 50 61 72 73 65 46 6c 61 67 73 45 6e 75  TryParseFlagsEnu
ebb0: 6d 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  m "" \..
ebc0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
ebd0: 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
ebe0: 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66  ctionFlags "" $f ebf0: 6c 61 67 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c lags null true \ ec00: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 72 75 65 .. true ec10: 20 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 20 20 20 error].... ec20: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE ec30: 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 : If the combine ec40: 64 20 66 6c 61 67 73 20 73 74 72 69 6e 67 20 63 d flags string c ec50: 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c ould not actuall ec60: 79 20 62 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a y be converted.. ec70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to ec80: 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 the enumerated ec90: 74 79 70 65 20 69 74 20 69 73 20 74 68 65 20 64 type it is the d eca0: 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 efault value, th ecb0: 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 en just use.. ecc0: 20 20 20 23 20 20 20 20 20 20 20 69 74 20 76 65 # it ve ecd0: 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 rbatim; otherwis ece0: 65 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 61 e, just return a ecf0: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 n empty string. ed00: 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 In that.. ed10: 23 20 20 20 20 20 20 20 63 61 73 65 2c 20 74 68 # case, th ed20: 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 e default connec ed30: 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 tion flags will ed40: 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 be used... ed50: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st ed60: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c ring length$val
ed70: 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c  ue] == 0 || $val ed80: 75 65 20 6e 65 20 22 44 65 66 61 75 6c 74 22 7d ue ne "Default"} ed90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. eda0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 57 41 #.. # WA edb0: 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 74 75 RNING: This retu edc0: 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 76 rns the string v edd0: 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 alue of the comb ede0: 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d ined flags, not. edf0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # ee00: 20 20 20 20 74 68 65 20 65 6e 75 6d 65 72 61 74 the enumerat ee10: 65 64 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 ed value. This ee20: 69 73 20 62 79 20 64 65 73 69 67 6e 20 61 6e 64 is by design and ee30: 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 should not.. ee40: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # ee50: 62 65 20 63 68 61 6e 67 65 64 20 77 69 74 68 6f be changed witho ee60: 75 74 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 ut careful consi ee70: 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 deration (e.g. i ee80: 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 t would.. ee90: 20 23 20 20 20 20 20 20 20 20 20 20 70 72 65 76 # prev eea0: 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65 43 6f ent the SQLiteCo eeb0: 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 nnection class f eec0: 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 rom allowing inv eed0: 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 23 20 alid.. # eee0: 20 20 20 20 20 20 20 20 20 5b 22 6d 61 67 69 63 ["magic eef0: 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 al"] meta-flags) ef00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. ef10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 return [ap ef20: 70 65 6e 64 41 72 67 73 20 22 46 6c 61 67 73 3d pendArgs "Flags= ef30: 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 "$flags \;]..
ef40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
ef50: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d  eturn ""..    }.
ef60: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 61  ....    proc ena
ef70: 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 7b  bleSharedCache {
ef80: 20 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20   channel enable
ef90: 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
efa0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  {..      if {[ca
efb0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
efc0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
efd0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
efe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
eff0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
f000: 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
f010: 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..
f020: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62      sqlite3_enab
f030: 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20  le_shared_cache
f040: 5b 65 78 70 72 20 69 6e 74 28 24 65 6e 61 62 6c  [expr int($enabl f050: 65 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 e)].. } res f060: 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then f070: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! f080: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
f090: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
f0a0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append f0b0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. f0c0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call f0d0: 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f sqlite3_enable_ f0e0: 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 shared_cache("$
f0f0: 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20  enable \..
f100: 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b          ")... ok
f110: 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  : " $result \n]. f120: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. f130: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. f140: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
f150: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f160: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe f170: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. f180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " f190: 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite f1a0: 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 3_enable_shared_ f1b0: 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 cache("$enable
f1c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
f1d0: 20 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20   ")... error: "
f1e0: 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] f1f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. f200: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... f210: 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 proc setupDb f220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. f230: 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 fileName {mode " f240: 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d "} {dateTimeForm f250: 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 at ""} {dateTime f260: 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 Kind ""} {flags f270: 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ""}.. f280: 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61 {extra ""} {qua f290: 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 lify true} {dele f2a0: 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61 te true} {uri fa f2b0: 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 lse}.. f2c0: 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75 {temporary tru f2d0: 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 e} {varName db} f2e0: 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } f2f0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. f300: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, f310: 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c see if our call f320: 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 er has requested f330: 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 an in-memory da f340: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # f350: 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 .. set isMe f360: 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 mory [isMemoryDb f370: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20$fileName]....
f380: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
f390: 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61  NOTE: For now, a
f3a0: 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61 73 65  ll test database
f3b0: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 74 65  s used by the te
f3c0: 73 74 20 73 75 69 74 65 20 61 72 65 20 70 6c 61  st suite are pla
f3d0: 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ced..      #
f3e0: 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61     into the data
f3f0: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20  base directory.
f400: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 61   Each database a
f410: 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73  nd related files
f420: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
f430: 75 73 65 64 20 62 79 20 61 20 74 65 73 74 20 73  used by a test s
f440: 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64  hould be cleaned
f450: 20 75 70 20 62 79 20 74 68 61 74 20 74 65 73 74   up by that test
f460: 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20   using the..
f470: 20 20 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e    #       "clean
f480: 75 70 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c  upDb" procedure,
f490: 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23   below...      #
f4a0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73  ..      if {!$is f4b0: 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 Memory &&$quali
f4c0: 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  fy} then {..
f4d0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
f4e0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
f4f0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
f500: 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  y] [file tail $f f510: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 ileName]].. f520: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. f530: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 # NOTE: By f540: 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 default, delete f550: 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 any pre-existing f560: 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 database with t f570: 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 he same file.. f580: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name f590: 20 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 if it currently f5a0: 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 exists... f5b0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 #.. if {!$i
f5c0: 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65  sMemory && $dele f5d0: 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 te && [file exis f5e0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
f5f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
f600: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f610: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c  : Attempt to del
f620: 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73  ete any pre-exis
f630: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69  ting database wi
f640: 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65  th the same file
f650: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
f660: 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20    name...
f670: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
f680: 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c  [catch {file del
f690: 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65  ete $fileName} e f6a0: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. f6b0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f6c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We f6d0: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed f6e0: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 to delete the fi f6f0: 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d le, report why.. f700: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. f710: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
f720: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
f730: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $f740: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ f750: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= f770: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai f780: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 led to delete da f790: 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" f7a0: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
f7c0: 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65   during setup, e
f7d0: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er f7e0: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. f7f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. f800: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... f810: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT f820: 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the f830: 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab f840: 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i f850: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of f860: 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # f870: 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 caller. The f880: 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f handle to the o f890: 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 pened database w f8a0: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 ill be stored th f8b0: 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ere... #.. f8c0: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
f8d0: 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
f8e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
f8f0: 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e  E: Start buildin
f900: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
f910: 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e   string.  The on
f920: 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74  ly required port
f930: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
f940: 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
f950: 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74  tion string is t
f960: 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20  he data source,
f970: 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74  which contains t
f980: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
f990: 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20    database file
f9a0: 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66  name itself.  If
f9b0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74   our caller want
f9c0: 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 20 61  s to use a URI a
f9d0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
f9e0: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65   the data source
f9f0: 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72  , use the FullUr
fa00: 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  i connection str
fa10: 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d  ing property to.
fa20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
fa30: 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 61 20  revent the data
fa40: 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66 72  source string fr
fa50: 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64  om being mangled
fa60: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
fa70: 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e    if {$uri} then fa80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set fa90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c connection {Full faa0: 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d Uri=${fileName}}
fab0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
fac0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
fad0: 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53  nnection {Data S
fae0: 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65  ource=${fileName faf0: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... fb00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # fb10: 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 NOTE: Since this fb20: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e procedure has n fb30: 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 o special knowle fb40: 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 dge of what the fb50: 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 default.. # fb60: 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 setting i fb70: 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c s for the ToFull fb80: 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 Path connection fb90: 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 string propery, fba0: 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 always.. # fbb0: 20 20 20 20 20 20 61 64 64 20 74 68 65 20 76 61 add the va fbc0: 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 lue we know abou fbd0: 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 t to the connect fbe0: 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 ion string... fbf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 #.. appe fc00: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; fc10: 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 ToFullPath=${qua
fc20: 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20  lify}}....
fc30: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
fc40: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
fc50: 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e  pecified a journ
fc60: 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65  al mode, add the
fc70: 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
fc80: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
fc90: 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
fca0: 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
fcb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fcc0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
fcd0: 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74  th $mode] > 0} t fce0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a fcf0: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection fd00: 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d {;Journal Mode= fd10: 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20${mode}}..
fd20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
fd30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
fd40: 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
fd50: 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 20 66  ied a DateTime f
fd60: 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e  ormat, add the n
fd70: 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20  ecessary..
fd80: 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20  #       portion
fd90: 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
fda0: 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20  n string now...
fdb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
fdc0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
fdd0: 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74   $dateTimeFormat fde0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. fdf0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co fe00: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 nnection {;DateT fe10: 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 imeFormat=${date
fe20: 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20  TimeFormat}}..
fe30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
fe40: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
fe50: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
fe60: 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69  ecified a DateTi
fe70: 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20  meKind, add the
fe80: 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f  necessary portio
fe90: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
fea0: 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
feb0: 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
fec0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
fed0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
fee0: 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d  h $dateTimeKind] fef0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. ff00: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con ff10: 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 nection {;DateTi ff20: 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d meKind=${dateTim
ff30: 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d  eKind}}..      }
ff40: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
ff50: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72     # NOTE: Figur
ff60: 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 66  e out what the f
ff70: 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 74  inal flags for t
ff80: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e  his connection n
ff90: 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20  eed to be...
ffa0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66    #..      set f
ffb0: 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74  lags [getConnect
ffc0: 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e 61  ionFlags $fileNa ffd0: 6d 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 me$flags $quiet ffe0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. fff0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f # NOTE: If o 10000 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 ur caller specif 10010 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 ied some SQLiteC 10020 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 onnectionFlags, 10030 61 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 add the.. # 10040 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 necessary 10050 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 portion of the 10060 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 10070 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. 10080 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 10090 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 ng length$flags
100a0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
100b0 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
100c0 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73  nnection {;Flags
100d0 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20  =${flags}}.. 100e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 100f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 10100 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 our caller spec 10110 69 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 70 ified an extra p 10120 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f ayload to the co 10130 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 nnection.. 10140 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 # string, 10150 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a append it now... 10160 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 10170 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 10180 68 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 h$extra] > 0} t
10190 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
101a0 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
101b0 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20   \; $extra.. 101c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 101d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 # NOTE: Op 101e0 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 en the database 101f0 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 connection now, 10200 70 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 61 71 placing the opaq 10210 75 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d ue handle value. 10220 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 10230 6e 74 6f 20 74 68 65 20 76 61 72 69 61 62 6c 65 nto the variable 10240 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 specified by ou 10250 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 r caller... 10260 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 #.. set db 10270 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 [sql open -type 10280 20 53 51 4c 69 74 65 20 5b 73 75 62 73 74 20 24 SQLite [subst$
10290 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a  connection]]....
102a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
102b0 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75 72 65   NOTE: Configure
102c0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64   the temporary d
102d0 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
102e0 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64 61   newly opened da
102f0 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 23 20  tabase..      #
10300 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
10310 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20   now unless our
10320 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69  caller forbids i
10330 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t...      #..
10340 20 20 20 69 66 20 7b 24 74 65 6d 70 6f 72 61 72     if {$temporar 10350 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 y && ![info exis 10360 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f ts ::no(setTempo 10370 72 61 72 79 44 69 72 65 63 74 6f 72 79 29 5d 7d raryDirectory)]} 10380 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10390 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 sql execute$db
103a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
103b0 20 20 20 20 20 20 20 20 20 20 20 20 22 50 52 41              "PRA
103c0 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
103d0 69 72 65 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b  irectory = \"" [
103e0 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65  getTemporaryDire
103f0 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20  ctory] \"\;]..
10400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
10410 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
10420 50 65 72 66 6f 72 6d 20 61 6e 79 20 65 78 74 72  Perform any extr
10430 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  a per-connection
10440 20 73 65 74 75 70 20 66 6f 72 20 74 68 65 20 6e   setup for the n
10450 65 77 6c 79 20 6f 70 65 6e 65 64 0d 0a 20 20 20  ewly opened..
10460 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62     #       datab
10470 61 73 65 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f  ase now unless o
10480 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64  ur caller forbid
10490 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  s it...      #..
104a0 20 20 20 20 20 20 73 65 74 20 65 78 65 63 75 74        set execut
104b0 65 4f 6e 53 65 74 75 70 20 5b 67 65 74 45 78 65  eOnSetup [getExe
104c0 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d 0a  cuteOnSetup]....
104d0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
104e0 67 20 6c 65 6e 67 74 68 20 24 65 78 65 63 75 74  g length $execut 104f0 65 4f 6e 53 65 74 75 70 5d 20 3e 20 30 20 26 26 eOnSetup] > 0 && 10500 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 21 5b \.. ![ 10510 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 10520 28 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 29 (executeOnSetup) 10530 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 10540 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 10550 4e 4f 54 45 3a 20 54 68 69 73 20 63 6f 6d 6d 61 NOTE: This comma 10560 6e 64 20 6d 61 79 20 72 61 69 73 65 20 61 6e 20 nd may raise an 10570 65 72 72 6f 72 3b 20 69 66 20 73 6f 2c 20 74 68 error; if so, th 10580 61 74 20 69 73 20 66 69 6e 65 2c 20 61 73 0d 0a at is fine, as.. 10590 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 105a0 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 74 65 the enclosing te 105b0 73 74 20 77 69 6c 6c 20 74 68 65 6e 20 66 61 69 st will then fai 105c0 6c 2e 20 20 54 68 65 20 5b 73 75 62 73 74 5d 20 l. The [subst] 105d0 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 command is.. 105e0 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 # used 105f0 20 6f 6e 20 74 68 65 20 53 51 4c 20 69 6e 20 63 on the SQL in c 10600 61 73 65 20 69 74 20 6e 65 65 64 73 20 74 6f 20 ase it needs to 10610 72 65 66 65 72 20 74 6f 20 73 74 61 74 65 20 69 refer to state i 10620 6e 20 6f 75 72 0d 0a 20 20 20 20 20 20 20 20 23 n our.. # 10630 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e 0d context.. 10640 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 10650 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 sql execute 10660 24 64 62 20 5b 73 75 62 73 74 20 24 65 78 65 63$db [subst $exec 10670 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 20 uteOnSetup].. 10680 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 10690 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 106a0 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 lways return the 106b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand 106c0 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e le upon success. 106d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 106e0 20 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 return$db..
106f0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
10700 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  getDbConnection
10710 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d  { {varName db} }
10720 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
10730 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
10740 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
10750 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
10760 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
10770 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
10780 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
10790 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20  er.  The handle
107a0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
107b0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
107c0 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20  d via the..
107d0 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44   #       [setupD
107e0 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f  b] procedure sho
107f0 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68  uld be stored th
10800 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ere...      #..
10810 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 10820 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... 10830 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10840 45 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 E: This returns 10850 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 the ADO.NET IDbC 10860 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 onnection object 10870 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 68 instance for th 10880 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 10890 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 specified datab 108a0 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 se handle. Sinc 108b0 65 20 67 65 74 74 69 6e 67 20 74 68 69 73 20 6f e getting this o 108c0 62 6a 65 63 74 20 72 65 6c 69 65 73 20 75 70 6f bject relies upo 108d0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 108e0 20 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 Eagle internals 108f0 2c 20 67 72 65 61 74 20 63 61 72 65 20 73 68 6f , great care sho 10900 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 uld be taken to 10910 61 76 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 20 avoid disposing 10920 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 of.. # 10930 20 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 this object or 10940 20 6f 74 68 65 72 77 69 73 65 20 70 75 74 74 69 otherwise putti 10950 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e ng it into an in 10960 76 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 valid state... 10970 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 10980 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 {[info exists db 10990 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 109a0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 109b0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 109c0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 109d0 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 +NonPublic -obje 109e0 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f ctflags +NoDispo 109f0 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 se -alias \.. 10a00 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 Inter 10a10 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 preter.GetActive 10a20 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 .connections Ite 10a30 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 20 20 7d m$db..        }
10a40 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
10a50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
10a60 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
10a70 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72  NOTE: Success, r
10a80 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65  eturn the opaque
10a90 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d   object handle..
10aa0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
10ab0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $10ac0 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 result.. 10ad0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 10ae0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 10af0 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 # NOTE: Failure 10b00 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 10b10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 10b20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
10b30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
10b40 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
10b50 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
10b60 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
10b70 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  o get connection
10b80 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61   handle for data
10b90 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  base \"" \..
10ba0 20 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c            $db "\ 10bb0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 10bc0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
10bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
10be0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
10bf0 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65  proc freeDbConne
10c00 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65  ction { {varName
10c10 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b   connection} } {
10c20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
10c30 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
10c40 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
10c50 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
10c60 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20  connection") in
10c70 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
10c80 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75     context of ou
10c90 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f  r caller.  The o
10ca0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
10cb0 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e  dle for an ADO.N
10cc0 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ET..      #
10cd0 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65    connection pre
10ce0 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64  viously returned
10cf0 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63   by [getDbConnec
10d00 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d  tion] should be.
10d10 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
10d20 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
10d30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76      #..      upv
10d40 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f  ar 1 $varName co 10d50 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 nnection.... 10d60 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10d70 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 E: Attempt to re 10d80 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 move the opaque 10d90 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 object handle fr 10da0 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 om the interpret 10db0 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 er.. # 10dc0 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 now. This [ob 10dd0 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 ject dispose] ca 10de0 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 ll will not actu 10df0 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 ally dispose of 10e00 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 10e10 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 underlying ob 10e20 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 68 65 ject because the 10e30 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 +NoDispose flag 10e40 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a was set on it.. 10e50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 # du 10e60 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 ring creation of 10e70 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 10e80 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 ct handle... 10e90 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 10ea0 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e info exists conn 10eb0 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 ection] && \.. 10ec0 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b [catch { 10ed0 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 object dispose$
10ee0 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f  connection} erro
10ef0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
10f00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
10f10 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
10f20 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f  w failed to remo
10f30 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72  ve the handle, r
10f40 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
10f50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
10f60 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 10f70 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10f80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10f90 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 10fa0 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 ailed to remove 10fb0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl 10fc0 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f e \""$connectio
10fd0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
10fe0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
10ff0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 11000 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 11010 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 ... proc addD 11020 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f bConnection { co 11030 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d nnection {varNam 11040 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e db} } {.. 11050 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11060 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 11070 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 11080 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 11090 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 110a0 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 110b0 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 caller... 110c0 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 110d0 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
110e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
110f0 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20   # NOTE: Create
11100 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d  a correctly form
11110 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74  atted name for t
11120 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
11130 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20  ection to..
11140 20 23 20 20 20 20 20 20 20 62 65 20 61 64 64 65   #       be adde
11150 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61  d to the list ma
11160 6e 61 67 65 64 20 62 79 20 74 68 65 20 45 61 67  naged by the Eag
11170 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  le interpreter..
11180 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
11190 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69  set db [object i
111a0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
111b0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
111c0 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70       Eagle._Comp
111d0 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46  onents.Private.F
111e0 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73  ormatOps Databas
111f0 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e  eObjectName $con 11200 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 nection \.. 11210 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 SQLiteConne 11220 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e ction [object in 11230 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 voke Interpreter 11240 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 .GetActive NextI 11250 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a d]].... #.. 11260 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 11270 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 d the database c 11280 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 onnection provid 11290 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 112a0 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 to the list.. 112b0 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 112c0 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 hose known to th 112d0 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 e Eagle interpre 112e0 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ter... #.. 112f0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 11300 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 11310 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 blic Interpreter 11320 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 .GetActive.conne 11330 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 ctions Add \.. 11340 20 20 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e$db $con 11350 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a nection.. }.. 11360 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 ... proc getR 11370 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 owsFromDataTable 11380 20 7b 20 64 61 74 61 54 61 62 6c 65 20 7d 20 7b { dataTable } { 11390 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 73 .. set rows 113a0 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 73 [list].. s 113b0 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 54 et count [$dataT
113c0 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75  able Columns.Cou
113d0 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  nt]....      for
113e0 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b   {set index 0} {
113f0 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d  $index <$count}
11400 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d   {incr index} {.
11410 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74  .        set dat
11420 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54 61  aColumn [$dataTa 11430 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 6d ble -alias Colum 11440 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 ns.get_Item$ind
11450 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ex]..        set
11460 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b   names($index) [ 11470 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75$dataColumn Colu
11480 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  mnName]..      }
11490 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74  ....      object
114a0 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
114b0 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61 74  dataRow [set dat
114c0 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62 6c  aRows [$dataTabl 114d0 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 e Rows]] {.. 114e0 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69 73 set row [lis 114f0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f t].... fo 11500 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 r {set index 0} 11510 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 {$index < $count 11520 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b } {incr index} { 11530 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 11540 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77 20 value [$dataRow
11550 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 67  -create -alias g
11560 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 11570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 11580 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 11590 24 76 61 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c$value] > 0 && \
115a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
115b0 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20  ![object invoke
115c0 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c 6c  Convert IsDBNull
115d0 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b   $value]} then { 115e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .. la 115f0 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 ppend row [list 11600 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b$names($index) [ 11610 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e 67 5d$value ToString]
11620 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
11630 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
11640 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b     lappend row [
11650 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64  list $names($ind
11660 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ex)]..
11670 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
11680 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
11690 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 20  rows $row.. 116a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 116b0 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d rn$rows..    }.
116c0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 6d  ....    proc dum
116d0 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62  pRowsFromDataTab
116e0 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77  le { channel row
116f0 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  s } {..      set
11700 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20   sequence 1....
11710 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f 77       foreach row
11720 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20   $rows {.. 11730 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
11740 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
11750 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
11760 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 31  r {$sequence > 1 11770 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 ? "\n" : ""}] " 11780 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 71 ---- ROW #"$seq
11790 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20  uence :\n]....
117a0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61        foreach pa
117b0 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20  ir $row {.. 117c0 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 117d0 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74 h$pair] >= 2} t
117e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
117f0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11800 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 l [appendArgs \t 11810 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11820 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 [list [linde 11830 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 22 x$pair 0]] ": "
11840 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24   [list [lindex $11850 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 pair 1]] \n].. 11860 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif 11870 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 {[llength$pair
11880 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 1} then {..
11890 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
118a0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 118b0 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 ndArgs \t \.. 118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 [li 118d0 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
118e0 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e   0]] ": <null>\n
118f0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  "]..          }
11900 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
11910 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 11920 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 el \t<empty>\n; 11930 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f # NOTE: No data? 11940 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 11950 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 11960 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e 63 incr sequenc 11970 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 e.. }.. 11980 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 11990 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e leanupDb { fileN 119a0 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d ame {varName db} 119b0 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} 119c0 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a {qualify true}.. 119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 119e0 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 {delete tru 119f0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 11a00 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 11a10 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 ttempt to force 11a20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 all pending "gar 11a30 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f bage" objects to 11a40 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a be collected,.. 11a50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 11a60 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 cluding SQLite s 11a70 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 tatements and ba 11a80 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 ckup objects; th 11a90 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d is should allow. 11aa0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 11ab0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 he underlying da 11ac0 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 tabase file to b 11ad0 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 e deleted... 11ae0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
11af0 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d  collect} then {.
11b00 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74  .        collect
11b10 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f  Garbage $::test_ 11b20 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d channel.. } 11b30 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11b40 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 11b50 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 11b60 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 11b70 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 11b80 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 11b90 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 11ba0 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 er. The handle 11bb0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 to the database 11bc0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 previously opene 11bd0 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 d via the.. 11be0 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 # [setupD 11bf0 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f b] procedure sho 11c00 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 uld be stored th 11c10 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ere... #.. 11c20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
11c30 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
11c40 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
11c50 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e  E: Close the con
11c60 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64  nection to the d
11c70 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68  atabase now.  Th
11c80 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20  is should allow
11c90 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  us..      #
11ca0 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20    to delete the
11cb0 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62  underlying datab
11cc0 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ase file...
11cd0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
11ce0 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26  nfo exists db] &
11cf0 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c  & [catch {sql cl
11d00 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d  ose $db} error]} 11d10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11d20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11d30 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 11d40 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 ailed to close t 11d50 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 he database, rep 11d60 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 11d70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 11d80 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
11d90 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
11da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
11db0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
11dc0 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74  led to close dat
11dd0 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c  abase \"" $db "\ 11de0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 ", error: " \.. 11df0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 11e00 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
11e10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
11e20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
11e30 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20  rst, see if our
11e40 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65  caller has reque
11e50 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  sted an in-memor
11e60 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  y database...
11e70 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
11e80 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f  isMemory [isMemo
11e90 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ryDb $fileName]. 11ea0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11eb0 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 11ec0 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f the full path to 11ed0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 the database fi 11ee0 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f le name. For no 11ef0 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 w, all test.. 11f00 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab 11f10 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 ase files are st 11f20 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 ored in the temp 11f30 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e orary directory. 11f40 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11f50 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
11f60 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65  && $qualify} the 11f70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 11f80 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 11f90 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 join [getDatabas 11fa0 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c eDirectory] [fil 11fb0 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
11fc0 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ]]..      }....
11fd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11fe0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
11ff0 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78  he file still ex
12000 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ists...      #..
12010 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65        if {!$isMe 12020 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 mory &&$delete
12030 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20  && [file exists
12040 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 12050 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 12060 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 12070 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 kip deleting dat 12080 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 abase files if s 12090 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 omebody sets the 120a0 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 global.. 120b0 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c # variabl 120c0 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e e to prevent it. 120d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 120e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 120f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 exists ::no(clea 12100 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 nupDbFile)]} the 12110 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 12120 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 12130 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d 12140 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 elete the test d 12150 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 atabase file now 12160 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 12170 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 12180 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b et code [catch { 12190 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
121a0 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20  eName} error]]}
121b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
121c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
121d0 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
121e0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
121f0 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c  delete the file,
12200 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
12210 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
12220 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $12230 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 12240 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 12260 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 12270 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 led to delete da 12280 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 12290 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
122b0 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c   during cleanup,
122c0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $122d0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 122e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 122f0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 12300 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 12310 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 # NOTE: Show th 12320 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 at we skipped de 12330 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e leting the file. 12340 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 12350 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 set cod 12360 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e 0.... 12370 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
12380 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
12390 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
123a0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
123b0 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  G: skipped delet
123c0 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c  ing database fil
123d0 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 123e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 123f0 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea 12400 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 nup\n"].. 12410 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 12420 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 12430 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 12440 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 he file does not 12450 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 exist, success! 12460 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12470 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d set code 0. 12480 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 12490 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a return$code..
124a0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
124b0 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 72  oc setupDbInterr
124c0 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68  uptCallback { ch
124d0 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20  annel log } {..
124e0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 124f0 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e nel "---- settin 12500 67 20 75 70 20 64 65 62 75 67 67 65 72 20 69 6e g up debugger in 12510 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b terrupt callback 12520 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 ... ".... i 12530 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 12540 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12550 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 # NOTE: Make sur 12560 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 e the script deb 12570 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 ugger and the is 12580 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 12590 65 72 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 er are.. 125a0 23 20 20 20 20 20 20 20 73 65 74 75 70 20 61 6e # setup an 125b0 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 2e d ready for use. 125c0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 125d0 20 20 20 20 20 64 65 62 75 67 20 73 65 74 75 70 debug setup 125e0 20 74 72 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 true true.... 125f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12600 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 # NOTE: Load th 12610 65 20 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b e necessary pack 12620 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 ages into the is 12630 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 12640 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a er... #.. 12650 20 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 debug ev 12660 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 al {.. 12670 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require 12680 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 Eagle.. 12690 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 package require 126a0 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a Eagle.Library.. 126b0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 packag 126c0 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e e require Eagle. 126d0 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d Test.. }. 126e0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 126f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 12700 70 79 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 py the necessary 12710 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 variables into 12720 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 the isolated int 12730 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 12740 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 #.. de 12750 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 bug invoke 0 set 12760 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 ::test_channel 12770 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45$channel; # NOTE
12780 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a  : For [tputs]...
12790 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e          debug in
127a0 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73  voke 0 set ::tes
127b0 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f  t_log $log; # NO 127c0 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d TE: For [tlog].. 127d0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 127e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e # NOTE: In 127f0 73 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c 62 61 stall the callba 12800 63 6b 20 73 63 72 69 70 74 20 74 6f 20 62 65 20 ck script to be 12810 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 evaluated in the 12820 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20 20 20 isolated.. 12830 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 65 72 # inter 12840 70 72 65 74 65 72 20 77 68 65 6e 20 74 68 69 73 preter when this 12850 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 73 20 interpreter is 12860 69 6e 74 65 72 72 75 70 74 65 64 20 62 79 20 73 interrupted by s 12870 63 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 23 cript.. # 12880 20 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 cancellat 12890 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 ion, etc... 128a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 #.. de 128b0 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 bug callback app 128c0 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b ly {{sender e} { 128d0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 128e0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 128f0 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 63 Check if this c 12900 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 allback is one t 12910 68 61 74 20 77 65 20 63 61 72 65 20 61 62 6f 75 hat we care abou 12920 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d t... #. 12930 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 . if {" 12940 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 5b 73 70 Canceled" in [sp 12950 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 lit [$e Interrup
12960 74 54 79 70 65 5d 20 22 2c 20 22 5d 7d 20 74 68  tType] ", "]} th
12970 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
12980 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
12990 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 65   # NOTE: Iterate
129a0 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 74   through all dat
129b0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
129c0 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a  s known to the..
129d0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
129e0 20 20 20 20 70 61 72 65 6e 74 20 69 6e 74 65 72      parent inter
129f0 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  preter...
12a00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12a10 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
12a20 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5c  ch -alias pair \
12a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12a40 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65    [object invoke
12a50 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
12a60 69 63 20 24 65 20 49 6e 74 65 72 70 72 65 74 65  ic $e Interprete 12a70 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b r.connections] { 12a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12a90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 12aa0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 12ab0 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 to cancel any S 12ac0 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 QL queries in pr 12ad0 6f 67 72 65 73 73 20 6f 6e 20 74 68 69 73 0d 0a ogress on this.. 12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 12af0 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 63 database c 12b00 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 onnection... 12b10 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 12b20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 12b30 63 61 74 63 68 20 7b 24 70 61 69 72 20 56 61 6c catch {$pair Val
12b40 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72  ue.Cancel} error
12b50 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12b60 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
12b70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 12b80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 [appendArgs \n 12b90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12ba0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 12bb0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 12bc0 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 cancel query for 12bd0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20 connection \"" 12be0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12bf0 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 4b 65 [$pair Ke
12c00 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  y] "\", error: "
12c10 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 12c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12c30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 12c40 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 12c50 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 20 }}.. 12c60 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 } error] == 0} 12c70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12c80 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e addConstraint in 12c90 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e terruptCallback. 12ca0 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20 sqlite3.... 12cb0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
12cc0 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d  l yes\n..      }
12cd0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
12ce0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 12cf0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c [appendArgs "no, 12d00 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
12d10 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
12d20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
12d30 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 69    proc cleanupFi
12d40 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63  le { fileName {c
12d50 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 6f  ollect true} {fo
12d60 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  rce false} } {..
12d70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
12d80 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
12d90 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64  o force all pend
12da0 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62  ing "garbage" ob
12db0 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c  jects to be coll
12dc0 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20  ected,..      #
12dd0 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20        including
12de0 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74  SQLite statement
12df0 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a  s and backup obj
12e00 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c  ects; this shoul
12e10 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23  d allow..      #
12e20 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72         the under
12e30 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66  lying database f
12e40 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65  ile to be delete
12e50 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
12e60 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d     if {$collect} 12e70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12e80 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 collectGarbage 12e90 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
12ea0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12eb0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
12ec0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
12ed0 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74  file still exist
12ee0 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
12ef0 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
12f00 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 12f10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12f20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12f30 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 E: Skip deleting 12f40 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 20 73 test files if s 12f50 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 omebody sets the 12f60 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 global variable 12f70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 12f80 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e to prevent it. 12f90 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12fa0 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 if {$force
12fb0 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  || ![info exists
12fc0 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c   ::no(cleanupFil
12fd0 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
12fe0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12ff0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
13000 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68  mpt to delete th
13010 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e  e test file now.
13020 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
13030 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65           if {[se
13040 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66  t code [catch {f
13050 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65  ile delete $file 13060 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 Name} error]]} t 13070 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 13080 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 13090 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som 130a0 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 ehow failed to d 130b0 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 elete the file, 130c0 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... 130d0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 130e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
130f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
13100 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
13120 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
13130 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73  ed to delete tes
13140 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  t file \"" $file 13150 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 13160 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri 13170 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f ng cleanup, erro 13180 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
13190 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
131a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
131b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
131c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
131d0 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65  TE: Show that we
131e0 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
131f0 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20  g the file...
13200 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13210 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a      set code 0..
13220 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
13230 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 13240 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 13250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 13260 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b ==== WARNING: sk 13270 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 ipped deleting t 13280 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 est file \""$fi
13290 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
132a0 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
132b0 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a  ng cleanup\n"]..
132c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
132d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
132e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
132f0 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64  NOTE: The file d
13300 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73  oes not exist, s
13310 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20  uccess!..
13320 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
13330 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d  code 0..      }.
13340 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
13350 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  $code.. }.... 13360 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 . proc collec 13370 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 6e 6e tGarbage { chann 13380 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 el {milliseconds 13390 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 74 72 1000} {quiet tr 133a0 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ue} } {.. i 133b0 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 133c0 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 133d0 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false 133e0 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 133f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 13400 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
13410 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
13420 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 13430 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 13440 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 13450 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 13460 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 y the CLR before 13470 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 collection... " 13480 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13490 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65$result " byte
134a0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  s\n"]..        }
134b0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
134c0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
134d0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 134e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 134f0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 13500 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 13510 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 CLR memory usag 13520 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 e, error: " \.. 13530 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 13540 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
13550 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23     }....      ##
13560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135a0 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
135b0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
135c0 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74  : Repeatedly att
135d0 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20  empt to collect
135e0 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68  garbage until th
135f0 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65  e allotted numbe
13600 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
13610 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
13620 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41   has elapsed.  A
13630 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f  lways attempt to
13640 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65   collect garbage
13650 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
13660 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a  at least once...
13670 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
13680 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20  et start [clock
13690 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20  seconds]..
136a0 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b  set stop [expr {
136b0 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69  $start + ($milli
136c0 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d  seconds / 1000)}
136d0 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20 7b 0d  ]....      do {.
136e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
136f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
13700 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66  mpt to force a f
13710 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c  ull garbage coll
13720 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70  ection now.  Rep
13730 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20  ort any..
13740 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 74   #       error t
13750 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  hat is encounter
13760 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a  ed if we fail...
13770 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13780 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
13790 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
137a0 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74  GetTotalMemory t
137b0 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  rue} error]} the
137c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
137d0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 137e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 137f0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 13800 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 13810 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f full garbage co 13820 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a llection, error: 13830 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 13840 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 \n\t$error
13850 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
13860 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f  ..        set no
13870 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  w [clock seconds
13880 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65  ]..      } while
13890 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77   {$start <=$now
138a0 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70   && $now <$stop
138b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23  }....      #####
138c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
138d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
138e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
138f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13900 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ####....      if
13910 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
13920 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
13930 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d  talMemory false}
13940 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
13950 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
13960 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 13970 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 13980 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
13990 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
139a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
139b0 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
139c0 20 74 68 65 20 43 4c 52 20 61 66 74 65 72 20 63   the CLR after c
139d0 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c  ollection... " \
139e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
139f0 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c  $result " bytes\ 13a00 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. 13a10 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 13a20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
13a30 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
13a40 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
13a50 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
13a60 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43   failed to get C
13a70 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c  LR memory usage,
13a80 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
13a90 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72           \n\t $r 13aa0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 13ab0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 13ac0 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 proc getSQLite 13ad0 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 HandleCounts { c 13ae0 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 hannel {quiet fa 13af0 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 13b00 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 set result [list 13b10 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ 13b20 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c haveConstraint \ 13b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13b40 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 defineConstant.S 13b50 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 13b60 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d e.COUNT_HANDLE]} 13b70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13b80 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13b90 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69 TE: Add each cri 13ba0 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 13bb0 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 nt to the result 13bc0 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 ing list... 13bd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f #.. fo 13be0 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 reach name [list 13bf0 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 connectionCount 13c00 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 statementCount 13c10 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a backupCount] {.. 13c20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 set va 13c30 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f lue [object invo 13c40 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 13c50 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 13c60 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 13c70 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 13c80 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24 6e 61 ativeMethods$na
13c90 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me]....
13ca0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 13cb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13cc0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
13cd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13cf0 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68  "---- critical h
13d00 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20  andle count \""
13d10 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24  $name "\" is "$
13d20 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20  value \n]..
13d30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
13d40 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
13d50 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20  lt $value.. 13d60 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 13d70 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 seif {!$quiet} t
13d80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
13d90 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
13da0 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e  : The actual han
13db0 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e  dle counts are n
13dc0 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68  ot available; th
13dd0 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20  erefore, just..
13de0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
13df0 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c  eturn an empty l
13e00 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ist...        #.
13e10 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $13e20 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 channel "---- cr 13e30 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f itical handle co 13e40 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 unts unavailable 13e50 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n".. }.... 13e60 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
13e70 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
13e80 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77      proc shutdow
13e90 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65  nSQLite { channe
13ea0 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20  l {force false}
13eb0 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
13ec0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
13ed0 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
13ee0 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ure that SQLite
13ef0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
13f00 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64  completely shutd
13f10 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20  own.  This..
13f20 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65    #       is use
13f30 64 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20  d by tests that
13f40 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61  change configura
13f50 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64  tion options and
13f60 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20  /or those..
13f70 20 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65   #       that ne
13f80 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure
13f90 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69  logging is initi
13fa0 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73  alized (i.e. jus
13fb0 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20  t in case..
13fc0 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c   #       the SQL
13fd0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
13fe0 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64   was initialized
13ff0 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20   in the process
14000 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20  prior to..
14010 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
14020 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e  teLog class bein
14030 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20  g able to setup
14040 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  its logging call
14050 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20  back)...      #
14060 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20        Normally,
14070 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79  this should only
14080 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66   be performed if
14090 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65   SQLite is loade
140a0 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20  d and..      #
140b0 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75       ready for u
140c0 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
140d0 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uite...      #..
140e0 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65        if {$force 140f0 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 || [isSQLiteRea 14100 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 dy]} then {.. 14110 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14120 23 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 # BUGFIX: Make s 14130 75 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c 65 ure that any "le 14140 61 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69 6f aked" transactio 14150 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 ns and/or connec 14160 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 tions.. # 14170 20 20 20 20 20 20 20 20 20 61 72 65 20 63 6c 65 are cle 14180 61 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20 63 aned up before c 14190 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 alling the nativ 141a0 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 e shutdown funct 141b0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ion... #. 141c0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 141d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e transaction [in 141e0 66 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d fo transactions] 141f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 14200 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 14210 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14220 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c System#Data#SQL 14230 69 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73 61 ite#SQLiteTransa 14240 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 ction#*$transac
14250 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tion]} then {..
14260 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
14270 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
14280 20 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e 73         sql trans
14290 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  action rollback
142a0 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20  $transaction.. 142b0 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f } erro 142c0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d r] == 0} then {. 142d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 142e0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
142f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
14300 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 14310 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 14320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14330 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c "---- roll 14340 65 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 ed back leaked t 14350 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c ransaction \"" \ 14360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14370 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69$transacti
14380 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  on \"\n]..
14390 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
143a0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
143b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
143c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 143d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 143e0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
143f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
14400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14410 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
14420 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
14430 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 74  ollback leaked t
14440 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c  ransaction \"" \
14450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14460 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69        $transacti 14470 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 on "\", error: " 14480 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
14490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
144a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
144b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
144c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
144d0 20 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 5b      foreach db [
144e0 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  info connections
144f0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ] {..          i
14500 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  f {[string match
14510 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
14520 20 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51    System#Data#SQ
14530 4c 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite#SQLiteConne
14540 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68  ction#* $db]} th 14550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14560 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 if {[catch {sq 14570 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 l close$db} err
14580 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
14590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
145a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 145b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 145c0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
145d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
145e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
145f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f         "---- clo
14600 73 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 62  sed leaked datab
14610 61 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e  ase \"" $db \"\n 14620 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 14630 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 14640 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 14650 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
14660 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
14680 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 14690 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 146b0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 146c0 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 iled to close le 146d0 61 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 aked database \" 146e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 146f0 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22$db "\"
14700 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
14710 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 14720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 14730 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 14740 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 14750 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 14760 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 . # BUGFI 14770 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e X: Before callin 14780 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 g the native shu 14790 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 tdown function, 147a0 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a make sure both.. 147b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 147c0 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 of the PRAGMA 147d0 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 related director 147e0 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 y names are free 147f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 14800 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 14810 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 14820 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a$channel true..
14830 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
14840 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
14850 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
14860 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
14870 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
14880 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
14890 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
148a0 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65  veMethods sqlite
148b0 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20  3_shutdown..
148c0 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
148d0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
148e0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 148f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 14900 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
14910 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
14920 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
14930 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
14940 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
14950 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73  ()... ok: " $res 14960 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 14970 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 14980 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 14990 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
149a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
149b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 149c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 149d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 149e0 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 149f0 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e te3_shutdown().. 14a00 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 14a10 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
14a20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
14a30 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
14a40 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
14a50 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73   reportSQLiteRes
14a60 6f 75 72 63 65 73 20 7b 0d 0a 20 20 20 20 20 20  ources {..
14a70 20 20 20 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71        channel {q
14a80 75 69 65 74 20 66 61 6c 73 65 7d 20 7b 72 65 73  uiet false} {res
14a90 65 74 20 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63  et true} {collec
14aa0 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  t true} } {..
14ab0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
14ac0 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65  TE: If available
14ad0 2c 20 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64  , report on (and
14ae0 20 70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29   possibly reset)
14af0 20 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20   the runtime..
14b00 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66      #       conf
14b10 69 67 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73  iguration statis
14b20 74 69 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  tics...      #..
14b30 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43        if {[haveC
14b40 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43  onstraint buildC
14b50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62  onfiguration.Deb
14b60 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d  ug] && [catch {.
14b70 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
14b80 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
14b90 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20  onPublic -alias
14ba0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
14bb0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14bc0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
14bd0 74 68 6f 64 73 20 73 65 74 74 69 6e 67 52 65 61  thods settingRea
14be0 64 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d  dCounts..      }
14bf0 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e   settingReadCoun
14c00 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ts] == 0} then {
14c10 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ..        set na
14c20 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e  meCount [$settin 14c30 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e gReadCounts Coun 14c40 74 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 t].. set 14c50 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a valueCount 0.... 14c60 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 14c70 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa 14c80 69 72 20 24 73 65 74 74 69 6e 67 52 65 61 64 43 ir$settingReadC
14c90 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20  ounts {..
14ca0 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75     incr valueCou
14cb0 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d  nt [$pair Value] 14cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 14cd0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
14ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
14cf0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 14d00 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 14d20 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b -- setting \"" [ 14d30 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77$pair Key] "\" w
14d40 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20  as read " \..
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70               [$p 14d60 61 69 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d air Value] " tim 14d70 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 14d80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 14d90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
14da0 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  eset} then {..
14db0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
14dc0 63 68 20 7b 24 73 65 74 74 69 6e 67 52 65 61 64  ch {$settingRead 14dd0 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 Counts Clear} er 14de0 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then 14df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 14e00 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
14e10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
14e20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 14e30 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14e50 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 "---- reset se 14e60 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 tting statistics 14e70 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 for the previou 14e80 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 s " \.. 14e90 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f$nameCo
14ea0 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20  unt " names and
14eb0 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20  " $valueCount " 14ec0 76 61 6c 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d values read\n"]. 14ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 14ee0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 14ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14f00 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
14f10 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
14f30 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
14f40 6c 65 64 20 74 6f 20 72 65 73 65 74 20 73 65 74  led to reset set
14f50 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 20  ting statistics
14f60 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  for " \..
14f70 20 20 20 20 20 20 20 20 20 22 74 68 65 20 70 72           "the pr
14f80 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f  evious " $nameCo 14f90 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 unt " names and 14fa0 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d "$valueCount \.
14fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14fc0 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 2c 20   " values read,
14fd0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 14fe0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 14ff0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 15000 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 15010 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 if {[haveCons 15020 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 traint \.. 15030 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f defineCo 15040 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 nstant.System.Da 15050 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f ta.SQLite.INTERO 15060 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d P_VIRTUAL_TABLE] 15070 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 15080 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 [haveConstraint 15090 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 150a0 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 defineConstant 150b0 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL 150c0 69 74 65 2e 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 ite.TRACK_MEMORY 150d0 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d _BYTES]} then {. 150e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
150f0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
15100 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 15110 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 hannel "---- cur 15120 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 rent memory in u 15130 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f se by SQLiteMemo 15140 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 ry... ".. 15150 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 15160 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 15170 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 15180 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 15190 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 151a0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 151b0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 151c0 4d 65 6d 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f Memory bytesAllo 151d0 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d cated.. } 151e0 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 memory] == 0} t 151f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 15200 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
15210 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
15220 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 15230 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
15240 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d  mory " bytes\n"]
15250 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
15260 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
15270 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d  .          set m
15280 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
15290 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
152a0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 152b0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 152c0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
152d0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 152e0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 152f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 15300 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
15310 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
15320 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 15330 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 nel "---- maximu 15340 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 m memory in use 15350 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e by SQLiteMemory. 15360 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d .. ".. }. 15370 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 15380 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 15390 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 153a0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 153b0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 153c0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 153d0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d SQLite.SQLiteMem 153e0 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 ory maximumBytes 153f0 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 Allocated.. 15400 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 } memory] == 15410 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 15420 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
15430 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15440 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 15450 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 15460 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
15470 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
15480 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
15490 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
154a0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
154b0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n....          i
154c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 154d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 154e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
154f0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 15500 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 15510 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 15520 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 15530 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
15540 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
15550 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 15560 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 -- current memor 15570 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi 15580 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d te... ".. } 15590 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 155a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 155b0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 155c0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 155d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 155e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 155f0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 15600 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 thods sqlite3_me 15610 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 mory_used.. 15620 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d } memory] == 0} 15630 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15640 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
15650 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
15660 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 15670 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
15680 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a  ry " bytes\n"]..
15690 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
156a0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
156b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
156c0 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20  NOTE: Maybe the
156d0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
156e0 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ary is unavailab
156f0 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le?..        #..
15700 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
15710 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20  ry unknown....
15720 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 15730 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 15740 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
15750 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
15760 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 15770 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 15780 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 ... set res 15790 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e ult$memory; # N
157a0 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f  OTE: Return memo
157b0 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72  ry in-use to our
157c0 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20   caller.....
157d0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 157e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 157f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
15800 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f  --- maximum memo
15810 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c  ry in use by SQL
15820 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20  ite... "..
15830 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
15840 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
15850 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
15860 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
15870 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15880 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
15890 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
158a0 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d  ethods sqlite3_m
158b0 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20  emory_highwater
158c0 30 0d 0a 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72  0..      } memor
158d0 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
158e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 158f0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 15900 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
15910 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
15920 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74  gs $memory " byt 15930 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 15940 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 15950 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 15960 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 15970 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 ybe the SQLite c 15980 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 ore library is u 15990 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 navailable?.. 159a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 159b0 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f set memory unkno 159c0 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 wn.... if 159d0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
159e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
159f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 15a00 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
15a10 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
15a20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
15a30 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74   if {$collect} t 15a40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 hen {.. c 15a50 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 63 ollectGarbage$c
15a60 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d  hannel..      }.
15a70 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71  ...      if {!$q 15a80 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 15a90 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
15aa0 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65  nnel "---- curre
15ab0 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65  nt memory in use
15ac0 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22   by the CLR... "
15ad0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
15ae0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
15af0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
15b00 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66  GetTotalMemory f
15b10 61 6c 73 65 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d  alse} memory] ==
15b20 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
15b30 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
15b40 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69  is integer -stri
15b50 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65  ct $memory]} the 15b60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 15b70 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
15b80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15b90 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 15ba0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
15bb0 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a  ry " bytes\n"]..
15bc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
15bd0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
15be0 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d           set mem
15bf0 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20  ory invalid....
15c00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 15c10 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 15c20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 15c30 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
15c40 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] 15c50 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 15c60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 15c70 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 15c80 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 15c90 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 15ca0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
15cb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
15cc0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 15cd0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
15ce0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y \n]..        }
15cf0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
15d00 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 15d10 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 t.. }..... 15d20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ 15d30 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 LiteDirectories 15d40 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74 { channel {reset 15d50 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 15d60 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15d70 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 15d80 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 15d90 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e et_directory fun 15da0 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 ction is availab 15db0 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 le... #.. 15dc0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
15dd0 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
15de0 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
15df0 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  or function sqli
15e00 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
15e10 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a  rectory... "....
15e20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
15e30 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c   NOTE: This call
15e40 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
15e50 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
15e60 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65  ory function use
15e70 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  s the..      #
15e80 20 20 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c       invalid val
15e90 75 65 20 30 20 66 6f 72 20 74 68 65 20 66 69 72  ue 0 for the fir
15ea0 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68  st argument.  Th
15eb0 69 73 20 63 6f 64 65 20 69 73 20 64 65 73 69 67  is code is desig
15ec0 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ned..      #
15ed0 20 20 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63     to check if c
15ee0 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74  alling the funct
15ef0 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61  ion will raise a
15f00 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65  n exception (i.e
15f10 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ...      #
15f20 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 73 75   the actual resu
15f30 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
15f40 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74  on does not matt
15f50 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f  er as long as no
15f60 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15f70 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
15f80 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d  nged)...      #.
15f90 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
15fa0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
15fb0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
15fc0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
15fe0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
15ff0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
16000 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
16010 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f    sqlite3_win32_
16020 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20  set_directory 0
16030 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d  null..      }] =
16040 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
16050 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16060 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20  # NOTE: Calling
16070 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
16080 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
16090 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
160a0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
160b0 20 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 65     cause an exce
160c0 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65  ption; therefore
160d0 2c 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 61  , it must be ava
160e0 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20  ilable (i.e...
160f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76        #       ev
16100 65 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 6f  en though it sho
16110 75 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 69  uld return a fai
16120 6c 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 65  lure return code
16130 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20   in this..
16140 20 20 23 20 20 20 20 20 20 20 63 61 73 65 29 2e    #       case).
16150 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16160 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
16170 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  nt sqlite3_win32
16180 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a  _set_directory..
16190 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
161a0 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. 161b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 161c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 # NOTE: Doe 161d0 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e s our caller wan 161e0 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 t to reset the d 161f0 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 irectories?.. 16200 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 16210 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e if {$reset} then
16220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
16230 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
16240 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65  E: Now make sure
16250 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
16260 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  d temporary dire
16270 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20  ctories are..
16280 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
16290 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61 75  eset their defau
162a0 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68  lt values, which
162b0 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20   should be null
162c0 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20  for both...
162d0 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e       #       Sin
162e0 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77  ce the sqlite3_w
162f0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
16300 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  ry function is a
16310 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20  vailable,..
16320 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
16330 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   it...
16340 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  #..          for
16350 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b   {set index 1} {
16360 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63  $index < 3} {inc 16370 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 r index} {.. 16380 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 16390 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 163a0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 163b0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 163c0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 163d0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 163e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 163f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 16400 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16410 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e sqlite3_win 16420 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 16430 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 20$index null..
16440 20 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75            } resu
16450 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
16460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16470 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 16480 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 164a0 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 "---- call sqlit 164b0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 164c0 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 ectory("$index
164d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
164e0 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e       ", null)...
164f0 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c   ok: " $result \ 16500 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 16510 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 16520 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
16530 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
16540 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
16550 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61          "---- ca
16560 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  ll sqlite3_win32
16570 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22  _set_directory("
16580 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20   $index \.. 16590 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 ", 165a0 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 null)... error: 165b0 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c " \n\t$result \
165c0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
165d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
165e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
165f0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
16600 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 16610 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 l no\n.... 16620 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 16630 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 OTE: Does our ca 16640 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 ller want to res 16650 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 et the directori 16660 65 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e es? This can on 16670 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ly.. # 16680 20 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64 be performed 16690 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 166a0 61 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 66 aded and ready f 166b0 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te 166c0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 166d0 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 suite... 166e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 166f0 66 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73 f {$reset && [is
16700 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68  SQLiteReady]} th
16710 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
16720 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
16730 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75  OTE: Now make su
16740 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database
16750 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69  and temporary di
16760 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20  rectories are..
16770 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
16780 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66   reset their def
16790 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69  ault values, whi
167a0 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c  ch should be nul
167b0 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20  l for both...
167c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53         #       S
167d0 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33  ince the sqlite3
167e0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
167f0 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f  tory function do
16800 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  es not..
16810 20 20 23 20 20 20 20 20 20 20 61 70 70 65 61 72    #       appear
16820 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65   to be available
16830 2c 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 69  , use the associ
16840 61 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d  ated PRAGMA comm
16850 61 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ands..
16860 23 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 2e  #       instead.
16870 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
16880 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
16890 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74   directory [list
168a0 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
168b0 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65  ctory temp_store
168c0 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20  _directory] {..
168d0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73             set s
168e0 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  ql [appendArgs "
168f0 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct 16900 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d ory " = \"\";"]. 16910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 16920 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 f {[catch {execu 16930 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 teSql$sql} resu
16940 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
16950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16960 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 16970 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16990 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 "---- execute PR 169a0 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 AGMA "$director
169b0 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c  y "... ok: \"" \
169c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
169d0 20 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e      $result \"\n 169e0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 169f0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 16a00 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
16a10 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
16a20 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
16a30 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65         "---- exe
16a40 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64  cute PRAGMA " $d 16a50 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 irectory "... er 16a60 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. 16a70 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 16a80 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
16a90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
16aa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
16ab0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
16ac0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
16ad0 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20   NOTE: Finally,
16ae0 73 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74  show the current
16af0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
16b00 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
16b10 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20  rary..      #
16b20 20 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e      directories.
16b30 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20    This can only
16b40 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20  be performed if
16b50 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64  SQLite is loaded
16b60 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16b70 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
16b80 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
16b90 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ite...      #..
16ba0 20 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69       if {[isSQLi
16bb0 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b  teReady]} then {
16bc0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
16bd0 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73  h directory [lis
16be0 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  t data_store_dir
16bf0 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72  ectory temp_stor
16c00 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a  e_directory] {..
16c10 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
16c20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 16c30 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b Args "---- check 16c40 69 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 79 ing "$directory
16c50 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20   "... "]....
16c60 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61        set sql [a
16c70 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d  ppendArgs "PRAGM
16c80 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c  A " $directory \ 16c90 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ;].... 16ca0 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 if {[catch {exec 16cb0 75 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c uteSql$sql scal
16cc0 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30  ar} result] == 0
16cd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16ce0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 16cf0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 16d00 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c "ok: \""$resul
16d10 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  t \"\n]..
16d20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
16d30 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $16d40 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 16d50 72 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e rgs "error: " \n 16d60 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
16d70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
16d80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
16d90 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
16da0 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65  roc loadSQLiteTe
16db0 73 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61  stSettings { cha
16dc0 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d  nnel {suffix ""}
16dd0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
16de0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
16df0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
16e00 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 74  loading the sett
16e10 69 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 73  ings if their us
16e20 61 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  age has been dis
16e30 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  abled...      #.
16e40 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66  .      if {![inf
16e50 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71  o exists ::no(sq
16e60 6c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73  liteTestSettings
16e70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
16e80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
16e90 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74   NOTE: Load cust
16ea0 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f  om per-user and/
16eb0 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74  or per-host test
16ec0 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a   settings now...
16ed0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16ee0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
16ef0 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  sts ::tcl_platfo
16f00 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20  rm(user)]} then
16f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
16f20 20 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c   userSettingsFil
16f30 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
16f40 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63   [getCommonDirec
16f50 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20  tory] \..
16f60 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72         [appendAr
16f70 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66  gs settings $suf 16f80 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 fix .$::tcl_pla
16f90 74 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67  tform(user) .eag
16fa0 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le]]....
16fb0 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
16fc0 74 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 73  ts $userSettings 16fd0 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 FileName]} then 16fe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 16ff0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
17000 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
17010 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 17020 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17040 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 "---- loading 17050 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 per-user test se 17060 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 17070 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17080 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e$userSettin
17090 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e  gsFileName \"...
170a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
170b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
170c0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70                up
170e0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f  level 1 [list so
170f0 75 72 63 65 20 24 75 73 65 72 53 65 74 74 69 6e  urce $userSettin 17100 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 gsFileName].. 17110 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 } error 17120 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 17130 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
17140 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
17160 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 17170 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17190 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 171a0 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 ailed to load pe 171b0 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73 20 r-user settings 171c0 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 171e0 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
171f0 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72  eName "\", error
17200 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 17210 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 17220 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 17230 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 17240 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 17250 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
17260 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
17270 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 17280 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 17290 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 172a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 172b0 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 ipped loading pe 172c0 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74 r-user test sett 172d0 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 172e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 172f0 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73$userSettings
17300 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74  FileName "\", it
17310 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
17320 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
17330 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
17340 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
17350 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
17360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17390 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
173a0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  .        if {[in
173b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f  fo exists ::tcl_
173c0 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d  platform(host)]}
173d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
173e0 20 20 20 73 65 74 20 68 6f 73 74 53 65 74 74 69     set hostSetti
173f0 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  ngsFileName [fil
17400 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f  e join [getCommo
17410 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20  nDirectory] \..
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70               [ap
17430 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67  pendArgs setting
17440 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74  s $suffix .$::t
17450 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74  cl_platform(host
17460 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20  ) .eagle]]....
17470 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
17480 65 20 65 78 69 73 74 73 20 24 68 6f 73 74 53 65  e exists $hostSe 17490 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d ttingsFileName]} 174a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 174b0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
174c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
174d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 174e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 174f0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 17500 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f "---- lo 17510 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 ading per-host t 17520 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c est settings fil 17530 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 17540 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74$host
17550 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
17560 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20   \"...\n]..
17570 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
17580 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
17590 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
175a0 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c      uplevel 1 [l
175b0 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73 74  ist source $host 175c0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 175d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 175e0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 175f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 17600 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
17610 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
17620 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 17630 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 17640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17650 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 17660 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c ING: failed to l 17670 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65 74 oad per-host set 17680 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 17690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 176a0 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69$hostSetti
176b0 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c  ngsFileName "\",
176c0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $176d0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 176e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 176f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17700 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 17710 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 17720 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
17740 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 17750 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 17770 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 --- skipped load 17780 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 ing per-host tes 17790 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 t settings file 177a0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 177b0 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65$hostSe
177c0 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22  ttingsFileName "
177d0 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
177e0 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
177f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
17800 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
17810 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
17820 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75  .....    proc ru
17830 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f  nSQLiteTestProlo
17840 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  gue {} {..
17850 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
17860 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75   Skip running ou
17870 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75  r custom prologu
17880 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e  e if the main on
17890 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  e has been..
178a0 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65    #       skippe
178b0 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
178c0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
178d0 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67  ists ::no(prolog
178e0 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e  ue.eagle)]} then
178f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
17900 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c         # NOTE: L
17910 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 65 2d  oad the "before-
17920 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73  constraints" cus
17930 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64  tom per-user and
17940 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20  /or per-host..
17950 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
17960 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e  st settings now.
17970 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
17980 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b       uplevel 1 [
17990 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54  list loadSQLiteT
179a0 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74  estSettings $::t 179b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 est_channel .bef 179c0 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ore].... 179d0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 179e0 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 E: Determine the 179f0 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e 61 names of the na 17a00 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e tive platform an 17a10 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e 0d d architecture.. 17a20 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 17a30 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform 17a40 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f [getBuildPlatfo 17a50 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 rm true].. 17a60 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 75 set architectu 17a70 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 65 re [architecture 17a80 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 ForPlatform$pla
17a90 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
17aa0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
17ab0 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 6c  OTE: Show the pl
17ac0 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69  atform and archi
17ad0 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f 20  tecture used to
17ae0 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 0d  help locate the.
17af0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
17b00 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69   native build fi
17b10 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  les...        #.
17b20 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $17b30 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 17b40 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 17b50 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 17b60 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 platform for loc 17b70 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 ating native bui 17b80 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 ld files is \"" 17b90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
17ba0 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a  platform \"\n]..
17bb0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
17bc0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 17bd0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 17be0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 17bf0 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f architecture fo 17c00 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 r locating nativ 17c10 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 e build files is 17c20 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 17c30 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72$architectur
17c40 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  e \"\n]....
17c50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
17c60 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69  NOTE: Build a li
17c70 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74  st of configurat
17c80 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77  ion files that w
17c90 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  e handle...
17ca0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
17cb0 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  t configFileName
17cc0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
17cd0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
17ce0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f  ta.SQLite.dll.co
17cf0 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nfig]....
17d00 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
17d10 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74  TE: Build a list
17d20 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61   of auxiliary Ma
17d30 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20  naged Debugging
17d40 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29  Assistants (MDA)
17d50 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
17d60 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    configuration
17d70 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
17d80 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
17d90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 64  ..        set md
17da0 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  aConfigFileNames
17db0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
17dc0 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
17dd0 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  32.exe.mda.confi
17de0 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e  g Installer.exe.
17df0 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20  mda.config \..
17e00 20 20 20 20 20 20 20 20 20 20 74 65 73 74 2e 65            test.e
17e10 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65  xe.mda.config te
17e20 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63  stlinq.exe.mda.c
17e30 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20  onfig \..
17e40 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 78 65       testef6.exe
17e50 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a  .mda.config]....
17e60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17e70 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
17e80 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74   the list of ext
17e90 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 74  ernal files that
17ea0 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f 6d   we handle.  Som
17eb0 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 20  e of..        #
17ec0 20 20 20 20 20 20 74 68 65 73 65 20 66 69 6c 65        these file
17ed0 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65 20  s may be native
17ee0 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 61  and/or managed a
17ef0 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20 61  ssemblies that a
17f00 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #
17f10 20 20 20 20 72 65 71 75 69 72 65 64 20 74 6f 20      required to
17f20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 20  perform various
17f30 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  tests...
17f40 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65  #..        set e
17f50 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
17f60 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
17f70 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
17f80 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b   EntityFramework
17f90 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 70   lib [string map
17fa0 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5b 73   [list Fx ""] [s
17fb0 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20  tring \..
17fc0 20 20 20 20 20 6d 61 70 20 5b 6c 69 73 74 20 6e       map [list n
17fd0 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 35 5d  etFx451 netFx45]
17fe0 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d   [getBuildNetFx]
17ff0 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f  ]] EntityFramewo
18000 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20  rk.dll]]....
18010 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
18020 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
18030 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20   list of native
18040 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74  assembly files t
18050 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20  hat we handle.
18060 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  The..        #
18070 20 20 20 20 20 72 65 61 73 6f 6e 20 74 68 65 20       reason the
18080 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
18090 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65 20 69 73  ite.dll" file is
180a0 20 69 6e 63 6c 75 64 65 64 20 68 65 72 65 20 69   included here i
180b0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
180c0 20 20 20 62 65 63 61 75 73 65 20 69 74 20 63 6f     because it co
180d0 75 6c 64 20 62 65 20 74 68 65 20 6d 69 78 65 64  uld be the mixed
180e0 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d  -mode assembly..
180f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
18100 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 46 69      set nativeFi
18110 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
18120 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
18130 69 74 65 33 2e 64 6c 6c 20 53 51 4c 69 74 65 2e  ite3.dll SQLite.
18140 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 53 79 73 74  Interop.dll Syst
18150 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
18160 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ll]....        #
18170 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
18180 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74  : Build the list
18190 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65   of managed asse
181a0 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20  mbly files that
181b0 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
181c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
181d0 65 74 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  et managedFileNa
181e0 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
181f0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
18200 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll
18210 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
18220 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 5c 0d 0a 20  te.Linq.dll \..
18230 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
18240 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
18250 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  6.dll]....
18260 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
18270 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20  OTE: Remove any
18280 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
18290 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
182a0 68 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72  he native and/or
182b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
182c0 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62    managed assemb
182d0 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  ly files that we
182e0 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66   handle unless f
182f0 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20  orbidden from..
18300 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
18310 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20  oing so...
18320 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
18330 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
18340 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65  :no(sqliteRemove
18350 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74  Constraints)]} t
18360 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
18370 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
18380 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  e $configFileNam 18390 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 183a0 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 183b0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 183c0 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ile_$fileName].
183d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
183e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
183f0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43  h fileName $mdaC 18400 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 18410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 18420 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 18430 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 18440 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
18450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
18460 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
18470 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c  leName $external 18480 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 18490 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 184a0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 184b0 64 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c dArgs file_ [fil 184c0 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
184d0 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ]]..          }.
184e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
184f0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 18500 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 18510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 18520 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 18530 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 18540 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
18550 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
18560 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
18570 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46  leName $managedF 18580 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 18590 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f removeCo 185a0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 185b0 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 Args file_$file
185c0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  Name]..
185d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
185e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
185f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
18600 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61   all System.Data
18610 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20  .SQLite related
18620 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64  file handling (d
18630 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20  eleting,..
18640 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e    #       copyin
18650 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20  g, and loading)
18660 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  if instructed...
18670 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18680 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
18690 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65  ists ::no(sqlite
186a0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
186b0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
186c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
186d0 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64  Skip trying to d
186e0 65 6c 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20  elete any files
186f0 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  if instructed...
18700 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
18710 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
18720 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
18730 6c 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29  leteSqliteFiles)
18740 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
18750 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
18760 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
18770 6c 65 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67  leteSqliteConfig
18780 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
18790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
187a0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
187b0 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  $configFileNames 187c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 187d0 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e tryDeleteBin 187e0 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d aryFile$fileNam
187f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
18800 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
18810 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
18820 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
18830 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
18840 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65  liteExternalFile
18850 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
18860 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
18870 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61  ch fileName $mda 18880 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 ConfigFileNames 18890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 188a0 20 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c tryDeleteBuil 188b0 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d dFile$fileName.
188c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
188d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
188e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
188f0 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65  me $externalFile 18900 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 18910 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 18920 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 teBinaryFile$fi
18930 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
18940 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
18950 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
18960 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
18970 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
18980 65 74 65 53 71 6c 69 74 65 4e 61 74 69 76 65 46  eteSqliteNativeF
18990 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
189b0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
189c0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
189d0 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d  eImplicitFiles)]
189e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
189f0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
18a00 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69  h fileName $nati 18a10 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 veFileNames {.. 18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18a30 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 tryDeleteAssemb 18a40 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 ly$fileName..
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
18a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
18a80 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
18a90 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
18aa0 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74  qliteNonImplicit
18ab0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
18ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18ad0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
18ae0 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
18af0 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65  litePlatformFile
18b00 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
18b20 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 18b30 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 18b40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 18b50 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 18b60 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
18b70 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b90 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
18ba0 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  y $fileName$pla
18bb0 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
18bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18bf0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
18c00 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
18c10 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65  liteArchitecture
18c20 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Files)] && \..
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18c40 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
18c50 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20   $architecture] 18c60 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 18c80 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 18c90 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
18ca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
18cb0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
18cc0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 18cd0 61 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72 ame$architectur
18ce0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
18cf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
18d00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
18d10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
18d20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
18d30 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
18d40 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
18d50 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e 61  deleteSqliteMana
18d60 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  gedFiles)]} then
18d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
18d80 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
18d90 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e  me $managedFileN 18da0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 18db0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 18dc0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
18dd0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
18de0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
18df0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
18e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
18e10 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
18e20 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65  E: Check for the
18e30 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75   "autoSelect" ru
18e40 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49  ntime option.  I
18e50 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20  f present,..
18e60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74        #       at
18e70 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74  tempt to automat
18e80 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68  ically select th
18e90 65 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c  e first availabl
18ea0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
18eb0 20 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20 22       build (or "
18ec0 72 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51 4c  release") of SQL
18ed0 69 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44  ite and System.D
18ee0 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20  ata.SQLite..
18ef0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f        #       fo
18f00 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20 74  r use with the t
18f10 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...
18f20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18f30 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
18f40 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c  meOption autoSel
18f50 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ect]} then {..
18f60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
18f70 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75  checkForSQLiteBu
18f80 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ilds $::test_cha 18f90 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e nnel true]} then 18fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18fb0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 18fc0 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 Releases$::test
18fd0 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20  _channel true..
18fe0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
18ff0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
19000 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19010 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
19020 20 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69 66   trying to verif
19030 79 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  y the build dire
19040 63 74 6f 72 79 20 69 66 20 69 6e 73 74 72 75 63  ctory if instruc
19050 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..
19060 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  #       otherwis
19070 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20  e, make sure it
19080 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20  actually exists
19090 6f 72 20 68 61 6c 74 20 74 68 65 20 65 6e 74 69  or halt the enti
190a0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  re..          #
190b0 20 20 20 20 20 20 74 65 73 74 69 6e 67 20 70 72        testing pr
190c0 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f 65 73  ocess if it does
190d0 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20   not exist...
190e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
190f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
19100 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66  xists ::no(verif
19110 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29  yBuildDirectory)
19120 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
19130 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19140 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
19150 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65   this point, the
19160 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
19170 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 20 61   MUST exist as a
19180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
19190 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 72 65        valid dire
191a0 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65  ctory for the te
191b0 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f  sting process to
191c0 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20   continue...
191d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
191e0 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63         set direc
191f0 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69  tory [getBuildDi
19200 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20  rectory]....
19210 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69          if {![fi
19220 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63  le exists $direc 19230 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 tory] || \.. 19240 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 ![fi 19250 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 le isdirectory$
19260 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
19270 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
19280 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
19290 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20     # NOTE: Just
192a0 70 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c  prior to actuall
192b0 79 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74 65  y halting the te
192c0 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a  sting process,..
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
192e0 20 20 20 20 20 20 61 64 64 20 61 6e 20 65 72 72        add an err
192f0 6f 72 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c  or to the test l
19300 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  og file...
19310 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
19320 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $19330 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 19340 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19360 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 "---- could not 19370 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 verify build dir 19380 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 ectory \""$dire
19390 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20  ctory \..
193a0 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
193b0 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74  all testing halt
193c0 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ed\n"]....
193d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
193e0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
193f0 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69 70   Raising a scrip
19400 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 69  t error from thi
19410 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68  s point should h
19420 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  alt..
19430 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74     #       the t
19440 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d  esting process..
19450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
19460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19470 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67  error [appendArg
19480 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19490 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
194a0 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64  t verify build d
194b0 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69  irectory \"" $di 194c0 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 rectory \.. 194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 194e0 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 , all testing ha 194f0 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 lted"].. 19500 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 19510 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 19520 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 19530 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 OTE: Skip trying 19540 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c to copy any fil 19550 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 es if instructed 19560 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 19570 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 19580 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 19590 28 63 6f 70 79 53 71 6c 69 74 65 46 69 6c 65 73 (copySqliteFiles 195a0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 195b0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 195c0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 195d0 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 opySqliteConfigF 195e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 19600 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
19610 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  configFileNames
19620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
19630 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46     tryCopyBuildF
19640 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 19650 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 19660 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 19670 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 19680 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 19690 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 78 :no(copySqliteEx 196a0 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 ternalFiles)]} t 196b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 196c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 196d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 196e0 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 44 py the Managed D 196f0 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 ebugging Assista 19700 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 67 nts (MDA) config 19710 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 uration.. 19720 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 # f 19730 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c ile for the Eagl 19740 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 e shell to the b 19750 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 uild output dire 19760 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 ctory,.. 19770 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 # wh 19780 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 6f ile using each o 19790 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 f the names of t 197a0 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 63 he various legac 197b0 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 y test.. 197c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 197d0 65 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 73 ecutables. This 197e0 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61 will help to ma 197f0 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c ke sure that all 19800 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 19810 20 20 20 20 23 20 20 20 20 20 20 20 6c 65 67 61 # lega 19820 63 79 20 74 65 73 74 73 20 72 75 6e 20 77 69 74 cy tests run wit 19830 68 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 h exactly the sa 19840 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 65 me set of Manage 19850 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d.. 19860 20 23 20 20 20 20 20 20 20 44 65 62 75 67 67 69 # Debuggi 19870 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 63 6f ng Assistants co 19880 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 nfigured... 19890 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 198a0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 198b0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 h fileName$mdaC
198c0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
198d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
198e0 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46    tryCopyBinaryF
198f0 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65  ile EagleShell.e
19900 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 22 22  xe.mda.config ""
19910 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 19920 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 19930 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 19950 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 65 NOTE: Copy the e 19960 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 xternal binaries 19970 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 , if any, to the 19980 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 0d directory that. 19990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 199a0 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 contains 199b0 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 2e the Eagle shell. 199c0 20 20 54 68 69 73 20 69 73 20 74 79 70 69 63 61 This is typica 199d0 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 lly used to make 199e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 199f0 23 20 20 20 20 20 20 20 73 75 72 65 20 61 73 73 # sure ass 19a00 65 6d 62 6c 69 65 73 20 72 65 66 65 72 65 6e 63 emblies referenc 19a10 65 64 20 62 79 20 74 68 65 20 6f 6e 65 73 20 62 ed by the ones b 19a20 65 69 6e 67 20 74 65 73 74 65 64 20 61 72 65 0d eing tested are. 19a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 19a40 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 available 19a50 20 64 75 72 69 6e 67 20 74 68 65 20 74 65 73 74 during the test 19a60 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 ing process... 19a70 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 19a90 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 each fileName$e
19aa0 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
19ab0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
19ac0 20 20 20 20 74 72 79 43 6f 70 79 45 78 74 65 72      tryCopyExter
19ad0 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  nalFile $fileNam 19ae0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 19af0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 19b00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 19b10 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 19b20 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 19b30 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d teNativeFiles)]} 19b40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 19b50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 19b60 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 19b70 49 66 20 74 68 65 20 74 65 73 74 20 70 6c 61 74 If the test plat 19b80 66 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79 20 74 form is likely t 19b90 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 he default for t 19ba0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 his.. 19bb0 20 20 20 23 20 20 20 20 20 20 20 6d 61 63 68 69 # machi 19bc0 6e 65 2c 20 61 6c 73 6f 20 74 72 79 20 74 6f 20 ne, also try to 19bd0 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 copy the native 19be0 66 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 files to the.. 19bf0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 19c00 20 20 20 20 62 69 6e 61 72 79 20 6c 6f 63 61 74 binary locat 19c10 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ion... 19c20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 19c30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 19c40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 19c50 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 SqliteImplicitFi 19c60 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 les)] && \.. 19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 [i 19c80 73 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 sDefaultBuildPla 19c90 74 66 6f 72 6d 20 74 72 75 65 5d 7d 20 74 68 65 tform true]} the 19ca0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 19cb0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 19cc0 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c eName$nativeFil
19cd0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
19cf0 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 19d00 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 19d10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 19d20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 19d30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 19d40 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 19d50 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 o(copySqliteNonI 19d60 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 19d70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19d80 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 19d90 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 19da0 6f 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 opySqlitePlatfor 19db0 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 mFiles)] && \.. 19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19dd0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 19de0 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 h$platform] > 0
19df0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19e00 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
19e10 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 19e20 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 19e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19e40 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 tryCopyAsse 19e50 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 mbly$fileName $19e60 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. 19e70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 19e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 19ea0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 19eb0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 19ec0 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 qliteArchitectur 19ed0 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 eFiles)] && \.. 19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19ef0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 19f00 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d h$architecture]
19f10 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19f30 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
19f40 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65   $nativeFileName 19f50 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 19f60 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 19f70 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
19f80 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65  me $architecture 19f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19fa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 19fb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 19fc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 19fd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 19fe0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 19ff0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 1a000 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 opySqliteManaged 1a010 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 1a020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 1a030 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 1a040 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65$managedFileName
1a050 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
1a060 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
1a070 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  mbly $fileName.. 1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1a090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1a0a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1a0b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1a0c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 1a0d0 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 ip trying to loa 1a0e0 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 d any files if i 1a0f0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 1a100 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1a110 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1a120 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 1a130 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the 1a140 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1a150 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1a160 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 1a170 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 teImplicitFiles) 1a180 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1a190 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 tryLoad 1a1a0 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 1a1b0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d Data.SQLite.dll. 1a1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1a1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1a1e0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1a1f0 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4c ::no(loadSqliteL 1a200 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e inqFiles)]} then 1a210 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a220 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 1a230 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 1a240 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 Lite.Linq.dll.. 1a250 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 1a260 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1a270 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1a280 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 36 no(loadSqliteEf6 1a290 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 1a2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 1a2b0 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 ryLoadAssembly S 1a2c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1a2d0 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 e.EF6.dll.. 1a2e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1a2f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1a300 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 1a310 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c oadSqliteNonImpl 1a320 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 icitFiles)]} the 1a330 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1a340 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1a350 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 1a360 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 litePlatformFile 1a370 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 1a380 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 1a390 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
1a3a0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20  form] > 0} then
1a3b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1a3c0 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62     tryLoadAssemb
1a3d0 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
1a3e0 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66  QLite.dll $platf 1a3f0 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 orm.. 1a400 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1a410 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1a420 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 1a430 64 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 dSqliteArchitect 1a440 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ureFiles)] && \. 1a450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1a460 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 1a470 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d h$architecture]
1a480 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a4a0 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
1a4b0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a4c0 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75  .dll $architectu 1a4d0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 re.. 1a4e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1a4f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 1a500 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1a510 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 1a520 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1a530 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1a540 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1a550 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1a560 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
1a570 66 20 5c 22 73 71 6c 69 74 65 33 2e 64 6c 6c 5c  f \"sqlite3.dll\
1a580 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20  "... " \..
1a590 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65          [file ve
1a5a0 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79  rsion [getBinary
1a5b0 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33  FileName sqlite3
1a5c0 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  .dll]] \n]..
1a5d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1a5e0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
1a5f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1a600 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1a610 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1a620 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 1a630 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 e version of \"S 1a640 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 1a650 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 l\"... " \.. 1a660 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 1a670 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 version [getBina 1a680 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 ryFileName SQLit 1a690 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 e.Interop.dll]] 1a6a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 1a6b0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 1a6c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 1a6d0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1a6e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1a6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1a700 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
1a710 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44  on of \"System.D
1a720 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22  ata.SQLite.dll\"
1a730 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ... " \..
1a740 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72         [file ver
1a750 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46  sion [getBinaryF
1a760 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44  ileName System.D
1a770 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d  ata.SQLite.dll]]
1a780 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
1a790 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
1a7a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
1a7b0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1a7c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1a7d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a7e0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 1a7f0 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e ion of \"System. 1a800 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 1a810 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 .dll\"... " \.. 1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 1a830 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 1a840 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 inaryFileName Sy 1a850 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1a860 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d .Linq.dll]] \n]. 1a870 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1a880 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 1a890 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1a8a0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1a8b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1a8d0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
1a8e0 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  f \"System.Data.
1a8f0 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5c 22  SQLite.EF6.dll\"
1a900 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ... " \..
1a910 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72         [file ver
1a920 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46  sion [getBinaryF
1a930 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44  ileName System.D
1a940 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64  ata.SQLite.EF6.d
1a950 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ll]] \n]..
1a960 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
1a970 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
1a980 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 1a990 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a9a0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 1a9b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1a9c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1a9d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1a9f0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
1aa00 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72   of \"" $platfor 1aa10 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 m \.. 1aa20 20 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 "/sqlite3.d 1aa30 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 ll\"... " [file 1aa40 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 version \.. 1aa50 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 1aa60 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 inaryFileName sq 1aa70 6c 69 74 65 33 2e 64 6c 6c 20 24 70 6c 61 74 66 lite3.dll$platf
1aa80 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  orm]] \n]..
1aa90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1aaa0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
1aab0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1aac0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1aad0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1aaf0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 1ab00 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 of \""$platfor
1ab10 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  m \..
1ab20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e       "/SQLite.In
1ab30 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  terop.dll\"... "
1ab40 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c   [file version \
1ab50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ab60 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65    [getBinaryFile
1ab70 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65  Name SQLite.Inte
1ab80 72 6f 70 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72  rop.dll $platfor 1ab90 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 m]] \n].. 1aba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1abb0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 1abc0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1abd0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1abe0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1ac00 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
1ac10 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20  f \"" $platform 1ac20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ac30 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 "/System.Data 1ac40 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e .SQLite.dll\"... 1ac50 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e " [file version 1ac60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ac70 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 [getBinaryFi 1ac80 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 leName System.Da 1ac90 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 ta.SQLite.dll$p
1aca0 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20  latform]] \n]..
1acb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1acc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1acd0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
1ace0 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 1acf0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 1ad00 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 1ad10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1ad20 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1ad30 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1ad40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1ad50 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
1ad60 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61  ersion of \"" $a 1ad70 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 rchitecture \.. 1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1ad90 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e /sqlite3.dll\".. 1ada0 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f . " [file versio 1adb0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 1adc0 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 [getBinaryF 1add0 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e ileName sqlite3. 1ade0 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 dll$architectur
1adf0 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  e]] \n]..
1ae00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1ae10 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
1ae20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1ae30 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1ae40 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1ae50 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1ae60 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 1ae70 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 f \""$architect
1ae80 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ure \..
1ae90 20 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e         "/SQLite.
1aea0 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e  Interop.dll\"...
1aeb0 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e   " [file version
1aec0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1aed0 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69      [getBinaryFi
1aee0 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e  leName SQLite.In
1aef0 74 65 72 6f 70 2e 64 6c 6c 20 24 61 72 63 68 69  terop.dll $archi 1af00 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 tecture]] \n].. 1af10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1af20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 1af30 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1af40 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1af50 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1af60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1af70 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
1af80 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63  sion of \"" $arc 1af90 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 hitecture \.. 1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 "/S 1afb0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1afc0 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 e.dll\"... " [fi 1afd0 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 le version \.. 1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 1aff0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 1b000 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1b010 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 ite.dll$archite
1b020 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  cture]] \n]..
1b030 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1b040 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
1b050 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1b060 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20  : Grab the list
1b070 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  of managed assem
1b080 62 6c 69 65 73 20 66 6f 72 20 74 68 65 20 63 75  blies for the cu
1b090 72 72 65 6e 74 20 70 72 6f 63 65 73 73 0d 0a 20  rrent process..
1b0a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
1b0b0 6e 64 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65  nd report on the
1b0c0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1b0d0 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73  ite related ones
1b0e0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1b0f0 20 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62        set assemb
1b100 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76  lies [object inv
1b110 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75  oke AppDomain.Cu
1b120 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41  rrentDomain GetA
1b130 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20  ssemblies]....
1b140 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
1b150 65 61 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61  each assembly $a 1b160 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 ssemblies {.. 1b170 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1b180 6e 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 ng match \{Syste 1b190 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 m.Data.SQLite*$
1b1a0 61 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20  assembly]} then
1b1b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1b1c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1b1d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1b1e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b1f0 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 "---- found 1b200 6c 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a loaded assembly: 1b210 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d "$assembly \n]
1b220 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1b230 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1b240 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
1b250 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1b260 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1b280 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 --- define const 1b290 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 ants for \"Syste 1b2a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e m.Data.SQLite\". 1b2b0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 1b2c0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 1b2e0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1b2f0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 1b310 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1b320 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 e.SQLite3 Define 1b330 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 Constants.. 1b340 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e } defineCon 1b350 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 stants] == 0} th 1b360 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1b370 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1b380 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1b390 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20  rgs [formatList
1b3a0 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  [lsort \..
1b3b0 20 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e            $defin 1b3c0 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e eConstants] <non 1b3d0 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e>] \n].. 1b3e0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1b3f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1b400 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75  ::test_channel u
1b410 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20  nknown\n..
1b420 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1b430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
1b440 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
1b450 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1b460 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 1b470 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 "---- sour 1b480 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 ce version of \" 1b490 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1b4a0 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d te.dll\"... "... 1b4b0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 1b4c0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1b4d0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1b4e0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1b4f0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1b500 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1b510 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 1b520 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 eConnection Prov 1b530 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 iderVersion.. 1b540 20 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e } version 1b550 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1b560 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1b570 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1b580 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74  version] == 0} t
1b590 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b5a0 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e       set version
1b5b0 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..
1b5c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1b5d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1b5e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1b5f0 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d rgs$version \n]
1b600 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
1b610 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1b620 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1b630 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c channel unknown\ 1b640 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a n.. }.. 1b650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1b660 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 1b670 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1b680 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
1b690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
1b6a0 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63  ---- source chec
1b6b0 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d  kout of \"System
1b6c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
1b6d0 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  \"... "....
1b6e0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1b6f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
1b700 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
1b710 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
1b720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1b730 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
1b740 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
1b750 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f  ction ProviderSo
1b760 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20  urceId..
1b770 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d    } sourceId] ==
1b780 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1b790 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
1b7a0 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72  ing length $sour 1b7b0 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then 1b7c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b7d0 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e set sourceId n 1b7e0 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ull.. 1b7f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1b800 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1b810 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1b820 73 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d  s $sourceId \n]. 1b830 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 1b840 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1b850 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1b860 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
1b870 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1b880 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1b890 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1b8a0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
1b8b0 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64   available build
1b8c0 73 20 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73  s (and "releases
1b8d0 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64  ") of SQLite and
1b8e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1b8f0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
1b900 4c 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  Lite...        #
1b910 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
1b920 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24  orSQLiteBuilds $1b930 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 1b940 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 1b950 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 SQLiteReleases$
1b960 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
1b970 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1b980 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77       # NOTE: Now
1b990 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f  , we need to kno
1b9a0 77 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  w if the SQLite
1b9b0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
1b9c0 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20  available..
1b9d0 20 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e     #       (i.e.
1b9e0 20 62 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e   because the man
1b9f0 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d  aged-only System
1ba00 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73  .Data.SQLite ass
1ba10 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20  embly can..
1ba20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20     #       load
1ba30 77 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65  without it; howe
1ba40 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64  ver, it cannot d
1ba50 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75  o anything usefu
1ba60 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20  l without..
1ba70 20 20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20     #       it).
1ba80 20 49 66 20 77 65 20 61 72 65 20 75 73 69 6e 67   If we are using
1ba90 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20   the mixed-mode
1baa0 61 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20  assembly and we
1bab0 61 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20  already..
1bac0 20 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69   #       found i
1bad0 74 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20  t (above), this
1bae0 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75  should always su
1baf0 63 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  cceed...
1bb00 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
1bb10 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79  ForSQLiteLibrary
1bb20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1bb30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1bb40 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 1bb50 68 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 heck if the SQLi 1bb60 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem 1bb70 62 6c 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 bly is available 1bb80 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1bb90 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 1bba0 4c 69 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 LiteInterop$::t
1bbb0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
1bbc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1bbd0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
1bbe0 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62  the SQLite datab
1bbf0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72  ase and temporar
1bc00 79 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a  y directories...
1bc10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1bc20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
1bc30 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a  eDirectories $:: 1bc40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 1bc50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1bc60 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 1bc70 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 pt to determine 1bc80 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 if various compi 1bc90 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 le-time options 1bca0 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 needed for.. 1bcb0 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 1bcc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 constraints wer 1bcd0 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 e enabled for th 1bce0 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 e managed assemb 1bcf0 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 ly. There.. 1bd00 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 # are 1bd10 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d some compile-tim 1bd20 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d e options that m 1bd30 75 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 ust also have be 1bd40 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 en enabled.. 1bd50 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 # for 1bd60 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 the interop asse 1bd70 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f mbly in order to 1bd80 20 62 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 be effective. 1bd90 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 For those.. 1bda0 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f # optio 1bdb0 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 ns, it will be a 1bdc0 73 73 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 ssumed that it w 1bdd0 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 as enabled for t 1bde0 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 he interop.. 1bdf0 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 1be00 6d 62 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 mbly if it was e 1be10 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d nabled for the m 1be20 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e anaged assembly. 1be30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1be40 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 foreach def 1be50 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 ineConstant [lis 1be60 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 1be70 20 43 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 CHECK_STATE COU 1be80 4e 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 NT_HANDLE DEBUG 1be90 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e INTEROP_CODEC IN 1bea0 54 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 TEROP_DEBUG \.. 1beb0 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 1bec0 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e OP_EXTENSION_FUN 1bed0 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 49 CTIONS INTEROP_I 1bee0 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 5c 0d 0a NCLUDE_CEROD \.. 1bef0 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 INTE 1bf00 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 20 ROP_INCLUDE_SEE 1bf10 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 INTEROP_LEGACY_C 1bf20 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 LOSE INTEROP_LOG 1bf30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1bf40 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 INTEROP_TEST_EXT 1bf50 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 ENSION INTEROP_V 1bf60 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 4e 45 54 IRTUAL_TABLE NET 1bf70 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d 0a 20 20 _20 NET_35 \.. 1bf80 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f 34 30 NET_40 1bf90 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 31 20 NET_45 NET_451 1bfa0 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 50 NET_COMPACT_20 P 1bfb0 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 LATFORM_COMPACTF 1bfc0 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 RAMEWORK \.. 1bfd0 20 20 20 20 20 20 20 20 50 52 45 4c 4f 41 44 5f PRELOAD_ 1bfe0 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 20 52 NATIVE_LIBRARY R 1bff0 45 54 41 52 47 45 54 41 42 4c 45 20 53 51 4c 49 ETARGETABLE SQLI 1c000 54 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d 0a 20 TE_STANDARD \.. 1c010 20 20 20 20 20 20 20 20 20 20 20 54 48 52 4f 57 THROW 1c020 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 52 41 _ON_DISPOSED TRA 1c030 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 CE TRACE_CONNECT 1c040 49 4f 4e 20 54 52 41 43 45 5f 44 45 54 45 43 54 ION TRACE_DETECT 1c050 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ION \.. 1c060 20 20 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 TRACE_HANDLE 1c070 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 TRACE_PRELOAD TR 1c080 41 43 45 5f 53 48 41 52 45 44 20 54 52 41 43 45 ACE_SHARED TRACE 1c090 5f 53 54 41 54 45 4d 45 4e 54 20 5c 0d 0a 20 20 _STATEMENT \.. 1c0a0 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f TRACE_ 1c0b0 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 WARNING TRACK_ME 1c0c0 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 45 5f 45 MORY_BYTES USE_E 1c0d0 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f NTITY_FRAMEWORK_ 1c0e0 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 6 \.. 1c0f0 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c USE_INTEROP_DLL 1c100 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20 USE_PREPARE_V2 1c110 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 WINDOWS] {.. 1c120 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1c130 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 1c140 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d if the compile- 1c150 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c time option is l 1c160 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 isted in the lis 1c170 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 t of.. 1c180 23 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 # "define 1c190 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 constants" kept 1c1a0 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 track of by the 1c1b0 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 1c1c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1c1d0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 1c1e0 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f orSQLiteDefineCo 1c1f0 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 nstant$::test_c
1c200 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f  hannel $defineCo 1c210 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 nstant.. 1c220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 1c230 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1c240 43 68 65 63 6b 20 69 66 20 74 68 65 20 53 79 73 Check if the Sys 1c250 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 1c260 70 72 6f 76 69 64 65 72 20 77 61 73 20 63 6f 6d provider was com 1c270 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20 piled with.. 1c280 20 20 20 20 23 20 20 20 20 20 20 20 73 75 70 70 # supp 1c290 6f 72 74 20 66 6f 72 20 61 6e 79 20 65 6e 63 72 ort for any encr 1c2a0 79 70 74 65 64 20 64 61 74 61 62 61 73 65 73 2e ypted databases. 1c2b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c2c0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f if {[haveCo 1c2d0 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 nstraint \.. 1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 defi 1c2f0 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste 1c300 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e m.Data.SQLite.IN 1c310 54 45 52 4f 50 5f 43 4f 44 45 43 5d 20 7c 7c 20 TEROP_CODEC] || 1c320 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1c330 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c haveConstraint \ 1c340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c350 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 defineConstant 1c360 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL 1c370 69 74 65 2e 49 4e 54 45 52 4f 50 5f 49 4e 43 4c ite.INTEROP_INCL 1c380 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b UDE_SEE]} then { 1c390 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1c3a0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1c3b0 20 59 65 73 2c 20 61 64 64 20 67 65 6e 65 72 69 Yes, add generi 1c3c0 63 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 c constraint for 1c3d0 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 use by the test 1c3e0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 suite... 1c3f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1c400 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 addConstraint Sy 1c410 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1c420 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 .Encryption.. 1c430 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1c440 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1c450 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 OTE: Check the c 1c460 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 urrent build yea 1c470 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 r. Basically, t 1c480 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 his indicates.. 1c490 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 1c4a0 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 hich version of 1c4b0 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 MSBuild and/or V 1c4c0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 isual Studio was 1c4d0 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 used to.. 1c4e0 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c # compil 1c4f0 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 e the assembly b 1c500 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 inaries under te 1c510 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a st... #.. 1c520 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1c530 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
1c540 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
1c550 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
1c560 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1c570 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e  te build year...
1c580 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   "....        se
1c590 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64  t year [getBuild
1c5a0 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61  Year]..        a
1c5b0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  ddConstraint [ap
1c5c0 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65  pendArgs buildYe
1c5d0 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20  ar. $year].. 1c5e0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1c5f0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1c600 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c  dArgs \" $year \ 1c610 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 "\n].... 1c620 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1c630 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 E: Check the cur 1c640 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 rent build .NET 1c650 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 Framework. Basi 1c660 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 cally, this.. 1c670 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 # ind 1c680 69 63 61 74 65 73 20 77 68 69 63 68 20 76 65 72 icates which ver 1c690 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 sion of the .NET 1c6a0 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 Framework is be 1c6b0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ing.. # 1c6c0 20 20 20 20 20 75 73 65 64 20 62 79 20 74 68 65 used by the 1c6d0 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 assembly binari 1c6e0 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a es under test... 1c6f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1c700 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1c710 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
1c720 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
1c730 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
1c740 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
1c750 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ild .NET Framewo
1c760 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  rk... "....
1c770 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65     set netFx [ge
1c780 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20  tBuildNetFx]..
1c790 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
1c7a0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
1c7b0 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20  buildFramework.
1c7c0 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20  $netFx].. 1c7d0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1c7e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1c7f0 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c  gs \" $netFx \"\ 1c800 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. 1c810 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1c820 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 Check the curre 1c830 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 nt build configu 1c840 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 ration. This sh 1c850 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 ould normally.. 1c860 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 1c870 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 e either "Debug" 1c880 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a or "Release"... 1c890 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1c8a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1c8b0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
1c8c0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
1c8d0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
1c8e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
1c8f0 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ild configuratio
1c900 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  n... "....
1c910 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74    set configurat
1c920 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e  ion [getBuildCon
1c930 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20  figuration]..
1c940 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
1c950 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62  nt [appendArgs b
1c960 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
1c970 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  n. $configuratio 1c980 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 n].. tput 1c990 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1c9a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  l [appendArgs \"
1c9b0 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   $configuration 1c9c0 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 \"\n].... 1c9d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1c9e0 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 TE: Try to setup 1c9f0 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 an interrupt ca 1ca00 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 llback using the 1ca10 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 script debugger 1ca20 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1ca30 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 that will canc 1ca40 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 el all SQL queri 1ca50 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 es in progress f 1ca60 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d or all database. 1ca70 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1ca80 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f connections kno 1ca90 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 wn to this inter 1caa0 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 preter... 1cab0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 1cac0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1cad0 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 no(sqliteInterru 1cae0 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 ptCallback)]} th 1caf0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1cb00 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 setupDbInterrupt 1cb10 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 Callback$::test
1cb20 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74  _channel $::test 1cb30 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d _log.. }. 1cb40 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1cb50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1cb60 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 eck for the nati 1cb70 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f ve runtime optio 1cb80 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d n, which would m 1cb90 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 ean we are.. 1cba0 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e # usin 1cbb0 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 g the mixed-mode 1cbc0 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 assembly... 1cbd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 1cbe0 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 heckForRuntimeOp 1cbf0 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 tion$::test_cha
1cc00 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20  nnel native....
1cc10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1cc20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
1cc30 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74  if the test suit
1cc40 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74  e should count t
1cc50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e  he number of con
1cc60 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  nections..
1cc70 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65    #       "opene
1cc80 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20  d" and "closed"
1cc90 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68  from the pool wh
1cca0 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69  en determining i
1ccb0 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20  f a test..
1ccc0 20 20 23 20 20 20 20 20 20 20 70 61 73 73 65 64    #       passed
1ccd0 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69  .  Disabling thi
1cce0 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f  s behavior is so
1ccf0 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72  metimes necessar
1cd00 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20  y (e.g...
1cd10 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20   #       during
1cd20 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 73 74  the release test
1cd30 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65 63  ing process) bec
1cd40 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20 73  ause there are s
1cd50 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20  everal..
1cd60 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68  #       tests th
1cd70 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22  at rely on the "
1cd80 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c  opened from pool
1cd90 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72  " count being gr
1cda0 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23  eater..        #
1cdb0 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f         than zero
1cdc0 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d  .  These tests m
1cdd0 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74  ay fail due to t
1cde0 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69  he non-determini
1cdf0 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20  stic..        #
1ce00 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f        behavior o
1ce10 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76  f the CLR GC, ev
1ce20 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69 73  en when there is
1ce30 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63   no bug in the c
1ce40 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ode..        #
1ce50 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74 65       being teste
1ce60 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
1ce70 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52         checkForR
1ce80 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a  untimeOption $:: 1ce90 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 test_channel noP 1cea0 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 oolCounts.... 1ceb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1cec0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 1ced0 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 1cee0 73 68 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65 should use share 1cef0 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 d-cache mode... 1cf00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1cf10 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d checkForRuntim 1cf20 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f eOption$::test_
1cf30 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61  channel sharedCa
1cf40 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  che....        #
1cf50 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1cf60 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73  : Report the res
1cf70 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f  ource usage prio
1cf80 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79  r to running any
1cf90 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20   tests...
1cfa0 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f   #..        repo
1cfb0 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65  rtSQLiteResource
1cfc0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1cfd0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 1cfe0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1cff0 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 Grab the list of 1d000 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 native modules 1d010 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 for the current 1d020 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 process and.. 1d030 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 70 # rep 1d040 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 ort on the Syste 1d050 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 m.Data.SQLite re 1d060 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 lated ones... 1d070 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1d080 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a set modules [obj 1d090 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 ect invoke \.. 1d0a0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1d0b0 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f .Diagnostics.Pro 1d0c0 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 cess.GetCurrentP 1d0d0 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d rocess Modules]. 1d0e0 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 ... objec 1d0f0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 1d100 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 module$modules
1d110 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1d120 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1d130 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 66 69  E: The module fi
1d140 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 6d 75 73  le name here mus
1d150 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e  t be normalized.
1d160 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1d170 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c           set fil
1d180 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d  eName [file norm
1d190 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46  alize [$module F 1d1a0 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 ileName]].... 1d1b0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1d1c0 6e 67 20 6d 61 74 63 68 20 2d 6e 6f 63 61 73 65 ng match -nocase 1d1d0 20 2a 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 */sqlite3.dll$
1d1e0 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
1d1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1d200 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1d210 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1d220 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d230 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 "---- found 1d240 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 loaded SQLite na 1d250 74 69 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 tive library mod 1d260 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ule: " \.. 1d270 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e$fileN
1d280 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ame \n]..
1d290 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74     } elseif {[st
1d2a0 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20  ring match \..
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 2d 6e 6f 63              -noc
1d2c0 61 73 65 20 2a 2f 53 51 4c 69 74 65 2e 49 6e 74  ase */SQLite.Int
1d2d0 65 72 6f 70 2e 64 6c 6c 20 24 66 69 6c 65 4e 61  erop.dll $fileNa 1d2e0 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 1d2f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1d300 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1d310 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1d330 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64  --- found loaded
1d340 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20   SQLite interop
1d350 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a  assembly module:
1d360 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1d370 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20        $fileName 1d380 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1d390 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1d3a0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 1d3b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1d3c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1d3d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d3e0 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74   "---- compile-t
1d3f0 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20  ime options for
1d400 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
1d410 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ary... "....
1d420 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1d430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d440 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1d450 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1d460 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d470 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1d480 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51  QLite.SQLite3 SQ
1d490 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  LiteCompileOptio
1d4a0 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  ns..          }
1d4b0 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20  compileOptions]
1d4c0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1d4d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d4e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1d4f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 [appendArgs [for 1d500 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c matList [lsort \ 1d510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d520 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e$compileOption
1d530 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a  s] <none>] \n]..
1d540 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1d550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d560 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1d570 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 1d580 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1d590 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1d5a0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 1d5b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1d5c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1d5e0 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  -- compile-time
1d5f0 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69  options for SQLi
1d600 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
1d610 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  bly... "....
1d620 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1d630 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d640 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1d650 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1d660 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d670 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1d680 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e  QLite.SQLite3 In
1d690 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69  teropCompileOpti
1d6a0 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ons..          }
1d6b0 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d   compileOptions]
1d6c0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1d6d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1d6e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1d6f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f [appendArgs [fo 1d700 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 rmatList [lsort 1d710 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d720 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f$compileOptio
1d730 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d  ns] <none>] \n].
1d740 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
1d750 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1d760 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1d770 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 1d780 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1d790 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1d7a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1d7b0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 NOTE: Show the 1d7c0 61 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 active test cons 1d7d0 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 traints... 1d7e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 1d7f0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1d800 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
1d810 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73  ---- constraints
1d820 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
1d830 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b     [formatList [
1d840 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72  lsort [getConstr
1d850 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20  aints]] <none>]
1d860 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
1d870 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1d880 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20  : Save the test
1d890 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20  constraints for
1d8a0 75 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63  use by threads c
1d8b0 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a  reated in this..
1d8c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1d8d0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61  application doma
1d8e0 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63  in.  This is nec
1d8f0 65 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61  essary because a
1d900 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20  ll the Eagle..
1d910 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74        #       "t
1d920 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66  est context" inf
1d930 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d  ormation is per-
1d940 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  thread...
1d950 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
1d960 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1d970 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73  test_constraints
1d980 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1d990 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
1d9a0 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65  constraints $::e 1d9b0 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 agle_tests(const 1d9c0 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 raints).. 1d9d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 1d9e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1d9f0 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 Load the "after 1da00 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 -constraints" cu 1da10 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e stom per-user an 1da20 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 d/or per-host.. 1da30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 1da40 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 est settings now 1da50 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1da60 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 1da70 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 [list loadSQLite 1da80 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a TestSettings$::
1da90 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66  test_channel .af
1daa0 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ter]....
1dab0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1dac0 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c  E: If necessary,
1dad0 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63   enable shared-c
1dae0 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a  ache mode now...
1daf0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1db00 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
1db10 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43  meOption sharedC
1db20 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ache]} then {..
1db30 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53           enableS
1db40 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65  haredCache $::te 1db50 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d st_channel true. 1db60 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1db70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1db80 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 1db90 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 1dba0 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 ually began (now 1dbb0 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 1dbc0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1dbd0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1dbe0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1dbf0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
1dc00 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1dc10 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 20   tests began at
1dc20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1dc30 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
1dc40 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
1dc50 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
1dc60 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1dc70 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69   runSQLiteTestFi
1dc80 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b  lesPrologue {} {
1dc90 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20  ..      uplevel
1dca0 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  1 {..        #..
1dcb0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1dcc0 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62  Setup the variab
1dcd0 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  les that refer t
1dce0 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e 6f  o the various no
1dcf0 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20  n-data files..
1dd00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
1dd10 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65  quired by the te
1dd20 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65  sts in this file
1dd30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1dd40 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74 79        set entity
1dd50 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
1dd60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1dd70 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
1dd80 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72  e EntityFramewor
1dd90 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  k.dll]....
1dda0 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 72 45    set installerE
1ddb0 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64  xeFile [getBuild
1ddc0 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 6c 6c  FileName Install
1ddd0 65 72 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20  er.exe]..
1dde0 20 73 65 74 20 73 71 6c 69 74 65 44 65 73 69 67   set sqliteDesig
1ddf0 6e 65 72 44 6c 6c 46 69 6c 65 20 5b 67 65 74 42  nerDllFile [getB
1de00 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c  uildFileName SQL
1de10 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c  ite.Designer.dll
1de20 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
1de30 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
1de40 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20  eDllFile \..
1de50 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
1de60 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  dFileName System
1de70 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
1de80 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
1de90 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
1dea0 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c 0d 0a  eLinqDllFile \..
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
1dec0 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79  BuildFileName Sy
1ded0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1dee0 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  .Linq.dll]....
1def0 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d        set system
1df00 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c  DataSQLiteEf6Dll
1df10 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
1df20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
1df30 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
1df40 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
1df50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
1df60 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b 67 65   testExeFile [ge
1df70 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74  tBuildFileName t
1df80 65 73 74 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20  est.exe]..
1df90 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78    set testLinqEx
1dfa0 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46  eFile [getBuildF
1dfb0 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71  ileName testlinq
1dfc0 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 20 73  .exe]..        s
1dfd0 65 74 20 74 65 73 74 45 66 36 45 78 65 46 69 6c  et testEf6ExeFil
1dfe0 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
1dff0 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 65 5d  ame testef6.exe]
1e000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1e010 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1e020 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6c  etup the variabl
1e030 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
1e040 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 61 74   the various dat
1e050 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20  a files..
1e060 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65   #       require
1e070 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69  d by the tests i
1e080 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20  n this file...
1e090 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e0a0 20 73 65 74 20 74 65 73 74 4c 69 6e 71 4f 75 74   set testLinqOut
1e0b0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
1e0c0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
1e0d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1e0e0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
1e0f0 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 6e 71  taPath] testlinq
1e100 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .out]]....
1e110 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e 64 45    set northwindE
1e120 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  fDbFile [file na
1e130 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
1e140 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
1e150 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65     [file dirname
1e160 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
1e170 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
1e180 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 20 20  aPath]]] \..
1e190 20 20 20 20 20 20 20 20 74 65 73 74 6c 69 6e 71          testlinq
1e1a0 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 5d   northwindEF.db]
1e1b0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
1e1c0 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66   nonWalDbFile [f
1e1d0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
1e1e0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
1e1f0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
1e200 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
1e210 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a   nonWal.db]]....
1e220 20 20 20 20 20 20 20 20 73 65 74 20 77 61 6c 44          set walD
1e230 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  bFile [file nati
1e240 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
1e250 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
1e260 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
1e270 61 74 61 50 61 74 68 5d 20 77 61 6c 2e 64 62 5d  ataPath] wal.db]
1e280 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
1e290 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1e2a0 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e 73 74  The various inst
1e2b0 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 6c 6f  all/uninstall lo
1e2c0 67 20 66 69 6c 65 73 20 75 73 65 64 20 74 6f 20  g files used to
1e2d0 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20 20 20  test the..
1e2e0 20 20 23 20 20 20 20 20 20 20 64 65 73 69 67 6e    #       design
1e2f0 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74 20  -time component
1e300 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  installer...
1e310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
1e320 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  et testInstallVs
1e330 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2005LogFile [fil
1e340 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
1e350 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
1e360 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
1e370 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
1e380 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
1e390 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2005.log]]....
1e3a0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e        set testIn
1e3b0 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69  stallVs2008LogFi
1e3c0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
1e3d0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
1e3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
1e3f0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
1e400 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f  Path] Installer_
1e410 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d  Test_Vs2008.log]
1e420 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
1e430 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
1e440 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  10LogFile [file
1e450 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
1e460 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
1e470 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
1e480 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73  estDataPath] Ins
1e490 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
1e4a0 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  10.log]]....
1e4b0 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74      set testInst
1e4c0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
1e4d0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
1e4e0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
1e500 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
1e510 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65  th] Installer_Te
1e520 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d  st_Vs2012.log]].
1e530 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ...        set t
1e540 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33  estInstallVs2013
1e550 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
1e560 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
1e570 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
1e580 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
1e590 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61  tDataPath] Insta
1e5a0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33  ller_Test_Vs2013
1e5b0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
1e5c0 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74    set testUninst
1e5d0 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65  allVs2005LogFile
1e5e0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
1e5f0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
1e600 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
1e610 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
1e620 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f  th] Uninstaller_
1e630 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d  Test_Vs2005.log]
1e640 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
1e650 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
1e660 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2008LogFile [fil
1e670 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
1e680 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
1e690 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
1e6a0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55  eTestDataPath] U
1e6b0 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f  ninstaller_Test_
1e6c0 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2008.log]]....
1e6d0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
1e6e0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c  UninstallVs2010L
1e6f0 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
1e700 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
1e710 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
1e720 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
1e730 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
1e740 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
1e750 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  0.log]]....
1e760 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73     set testUnins
1e770 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c  tallVs2012LogFil
1e780 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
1e790 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
1e7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
1e7b0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
1e7c0 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72  ath] Uninstaller
1e7d0 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67  _Test_Vs2012.log
1e7e0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
1e7f0 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56  t testUninstallV
1e800 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69  s2013LogFile [fi
1e810 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
1e820 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
1e830 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
1e840 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
1e850 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  Uninstaller_Test
1e860 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2013.log]]...
1e870 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23  .        #######
1e880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e8c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1e8d0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
1e8e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1e8f0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
1e900 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e    [file tail $en 1e910 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 1e920 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 1e930 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 1e940 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
1e950 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79 46 72 61  annel $entityFra 1e960 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 meworkDllFile.. 1e970 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1e980 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 1e990 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 1e9a0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 1e9b0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 1e9c0 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 tail$installerE
1e9d0 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
1e9e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
1e9f0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 1ea00 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74 61 6c 6c channel$install
1ea10 65 72 45 78 65 46 69 6c 65 20 49 6e 73 74 61 6c  erExeFile Instal
1ea20 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20 20 20 20  ler.exe..
1ea30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1ea40 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
1ea50 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1ea60 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
1ea70 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $1ea80 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c sqliteDesignerDl 1ea90 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b lFile]]]} then { 1eaa0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 1eab0 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
1eac0 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74 65 44 65  hannel $sqliteDe 1ead0 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 0d 0a 20 signerDllFile.. 1eae0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1eaf0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 1eb00 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 1eb10 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 1eb20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 1eb30 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 tail$systemData
1eb40 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d  SQLiteDllFile]]]
1eb50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1eb60 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
1eb70 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
1eb80 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
1eb90 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  DllFile..
1eba0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1ebb0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
1ebc0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1ebd0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
1ebe0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $1ebf0 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 1ec00 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 LinqDllFile]]]} 1ec10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1ec20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
1ec30 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79  test_channel $sy 1ec40 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 stemDataSQLiteLi 1ec50 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 nqDllFile.. 1ec60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1ec70 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 1ec80 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1ec90 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 1eca0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 1ecb0 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
1ecc0 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d  teEf6DllFile]]]}
1ecd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ece0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
1ecf0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73  $test_channel$s
1ed00 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
1ed10 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20  f6DllFile..
1ed20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1ed30 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
1ed40 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1ed50 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
1ed60 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
1ed70 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d   $testExeFile]]] 1ed80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1ed90 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 1eda0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $1edb0 74 65 73 74 45 78 65 46 69 6c 65 20 74 65 73 74 testExeFile test 1edc0 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d .exe.. }. 1edd0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 1ede0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 1edf0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 1ee00 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 1ee10 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
1ee20 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d  tLinqExeFile]]]}
1ee30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ee40 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
1ee50 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
1ee60 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 74  estLinqExeFile t
1ee70 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a 20 20 20  estlinq.exe..
1ee80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1ee90 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
1eea0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1eeb0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
1eec0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
1eed0 69 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69  il $testEf6ExeFi 1eee0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 1eef0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 1ef00 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
1ef10 6e 65 6c 20 24 74 65 73 74 45 66 36 45 78 65 46  nel $testEf6ExeF 1ef20 69 6c 65 20 74 65 73 74 65 66 36 2e 65 78 65 0d ile testef6.exe. 1ef30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1ef40 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 1ef50 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 1ef60 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 1ef70 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 1ef80 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 e tail$testLinq
1ef90 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  OutFile]]]} then
1efa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
1efb0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 1efc0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 _channel$testLi
1efd0 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20 20 20 20  nqOutFile..
1efe0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1eff0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
1f000 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1f010 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
1f020 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
1f030 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46   $northwindEfDbF 1f040 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 1f050 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 1f060 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
1f070 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45  nnel $northwindE 1f080 66 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 fDbFile.. 1f090 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1f0a0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1f0b0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1f0c0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1f0d0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1f0e0 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d  nonWalDbFile]]]}
1f0f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1f100 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
1f110 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e  $test_channel$n
1f120 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20  onWalDbFile..
1f130 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1f140 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
1f150 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1f160 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
1f170 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
1f180 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d  il $walDbFile]]] 1f190 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1f1a0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 1f1b0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $1f1c0 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 walDbFile.. 1f1d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1f1e0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 1f1f0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1f200 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 1f210 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 1f220 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
1f230 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  005LogFile]]]} t
1f240 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f250 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 1f260 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
1f270 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f  tInstallVs2005Lo
1f280 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
1f290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1f2a0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
1f2b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1f2c0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
1f2d0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 1f2e0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c stInstallVs2008L 1f2f0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 1f300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 1f310 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
1f320 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73  channel $testIns 1f330 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c tallVs2008LogFil 1f340 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 1f350 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 1f360 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 1f370 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 1f380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 1f390 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
1f3a0 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
1f3b0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
1f3c0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
1f3d0 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 1f3e0 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c nel$testInstall
1f3f0 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20  Vs2010LogFile..
1f400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1f410 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
1f420 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
1f430 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
1f440 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
1f450 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 1f460 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d lVs2012LogFile]] 1f470 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1f480 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 1f490 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
1f4a0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 1f4b0 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 12LogFile.. 1f4c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1f4d0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 1f4e0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1f4f0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 1f500 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 1f510 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
1f520 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  013LogFile]]]} t
1f530 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f540 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 1f550 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
1f560 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f  tInstallVs2013Lo
1f570 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
1f580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1f590 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
1f5a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1f5b0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
1f5c0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 1f5d0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 1f5e0 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 5LogFile]]]} the 1f5f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 1f600 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
1f610 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 1f620 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f ninstallVs2005Lo 1f630 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 1f640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1f650 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 1f660 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 1f670 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 1f680 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
1f690 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
1f6a0 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  8LogFile]]]} the
1f6b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
1f6c0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 1f6d0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
1f6e0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  ninstallVs2008Lo
1f6f0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
1f700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1f710 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
1f720 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1f730 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
1f740 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 1f750 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 1f760 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 0LogFile]]]} the 1f770 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 1f780 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
1f790 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 1f7a0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f ninstallVs2010Lo 1f7b0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 1f7c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1f7d0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 1f7e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 1f7f0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 1f800 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
1f810 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
1f820 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  2LogFile]]]} the
1f830 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
1f840 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 1f850 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
1f860 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  ninstallVs2012Lo
1f870 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  gFile..        }
1f880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1f890 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
1f8a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1f8b0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
1f8c0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 1f8d0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 1f8e0 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 3LogFile]]]} the 1f8f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 1f900 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
1f910 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 1f920 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f ninstallVs2013Lo 1f930 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d gFile.. } 1f940 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1f950 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 ..... proc ru 1f960 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 nSQLiteTestFiles 1f970 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 Epilogue {} {.. 1f980 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b uplevel 1 { 1f990 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 .. unset 1f9a0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 -nocomplain \.. 1f9b0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 testU 1f9c0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f ninstallVs2013Lo 1f9d0 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 gFile testUninst 1f9e0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 1f9f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1fa00 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 1fa10 30 31 30 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 010LogFile testU 1fa20 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f ninstallVs2008Lo 1fa30 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 gFile \.. 1fa40 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 testUninsta 1fa50 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 llVs2005LogFile 1fa60 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 1fa70 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 3LogFile \.. 1fa80 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 testInst 1fa90 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 1faa0 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 1fab0 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 10LogFile \.. 1fac0 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 testIns 1fad0 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c tallVs2008LogFil 1fae0 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 e testInstallVs2 1faf0 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 005LogFile.... 1fb00 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 unset -noc 1fb10 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 omplain \.. 1fb20 20 20 20 20 20 20 20 6e 6f 72 74 68 77 69 6e 64 northwind 1fb30 45 66 44 62 46 69 6c 65 20 74 65 73 74 4c 69 6e EfDbFile testLin 1fb40 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20 20 20 20 qOutFile \.. 1fb50 20 20 20 20 20 20 20 20 77 61 6c 44 62 46 69 6c walDbFil 1fb60 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a e nonWalDbFile.. 1fb70 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 .. unset 1fb80 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 -nocomplain \.. 1fb90 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 45 testE 1fba0 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 4c 69 f6ExeFile testLi 1fbb0 6e 71 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 nqExeFile \.. 1fbc0 20 20 20 20 20 20 20 20 20 74 65 73 74 45 78 65 testExe 1fbd0 46 69 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 File systemDataS 1fbe0 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 QLiteEf6DllFile 1fbf0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s 1fc00 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c ystemDataSQLiteL 1fc10 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79 73 74 65 inqDllFile syste 1fc20 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 mDataSQLiteDllFi 1fc30 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 1fc40 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 sqliteDesigner 1fc50 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c 65 DllFile installe 1fc60 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 rExeFile \.. 1fc70 20 20 20 20 20 20 20 20 65 6e 74 69 74 79 46 72 entityFr 1fc80 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a ameworkDllFile.. 1fc90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 1fca0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 ... proc runS 1fcb0 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 QLiteTestEpilogu 1fcc0 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e {} {.. #. 1fcd0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S 1fce0 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 kip running our 1fcf0 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 custom epilogue 1fd00 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 if the main one 1fd10 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 has been.. 1fd20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e # skipped. 1fd30 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1fd40 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1fd50 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 ts ::no(epilogue 1fd60 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b .eagle)]} then { 1fd70 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1fd80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 1fd90 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 w when our tests 1fda0 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 actually ended 1fdb0 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 (now)... 1fdc0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 1fdd0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1fde0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1fe00 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  - System.Data.SQ
1fe10 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 65 64  Lite tests ended
1fe20 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20   at " \..
1fe30 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d       [clock form
1fe40 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64  at [clock second
1fe50 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  s]] \n]....
1fe60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1fe70 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22  NOTE: Load the "
1fe80 65 70 69 6c 6f 67 75 65 22 20 63 75 73 74 6f 6d  epilogue" custom
1fe90 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72   per-user and/or
1fea0 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 0d 0a   per-host test..
1feb0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1fec0 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
1fed0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1fee0 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73    uplevel 1 [lis
1fef0 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74  t loadSQLiteTest
1ff00 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74  Settings $::test 1ff10 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 _channel .epilog 1ff20 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ue].... # 1ff30 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 .. # BUGF 1ff40 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65 63 6b IX: Before check 1ff50 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 72 65 ing the final re 1ff60 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65 20 62 sources in use b 1ff70 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a y SQLite, make.. 1ff80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ff90 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66 20 74 sure both of t 1ffa0 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 he PRAGMA relate 1ffb0 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 d directory name 1ffc0 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 s are freed... 1ffd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ffe0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 1fff0 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 irectories$::te
20000 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  st_channel true.
20010 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
20020 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c        # NOTE: Al
20030 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72 65  so report the re
20040 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 66 74  source usage aft
20050 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74  er running the t
20060 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ests...        #
20070 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74  ..        report
20080 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20  SQLiteResources
20090 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 200a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 200b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 200c0 70 6f 72 74 20 74 68 65 20 63 72 69 74 69 63 61 port the critica 200d0 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 l handle counts 200e0 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 after running th 200f0 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 e tests... 20100 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67 65 74 #.. get 20110 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e SQLiteHandleCoun 20120 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
20130 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  el....        #.
20140 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
20150 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20 64   If necessary, d
20160 69 73 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61  isable shared-ca
20170 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20  che mode now...
20180 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
20190 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d    if {[hasRuntim
201a0 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61  eOption sharedCa
201b0 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  che]} then {..
201c0 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68          enableSh
201d0 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73  aredCache \$::tes
201e0 74 5f 63 68 61 6e 6e 65 6c 20 66 61 6c 73 65 0d  t_channel false.
201f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
20200 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
20210 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
20220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
20260 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
20270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20280 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59  # END Eagle ONLY
20290 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
202a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
202b0 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
202c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
202d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
202e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
202f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20300 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20  ..  }....  #..
20310 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65  # NOTE: Save the
20320 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72   name of the dir
20330 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ectory containin
20340 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20  g this file...
20350 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20  #..  if {![info
20360 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69  exists common_di
20370 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
20380 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e  ..    set common
20390 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  _directory [file
203a0 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73   dirname [info s
203b0 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a  cript]]..  }....
203c0 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50    #..  # NOTE: P
203d0 72 6f 76 69 64 65 20 74 68 65 20 53 79 73 74 65  rovide the Syste
203e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65  m.Data.SQLite te
203f0 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68  st package to th
20400 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
20410 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70    #..  package p
20420 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61  rovide System.Da
20430 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31  ta.SQLite.Test 1
20440 2e 30 0d 0a 7d 0d 0a                             .0..}..