System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 1b9bd4f9d562e93d3193ccdecb480751972f0db6:

• File Tests/common.eagle — part of check-in [9c7aa64aed] at 2014-12-08 22:25:03 on branch trunk — Modify the test suite to support testing with shared-cache enabled. (user: mistachkin size: 130357)

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 54 65 73 74 4f proc getTestO 71c0: 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 verridesPreamble 71d0: 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 { {extraVarName 71e0: 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 s ""} } {.. 71f0: 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c set varNames [l 7200: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ist].... #. 7210: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 7220: 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 f available, sta 7230: 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 73 74 rt with the mast 7240: 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 er list of test 7250: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. 7260: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 7270: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 7280: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 7290: 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 sts ::test_overr 72a0: 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ides] && \.. 72b0: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 [llength$
72c0: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73  ::test_overrides
72d0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
72e0: 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
72f0: 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a  end varNames $:: 7300: 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a test_overrides.. 7310: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 7320: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 7330: 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62 : If requested b 7340: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 y our caller, ad 7350: 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c d any additional 7360: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 7370: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 20 74 # names t 7380: 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 o copy now... 7390: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 73a0: 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 61 56 [llength$extraV
73b0: 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68  arNames] > 0} th
73c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76  en {..        ev
73d0: 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61  al lappend varNa
73e0: 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e 61 6d  mes $extraVarNam 73f0: 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 es.. }.... 7400: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7410: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 7420: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment 7430: 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 to be returned b 7440: 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 61 63 y processing eac 7450: 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 h.. # 7460: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 variable name a 7470: 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 6e 65 nd adding the ne 7480: 63 65 63 65 73 73 61 72 79 20 73 63 72 69 70 74 cecessary script 7490: 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a fragments for.. 74a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 61 # ea 74b0: 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 ch one... # 74c0: 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu 74d0: 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 lt "".... f 74e0: 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 oreach varName$
74f0: 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  varNames {..
7500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7510: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
7520: 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 61   qualified globa
7530: 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  l variable name.
7540: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
7550: 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56 61 72       set fullVar
7560: 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73  Name [appendArgs
7570: 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d   :: $varName]... 7580: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 7590: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does 75a0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 65 78 the variable ex 75b0: 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e 74 65 ist in this inte 75c0: 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 3f rpreter context? 75d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 75e0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 75f0: 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 xists$fullVarNa
7600: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
7610: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7620: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 65      # NOTE: Appe
7630: 6e 64 20 61 20 73 63 72 69 70 74 20 66 72 61 67  nd a script frag
7640: 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75  ment to the resu
7650: 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63 6f 72  lt that will cor
7660: 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20  rectly..
7670: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 61    #       copy a
7680: 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c  ny contained val
7690: 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e  ue to another in
76a0: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78  terpreter contex
76b0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
76c0: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
76d0: 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 74  d result \n "set
76e0: 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20   " $fullVarName 76f0: 22 20 5c 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c " \{" [set$full
7700: 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20  VarName] \}..
7710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
7720: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7730: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
7740: 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   result contains
7750: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72   one or more scr
7760: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61  ipt fragments, a
7770: 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23  ppend a..      #
7780: 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d         newline..
7790: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
77a0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
77b0: 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d  th $result] > 0} 77c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 77d0: 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c append result \ 77e0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 77f0: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
7800: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
7810: 20 20 70 72 6f 63 20 67 65 74 41 70 70 44 6f 6d    proc getAppDom
7820: 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70  ainPreamble { {p
7830: 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66 66 69  refix ""} {suffi
7840: 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  x ""} } {..
7850: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
7860: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
7870: 20 72 65 74 75 72 6e 73 20 61 20 74 65 73 74 20   returns a test
7880: 73 65 74 75 70 20 73 63 72 69 70 74 20 66 72 61  setup script fra
7890: 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  gment suitable f
78a0: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  or..      #
78b0: 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 20    evaluation by
78c0: 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  an interpreter c
78d0: 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f  reated in an iso
78e0: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
78f0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
7900: 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 63   domain.  The sc
7910: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65  ript fragment be
7920: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c  ing returned wil
7930: 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65 64 20  l be surrounded
7940: 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  by..      #
7950: 20 20 74 68 65 20 70 72 65 66 69 78 20 61 6e 64    the prefix and
7960: 20 73 75 66 66 69 78 20 22 73 63 72 69 70 74 20   suffix "script
7970: 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65 63 69  fragments" speci
7980: 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  fied by our call
7990: 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  er,..      #
79a0: 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68 65 20     if any.  The
79b0: 65 6e 74 69 72 65 20 73 63 72 69 70 74 20 62 65  entire script be
79c0: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c  ing returned wil
79d0: 6c 20 62 65 20 73 75 62 73 74 69 74 75 74 65 64  l be substituted
79e0: 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20 20 20   via..      #
79f0: 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20      [subst], in
7a00: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f  the context of o
7a10: 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72  ur caller, befor
7a20: 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  e being returned
7a30: 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ...      #
7a40: 20 54 68 69 73 20 73 74 65 70 20 69 73 20 6e 65   This step is ne
7a50: 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 20  cessary so that
7a60: 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e  some limited con
7a70: 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  text information
7a80: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
7a90: 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74   primarily relat
7aa0: 65 64 20 74 6f 20 74 68 65 20 74 65 73 74 69 6e  ed to the testin
7ab0: 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 63  g directories, c
7ac0: 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72 72 65  an be transferre
7ad0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
7ae0: 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
7af0: 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61  ter in the isola
7b00: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ted application
7b10: 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69  domain, making i
7b20: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7b30: 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73   able to success
7b40: 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20  fully run tests
7b50: 74 68 61 74 20 72 65 71 75 69 72 65 20 6f 6e 65  that require one
7b60: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d   or more of the.
7b70: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
7b80: 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74  iles in one of t
7b90: 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 63  he testing direc
7ba0: 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 73  tories.  Callers
7bb0: 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d   should keep in.
7bc0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
7bd0: 69 6e 64 20 74 68 61 74 20 74 68 65 20 74 65 73  ind that the tes
7be0: 74 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  t script fragmen
7bf0: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  t being returned
7c00: 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d   cannot rely on.
7c10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
7c20: 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  ny script librar
7c30: 79 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 61  y procedures tha
7c40: 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 64  t are not provid
7c50: 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 0d  ed by the Eagle.
7c60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c  .      #       l
7c70: 69 62 72 61 72 79 20 70 61 63 6b 61 67 65 20 28  ibrary package (
7c80: 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65  i.e. "init.eagle
7c90: 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  "), including th
7ca0: 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62 79 0d  ose provided by.
7cb0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
7cc0: 68 65 20 45 61 67 6c 65 20 74 65 73 74 20 70 61  he Eagle test pa
7cd0: 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 68  ckage, unless th
7ce0: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  e file containin
7cf0: 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 64  g them is loaded
7d00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7d10: 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d  manually via som
7d20: 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 73  e other mechanis
7d30: 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75  m (e.g. by inclu
7d40: 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61 74 65  ding appropriate
7d50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7d60: 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  [package require
7d70: 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f  ] or [source] co
7d80: 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20 70 72  mmands in the pr
7d90: 65 66 69 78 20 6f 72 20 73 75 66 66 69 78 0d 0a  efix or suffix..
7da0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63        #       sc
7db0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 29 2e  ript fragments).
7dc0: 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69    Also, all vari
7dd0: 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references
7de0: 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a  and all nested..
7df0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
7e00: 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f  mmands (i.e. tho
7e10: 73 65 20 69 6e 20 73 71 75 61 72 65 20 62 72 61  se in square bra
7e20: 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 64  ckets) contained
7e30: 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20   in the final..
7e40: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72       #       scr
7e50: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77 69 6c  ipt fragment wil
7e60: 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67 20 65  l end up being e
7e70: 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20  valuated in the
7e80: 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a  context of the..
7e90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
7ea0: 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65  lling interprete
7eb0: 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 61  r and not the ta
7ec0: 72 67 65 74 20 69 6e 74 65 72 70 72 65 74 65 72  rget interpreter
7ed0: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 0d   created in the.
7ee0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
7ef0: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
7f00: 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73  ion domain unles
7f10: 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 67  s the dollar sig
7f20: 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 65  ns and/or square
7f30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7f40: 62 72 61 63 6b 65 74 73 20 61 72 65 20 73 70 65  brackets are spe
7f50: 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 69  cially quoted wi
7f60: 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d  th backslashes..
7f70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7f80: 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20  return [uplevel
7f90: 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61  1 [list subst [a
7fa0: 70 70 65 6e 64 41 72 67 73 20 24 70 72 65 66 69  ppendArgs $prefi 7fb0: 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 x {.. if 7fc0: 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 {[hasRuntimeOpti 7fd0: 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e on native]} then 7fe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 7ff0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 ject invoke Inte 8000: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 8010: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 e AddRuntimeOpti 8020: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 on native.. 8030: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 }.. } [g 8040: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 etTestOverridesP 8050: 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 reamble [list pa 8060: 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d th test_channel] 8070: 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 ]$suffix]]]..
8080: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
8090: 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c   tryCopyExternal
80a0: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  File {..
80b0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c      fileName {pl
80c0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46  atform ""} {newF
80d0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72  ileName ""} {ver
80e0: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  bose false} } {.
80f0: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
8100: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78  eFileName [getEx
8110: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24  ternalFileName $8120: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 8130: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 8140: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
8150: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
8160: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb 8170: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 8180: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
8190: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
81a0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
81b0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
81c0: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20  skipped copying
81d0: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22  external file \"
81e0: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 81f0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 8200: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does 8210: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. 8220: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 8230: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. 8240: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 8250: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
8260: 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d  ewFileName] > 0}
8270: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8280: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
8290: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
82a0: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e  leName $newFileN 82b0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
82c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
82d0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
82e0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
82f0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 8300: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
8310: 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  m]..      }....
8320: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44       set targetD
8330: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
8340: 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69  irname $targetFi 8350: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 8360: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 8370: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c if {![fil 8380: 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 e exists$target
8390: 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  Directory]} then
83a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   {..          fi
83b0: 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74  le mkdir $target 83c0: 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. 83d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 }.. fi 83e0: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
83f0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $8400: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. 8410: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t 8420: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 8430: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
8440: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
8450: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8460: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78 74  "---- copied ext
8470: 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20  ernal file from
8480: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  \"" $sourceFileN 8490: 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c ame "\" to \"" \ 84a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 ..$t
84b0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22  argetFileName \"
84c0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  \n]..      } els
84d0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
84e0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 84f0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 8500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 8510: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f --- failed to co 8520: 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 py external file 8530: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
8540: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
8550: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20           "\" to
8560: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e  \"" $targetFileN 8570: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 8580: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 8590: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69 proc tryCopyBi 85a0: 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20 20 naryFile {.. 85b0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName 85c0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { 85d0: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 newFileName ""} 85e0: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 {verbose false} 85f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 } {.. set s 8600: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 ourceFileName [g 8610: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 8620: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74$fileName $plat 8630: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 form].... i 8640: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists 8650: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
8660: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
8670: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} 8680: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8690: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
86a0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
86b0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
86c0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70        "---- skip
86d0: 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61  ped copying bina
86e0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75  ry file \"" $sou 86f0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. 8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 8710: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex 8720: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. 8730: 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 }.. retu 8740: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rn.. }.... 8750: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 8760: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 length$newFile
8770: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
8780: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  {..        set t
8790: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
87a0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
87b0: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c  $newFileName$pl
87c0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
87d0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
87e0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
87f0: 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ame [getBuildFil
8800: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20  eName $fileName 8810: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20$platform]..
8820: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74    }....      set
8830: 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79   targetDirectory
8840: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $8850: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d targetFileName]. 8860: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 8870: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 tch {.. i 8880: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists 8890: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72$targetDirector
88a0: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
88b0: 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72        file mkdir
88c0: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72   $targetDirector 88d0: 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 y.. }.. 88e0: 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 file copy 88f0: 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 -force$sourceFi
8900: 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69  leName $targetFi 8910: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d leName.. }] 8920: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 8930: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
8940: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
8950: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
8960: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
8970: 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65  pied binary file
8980: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63   from \"" $sourc 8990: 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f eFileName "\" to 89a0: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 89b0: 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e$targetFileN
89c0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
89d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
89e0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 89f0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 8a00: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 8a10: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 "---- failed 8a20: 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 20 to copy binary 8a30: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
8a40: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
8a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22  .            "\"
8a60: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46   to \"" $targetF 8a70: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. 8a80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 8a90: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f .. proc tryCo 8aa0: 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 pyBuildFile {.. 8ab0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN 8ac0: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" 8ad0: 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 } {newFileName " 8ae0: 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 "} {verbose fals 8af0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se 8b00: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName 8b10: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa 8b20: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl 8b30: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... 8b40: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 8b50: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
8b60: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
8b70: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 8b80: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 8b90: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
8ba0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
8bb0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
8bc0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
8bd0: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75  ipped copying bu
8be0: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f  ild file \"" $so 8bf0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a urceFileName \.. 8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 8c10: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e 8c20: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. 8c30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.. ret 8c40: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... 8c50: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 8c60: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c g length$newFil
8c70: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  eName] > 0} then
8c80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
8c90: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
8ca0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
8cb0: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24  e $newFileName$
8cc0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20  platform]..
8cd0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
8ce0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
8cf0: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
8d00: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa 8d10: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 me$platform]..
8d20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
8d30: 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74  set targetDirect
8d40: 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ory [file dirnam
8d50: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam 8d60: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 8d70: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 8d80: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 8d90: 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 sts$targetDirec
8da0: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
8db0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b           file mk
8dc0: 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63  dir $targetDirec 8dd0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d tory.. }. 8de0: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f . file co 8df0: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 py -force$sourc
8e00: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65  eFileName $targe 8e10: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 tFileName.. 8e20: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { 8e30: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 8e40: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
8e50: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
8e60: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
8e70: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69   copied build fi
8e80: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 8e90: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" 8ea0: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. 8eb0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
8ec0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
8ed0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
8ee0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 8ef0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 8f00: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 8f10: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 8f20: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 ed to copy build 8f30: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
8f40: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
8f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
8f60: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target 8f70: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 8f80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 8f90: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 ... proc tryD 8fa0: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 8fb0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 { fileName {plat 8fc0: 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 form ""} {verbos 8fd0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 e false} } {.. 8fe0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 8ff0: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 9000: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p 9010: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... 9020: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 9030: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
9040: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9050: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th 9060: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9070: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
9080: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
9090: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
90a0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64     "---- skipped
90b0: 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79   deleting binary
90c0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 90d0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 90e0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe 90f0: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 9100: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 9110: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. 9120: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 9130: 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 {[catch {file de 9140: 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d lete$fileName}]
9150: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
9160: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 9170: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 9180: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 9190: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 "---- de 91a0: 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 6c leted binary fil 91b0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
91c0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
91d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
91e0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 91f0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 9200: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 9210: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to 9220: 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69 delete binary fi 9230: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
9240: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
9250: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
9260: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 69  roc tryDeleteBui
9270: 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  ldFile { fileNam
9280: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
9290: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20  {verbose false}
92a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
92b0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c  ileName [getBuil
92c0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  dFileName $fileN 92d0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
92e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
92f0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 9300: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 9310: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
9320: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
9330: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 9340: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 9350: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 9360: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 9370: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 kipped deleting 9380: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 build file \""$
9390: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
93a0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
93b0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
93c0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
93d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
93e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
93f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69    if {[catch {fi
9400: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e  le delete $fileN 9410: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ame}] == 0} then 9420: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 9430: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
9440: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
9450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
9460: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64  -- deleted build
9470: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 9480: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 9490: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 94a0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
94b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
94c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
94d0: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
94e0: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64   to delete build
94f0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 9500: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 9510: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 9520: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73 proc tryCopyAs 9530: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 sembly {.. 9540: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b fileName { 9550: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 platform ""} {pd 9560: 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 b true} {verbose 9570: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 9580: 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 tryCopyBuildF 9590: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ile$fileName $p 95a0: 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62 latform ""$verb
95b0: 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ose....      if
95c0: 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20  {$pdb} then {.. 95d0: 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 tryCopyBu 95e0: 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 ildFile [appendA 95f0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 9600: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d [file rootnam 9610: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 e$fileName] .pd
9620: 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20  b] $platform "" 9630: 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20$verbose..
9640: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
9650: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41   proc tryDeleteA
9660: 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20  ssembly {..
9670: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20         fileName
9680: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70  {platform ""} {p
9690: 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73  db true} {verbos
96a0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  e false} } {..
96b0: 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e      tryDeleteBin
96c0: 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  aryFile $fileNam 96d0: 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 e$platform $ver 96e0: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 bose.... if 96f0: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a {$pdb} then {..
9700: 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
9710: 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70  eBinaryFile [app
9720: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
9730: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f         [file roo
9740: 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  tname $fileName] 9750: 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d .pdb]$platform
9760: 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20   $verbose.. 9770: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 9780: 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 proc tryLoadAs 9790: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d sembly { fileNam 97a0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 97b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 } {.. set f 97c0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina 97d0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
97e0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. 97f0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 9800: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 tch {.. s 9810: 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a et assembly [obj 9820: 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 ect load -loadty 9830: 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 pe File -alias$
9840: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
9850: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b   }] == 0} then {
9860: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9870: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77       # NOTE: Now
9880: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73  , add the necess
9890: 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61  ary test constra
98a0: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  int...        #.
98b0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
98c0: 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f  traint [file roo
98d0: 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c  tname [file tail
98e0: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a   $fileName]].... 98f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9900: 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 # NOTE: Grab 9910: 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d the image runtim 9920: 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 e version from t 9930: 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61 he assembly beca 9940: 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 use.. # 9950: 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 65 73 several tes 9960: 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 ts rely on it ha 9970: 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76 ving a certain v 9980: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 alue... # 9990: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 99a0: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 99b0: 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 rgs [file tail$
99c0: 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20  fileName] _ \..
99d0: 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 73 73             [$ass 99e0: 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 embly ImageRunti 99f0: 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 meVersion]].... 9a00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 9a10: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 9a20: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f the full path o 9a30: 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c f the loaded fil 9a40: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 9a50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 return$f
9a60: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d  ileName..      }
9a70: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
9a80: 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   ""..    }.....
9a90: 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65     proc isSQLite
9aa0: 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20  Ready {} {..
9ab0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9ac0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
9ad0: 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f  e must return no
9ae0: 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74  n-zero only if t
9af0: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  he SQLite native
9b00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
9b10: 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 20  library and the
9b20: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
9b30: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  te managed assem
9b40: 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a  bly are loaded..
9b50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
9b60: 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20  d ready for use
9b70: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
9b80: 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74  e.  Currently, t
9b90: 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20  his procedure..
9ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
9bb0: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e  uld be called on
9bc0: 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b 74 72  ly after the [tr
9bd0: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70  yLoadAssembly] p
9be0: 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20  rocedure has..
9bf0: 20 20 20 20 23 20 20 20 20 20 20 20 62 65 65 6e      #       been
9c00: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65   called to probe
9c10: 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e   for the System.
9c20: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61  Data.SQLite mana
9c30: 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ged assembly..
9c40: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20      #       and
9c50: 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c  the [checkForSQL
9c60: 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68  ite] procedure h
9c70: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74  as been called t
9c80: 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20  o probe for..
9c90: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53     #       the S
9ca0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62  QLite native lib
9cb0: 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c  rary; otherwise,
9cc0: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   this procedure
9cd0: 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20  will simply..
9ce0: 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79     #       alway
9cf0: 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a  s return zero...
9d00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
9d10: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20  eturn [expr {..
9d20: 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73         [haveCons
9d30: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61  traint System.Da
9d40: 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68  ta.SQLite] && [h
9d50: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  aveConstraint SQ
9d60: 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d  Lite]..      }].
9d70: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
9d80: 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 6e 65  roc matchMachine
9d90: 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d   { platform } {.
9da0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9db0: 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79  # NOTE: An empty
9dc0: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the
9dd0: 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74  platform means t
9de0: 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73  hat the build is
9df0: 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20   not..      #
9e00: 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20      [primarily]
9e10: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20  a native build;
9e20: 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c  therefore, it al
9e30: 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20  ways matches...
9e40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
9e50: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
9e60: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30   $platform] == 0 9e70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 9e80: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 9e90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 9ea0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 9eb0: 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 Does the specif 9ec0: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 ied platform mat 9ed0: 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 ch up to the cur 9ee0: 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 rent process?.. 9ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9f00: 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b {$platform eq [
9f10: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
9f20: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor 9f30: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 m(machine)]} the 9f40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 9f50: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 9f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 9f70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 9f80: 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f specified platfo 9f90: 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 rm does not matc 9fa0: 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c h up with the pl 9fb0: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 atform.. # 9fc0: 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 for the cu 9fd0: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a rrent process... 9fe0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 9ff0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. a000: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc a010: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 checkForSQLiteBu a020: 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b ilds { channel { a030: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 select false} } a040: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. a050: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check a060: 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 62 for every possib a070: 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 le valid combina a080: 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 tion of values u a090: 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 sed when.. a0a0: 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 # locating a0b0: 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f out the build o a0c0: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c utput directory, a0d0: 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76 showing each av a0e0: 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 ailable.. # a0f0: 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 72 build var a100: 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 iation along the a110: 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a way... #.. a120: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na a130: 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 tive [list false a140: 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 true] {.. a150: 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b foreach year [ a160: 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b getBuildYears] { a170: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore a180: 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ach configuratio a190: 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 n [getBuildConfi a1a0: 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 gurations] {.. a1b0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. a1c0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: a1d0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the a1e0: 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20 effective build a1f0: 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 platform. This a200: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 is.. a210: 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e # based on a220: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 whether or not a230: 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 a [primarily] na a240: 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 tive build.. a250: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # a260: 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 is being used. a270: 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 For [primarily] a280: 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 non-native build a290: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s,.. a2a0: 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69 6c # this wil a2b0: 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74 l be an empty st a2c0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 ring... a2d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. a2e0: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b set platform [ a2f0: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d getBuildPlatform a300: 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20$native]....
a310: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $a320: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA a330: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. a340: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che a350: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System a360: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 .Data.SQLite bui a370: 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a ld \"" [expr \.. a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a390: 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 {$native ? "nati
a3a0: 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70  ve/" : ""}] [exp
a3b0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  r {[string lengt
a3c0: 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h \..
a3d0: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20       $platform] a3e0: 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 > 0 ? [appendArg a3f0: 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a s$platform /] :
a400: 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20   ""}] $year \.. a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f / a420: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
a430: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20  "\"... "]....
a440: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
a450: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
a460: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
a470: 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74  qualified direct
a480: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65  ory where the ne
a490: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20  cessary..
a4a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d       #       com
a4b0: 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74  ponents for Syst
a4c0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73  em.Data.SQLite s
a4d0: 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d  hould be found..
a4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
a500: 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42  directory [joinB
a510: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e  uildDirectory $n a520: 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 ative \.. a530: 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 [getBui a540: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d ldBaseDirectory] a550: 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d$year $platform a560: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d$configuration]
a570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
a580: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
a590: 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65   NOTE: Do the ne
a5a0: 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78  cessary files ex
a5b0: 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c  ist?  Currently,
a5c0: 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d   no other steps.
a5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
a5e0: 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74       are taken t
a5f0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62 75  o verify this bu
a600: 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20  ild is actually
a610: 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20  viable...
a620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a630: 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64      if {[isBuild
a640: 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76  Available $nativ a650: 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 e$directory]} t
a660: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
a670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a680: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68        # NOTE: Wh
a690: 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d  en in "select" m
a6a0: 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c  ode, automatical
a6b0: 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69  ly select the fi
a6c0: 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rst..
a6d0: 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c     #       avail
a6e0: 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79  able build of Sy
a6f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
a700: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
a710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a720: 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74  #       immediat
a730: 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ely...
a740: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
a750: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74       if {$select a760: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e && [matchMachin a770: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 e$platform]} th
a780: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
a790: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
a7a0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
a7b0: 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69   Manually overri
a7c0: 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64  de all the build
a7d0: 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63   directory selec
a7e0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..
a7f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
a800: 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69  lated test setti
a810: 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ngs in order to
a820: 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c 64  force this build
a830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a840: 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73    #       of Sys
a850: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
a860: 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  to be used...
a870: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a890: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
a8a0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
a8b0: 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  ive [expr {$nati a8c0: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ve ? \.. a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 41 64 64 "Add a8e0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a RuntimeOption" : a8f0: 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f "RemoveRuntimeO a900: 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d ption"}] native. a910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... a920: 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 set ::test_ye a930: 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 20 ar$year..
a940: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
a950: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70  test_platform $p a960: 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. a970: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t a980: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio a990: 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e n$configuration
a9a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
a9b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann a9c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ a9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a9e0: 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c 65 "yes, sele a9f0: 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b 24 cted (" [expr {$
aa00: 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65  native ? "native
aa10: 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  /" : ""}] \..
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa30: 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20   [expr {[string
aa40: 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform aa50: 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 ] > 0 ? [appendA aa60: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. aa70: 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74$plat
aa80: 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24  form /] : ""}] $aa90: 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 year /$configur
aaa0: 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a  ation ")\n"]....
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aac0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
aad0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
aae0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
aaf0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan ab00: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. ab10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. ab20: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { ab30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ab40: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
ab50: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o\n..
ab60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
ab70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
ab80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
ab90: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d  urn false..    }
aba0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
abb0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65  eckForSQLiteRele
abc0: 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ases { channel {
abd0: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20  select false} }
abe0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
abf0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
ac00: 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 65  for past release
ac10: 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61  s of System.Data
ac20: 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64  .SQLite in the d
ac30: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
ac40: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65  #       containe
ac50: 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d  d in the "System
ac60: 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e  .Data.SQLite" en
ac70: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
ac80: 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20  le, if..      #
ac90: 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a        present...
aca0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
acb0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
acc0: 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74  ::env(System.Dat
acd0: 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d  a.SQLite)] && \.
ace0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
acf0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76  ng length $::env ad00: 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c (System.Data.SQL ad10: 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ite)] > 0} then ad20: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. ad30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu ad40: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu ad50: 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 alified director ad60: 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 y where the nece ad70: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 ssary.. # ad80: 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 component ad90: 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 s for System.Dat ada0: 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 a.SQLite should adb0: 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 be found... adc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se add0: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c t directory [fil ade0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi adf0: 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. ae00: 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79$::env(Sy
ae10: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
ae20: 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72  ) [getReleaseVer
ae30: 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20  sion]]]....
ae40: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe ae50: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. ae60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- ae70: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for ae80: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi ae90: 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c te release \"" \ aea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 ..$d
aeb0: 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20  irectory "\"...
aec0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  "]....        if
aed0: 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69   {[isReleaseAvai
aee0: 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79  lable $directory aef0: 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e platform]} then af00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if af10: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length af20: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30$platform] == 0
af30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
af40: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
af50: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20  rm unknown..
af60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
af70: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74       if {$select af80: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e && [matchMachin af90: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 e$platform]} th
afa0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
afb0: 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69    set ::build_di
afc0: 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f  rectory $directo afd0: 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ry.... afe0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
aff0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
b000: 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24  s, selected (" $b010: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. b020: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ... r b030: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. b040: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. b050: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput b060: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
b070: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24  ndArgs "yes (" $b080: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. b090: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. b0a0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. b0b0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs b0c0: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d$channel no\n...
b0d0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
b0e0: 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d  ch path [lsort -
b0f0: 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65  decreasing [file
b100: 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79   list $directory b110: 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 *]] {.. b120: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex b130: 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b ists$path] && [
b140: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79  file isdirectory
b150: 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d   $path]} then {. b160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t b170: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
b180: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b1a0: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
b1b0: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
b1c0: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22  Lite release \""
b1d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b1e0: 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e        $path "\". b1f0: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 .. "].... b200: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 if {[isRe b210: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 leaseAvailable$
b220: 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20  path platform]}
b230: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b240: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
b250: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat b260: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e form] == 0} then b270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. b280: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f set platfo b290: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 rm unknown.. b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... b2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b2c0: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 if {$select &&
b2d0: 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70  [matchMachine $p b2e0: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { b2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. b300: 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f set ::build_ b310: 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d directory$path.
b320: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
b330: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan b340: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs b350: 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 "yes, selected ( b360: 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e "$platform ")\n
b370: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
b380: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
b390: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rue..
b3a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3c0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b3d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 [appendArgs "yes b3e0: 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 ("$platform ")
b3f0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
b400: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
b410: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
b420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
b430: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b440: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 no\n.. b450: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. b460: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. b470: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. b480: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. b490: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
b4a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b4b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b4c0: 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e  "---- environmen
b4d0: 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73  t variable \"Sys
b4e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
b4f0: 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20  " is not " \..
b500: 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20            "set,
b510: 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66  skipping check f
b520: 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e  or releases...\n
b530: 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  "]..      }....
b540: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
b550: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
b560: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51   proc checkForSQ
b570: 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68  LiteLibrary { ch
b580: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20  annel } {..
b590: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b5a0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f b5b0: 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c or SQLite core l b5c0: 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 ibrary... ".... b5d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch b5e0: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec b5f0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags b600: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. b610: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System b620: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL b630: 69 74 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 ite3 SQLiteVersi b640: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 on.. } vers b650: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then b660: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. b670: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch b680: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 eck if the retur b690: 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 ned version was b6a0: 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 null. If so, ma b6b0: 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 ke it easy.. b6c0: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 # to s b6d0: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d pot... #. b6e0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st b6f0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 ring length$ver
b700: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
b710: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
b720: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a  t version null..
b730: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
b740: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b750: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
b760: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73  to query the Fos
b770: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74  sil source ident
b780: 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51  ifier for the SQ
b790: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20  Lite..        #
b7a0: 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61        core libra
b7b0: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ry...        #..
b7c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
b7d0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
b7e0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
b7f0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
b800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
b810: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
b820: 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69  ite.SQLite3 SQLi
b830: 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  teSourceId..
b840: 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d      } sourceId]}
b850: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b860: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
b870: 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65  # NOTE: We faile
b880: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46  d to query the F
b890: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65  ossil source ide
b8a0: 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20  ntifier...
b8b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
b8c0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e   set sourceId un
b8d0: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d  known..        }
b8e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
b8f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
b900: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
b910: 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72  rned Fossil sour
b920: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61  ce identifier wa
b930: 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20  s null.  If..
b940: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
b950: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f   make it easy to
b960: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20   spot...
b970: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
b980: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s b990: 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 ourceId] == 0} t b9a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. b9b0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu b9c0: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ll.. }... b9d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. b9e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c # NOTE: Yes, b9f0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core ba00: 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73 library appears ba10: 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 to be available ba20: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. ba30: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra ba40: 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 int SQLite.... ba50: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
ba60: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
ba70: 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f   "yes (" $versio ba80: 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 n " "$sourceId
ba90: 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20  ")\n"]..      }
baa0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
bab0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n bac0: 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 o\n.. }.. bad0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc bae0: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 checkForSQLiteI baf0: 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c nterop { channel bb00: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput bb10: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
bb20: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51   checking for SQ
bb30: 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
bb40: 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  embly... "....
bb50: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
bb60: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
bb70: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
bb80: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
bb90: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
bba0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
bbb0: 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69  te3 InteropVersi
bbc0: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73  on..      } vers
bbd0: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
bbe0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
bbf0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
bc00: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
bc10: 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20  ned version was
bc20: 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61  null.  If so, ma
bc30: 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20  ke it easy..
bc40: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73      #       to s
bc50: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  pot...        #.
bc60: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
bc70: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver bc80: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then bc90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se bca0: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a t version null.. bcb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... bcc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bcd0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt bce0: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos bcf0: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident bd00: 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 ifier for the SQ bd10: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 Lite.. # bd20: 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 core libra bd30: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ry... #.. bd40: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat bd50: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. bd60: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f bd70: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic bd80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. bd90: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL bda0: 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 ite.SQLite3 Inte bdb0: 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 ropSourceId.. bdc0: 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d } sourceId] bdd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bde0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. bdf0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c # NOTE: We fail be00: 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 ed to query the be10: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id be20: 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 entifier... be30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. be40: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 set sourceId u be50: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. be60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. be70: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: be80: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret be90: 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 urned Fossil sou bea0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 rce identifier w beb0: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 as null. If.. bec0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so bed0: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 , make it easy t bee0: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 o spot... bef0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { bf00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
bf10: 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
bf20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bf30: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
bf40: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
bf50: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
bf60: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
bf70: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74  , the SQLite int
bf80: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70  erop assembly ap
bf90: 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69  pears to be avai
bfa0: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...
bfb0: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
bfc0: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 49  nstraint SQLiteI
bfd0: 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20 20 20  nterop....
bfe0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel bff0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 [appendArgs "ye c000: 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 s ("$version "
c010: 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e  " $sourceId ")\n c020: 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 "].. } else c030: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput c040: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
c050: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
c060: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
c070: 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e  ckForSQLiteDefin
c080: 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e  eConstant { chan
c090: 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20  nel name } {..
c0a0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann c0b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- c0d0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S c0e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit c0f0: 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e e define constan c100: 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 t \""$name \..
c110: 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20           "\"...
c120: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  "]....      if {
c130: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
c140: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
c150: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
c160: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
c170: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
c180: 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69  ite.SQLite3 Defi
c190: 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  neConstants..
c1a0: 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74     } defineConst
c1b0: 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ants] == 0} then
c1c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
c1d0: 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact
c1e0: 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43  -nocase $defineC c1f0: 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 onstants$name]
c200: 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20  != -1} then {..
c210: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
c220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
c230: 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63  s, this define c
c240: 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62  onstant was enab
c250: 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e  led when the man
c260: 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  aged..
c270: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
c280: 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a   was compiled...
c290: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
c2a0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
c2b0: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
c2c0: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e   defineConstant.
c2d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c2e0: 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20  te. $name].... c2f0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
c300: 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..
c310: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
c320: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c330: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. c340: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. c350: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c360: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
c370: 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20   error\n..
c380: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
c390: 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d   proc getDateTim
c3a0: 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20  eFormat {} {..
c3b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
c3c0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
c3d0: 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72  ure simply retur
c3e0: 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22  ns the "default"
c3f0: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
c400: 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20   used..      #
c410: 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74       by the test
c420: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23   suite...      #
c430: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
c440: 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74  o exists ::datet
c450: 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c  ime_format] && \
c460: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
c470: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61  ing length $::da c480: 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e tetime_format] > c490: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. c4a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # c4b0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th c4c0: 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 e manually overr c4d0: 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 idden value for c4e0: 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 the DateTime for c4f0: 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d mat... #. c500: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return c510: 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d$::datetime_form
c520: 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  at..      } else
c530: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
c540: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
c550: 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31  eturn an ISO8601
c560: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
c570: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
c580: 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20   SQLite,..
c590: 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d    #       System
c5a0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e  .Data.SQLite, an
c5b0: 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72  d suitable for r
c5c0: 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69  ound-tripping wi
c5d0: 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  th the..
c5e0: 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65  #       DateTime
c5f0: 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72   class of the fr
c600: 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69  amework.  If thi
c610: 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67  s value is chang
c620: 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ed,..        #
c630: 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73       various tes
c640: 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20  ts may fail...
c650: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c660: 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d   return "yyyy-MM
c670: 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46  -dd HH:mm:ss.FFF
c680: 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d  FFFFK"..      }.
c690: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
c6a0: 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f  roc enumerableTo
c6b0: 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c  List { enumerabl
c6c0: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  e } {..      set
c6d0: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a   result [list]..
c6e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
c6f0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d  ing length $enum c700: 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 erable] == 0 || c710: 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20 22$enumerable eq "
c720: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {..
c730: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72         return $r c740: 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a esult.. }.. c750: 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 .. object f c760: 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69 74 oreach -alias it c770: 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b em$enumerable {
c780: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
c790: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 74  tring length $it c7a0: 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d em] > 0} then {. c7b0: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 . lappe c7c0: 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65 6d nd result [$item
c7d0: 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20   ToString]..
c7e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
c7f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $c800: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c result.. }... c810: 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 68 .. proc catch c820: 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72 69 AndReturn { scri c830: 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20 66 pt {stackTrace f c840: 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74 72 alse} {strict tr c850: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue} } {.. # c860: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: c870: 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63 72 Evaluate the scr c880: 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 ipt provided by c890: 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 our caller in th c8a0: 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 eir context,.. c8b0: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70 74 # capt c8c0: 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20 72 uring both the r c8d0: 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72 65 esult and the re c8e0: 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 turn code... c8f0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 #.. set c c900: 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 ode [catch {uple c910: 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20 72 vel 1$script} r
c920: 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  esult]....
c930: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
c940: 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 20   Did the script
c950: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
c960: 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 65  caller NOT raise
c970: 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20   an error?..
c980: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$c990: 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 strict &&$code
c9a0: 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 74  == 0 || !$strict c9b0: 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 &&$code != 1}
c9c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c9d0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
c9e0: 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 74  E: Success.  Ret
c9f0: 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20  urn a list with
ca00: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  the return code
ca10: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e 0d  and the result..
ca20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ca30: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
ca40: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d   $code$result].
ca50: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20  .      } elseif
ca60: 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 68  {$stackTrace} th ca70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. ca80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: ca90: 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 Failure. Our c caa0: 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66 75 aller wants a fu cab0: 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 ll stack trace ( cac0: 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d if applicable),. cad0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # cae0: 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 return a list w caf0: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 ith the return c cb00: 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 ode and the resu cb10: 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 lt verbatim... cb20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. cb30: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 return [list$c
cb40: 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20  ode $result].. cb50: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. cb60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. cb70: 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 # NOTE: Failure cb80: 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f . Our caller do cb90: 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 es not want a fu cba0: 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 ll stack trace ( cbb0: 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 if.. # cbc0: 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29 2c applicable), cbd0: 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 return a list w cbe0: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 ith the return c cbf0: 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a ode, the error.. cc00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # cc10: 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e 74 code for the int cc20: 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74 68 erpreter, and th cc30: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 e error message cc40: 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 up to the.. cc50: 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e 74 # point cc60: 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63 6b where the stack cc70: 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73 74 trace should st cc80: 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d art... #. cc90: 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 64 . set ind cca0: 65 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 ex [string first ccb0: 20 22 20 20 20 61 74 20 22 20 24 72 65 73 75 6c " at "$resul
ccc0: 74 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c 69  t]; # HACK: Reli
ccd0: 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 20  able?....
cce0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63   return [list $c ccf0: 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 ode$::errorCode
cd00: 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 21   [expr {$index ! cd10: 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20 20 = -1 ? \.. cd20: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 72 [string tr cd30: 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 im [string range cd40: 20 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64 65$result 0 $inde cd50: 78 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d 5d x]] :$result}]]
cd60: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
cd70: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f  .....    proc co
cd80: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith
cd90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
cda0: 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f  ext memory symbo
cdb0: 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c 74  ls strict result
cdc0: 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56  sVarName errorsV
cdd0: 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73  arName fileNames
cde0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72  ..            ar
cdf0: 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  gs } {..      #.
ce00: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
ce10: 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 6e  ince we are goin
ce20: 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d 65  g to use this me
ce30: 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c  thod name a lot,
ce40: 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 0d   assign it to a.
ce50: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
ce60: 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a  ariable first...
ce70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
ce80: 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 65  et add Reference
ce90: 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d  dAssemblies.Add.
cea0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
ceb0: 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65    # NOTE: Create
cec0: 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e   the base comman
ced0: 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e  d to evaluate an
cee0: 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72  d add the proper
cef0: 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20  ty settings..
cf00: 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
cf10: 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79  are almost alway
cf20: 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20  s needed by our
cf30: 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 2e  unit tests (i.e.
cf40: 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 20   the System..
cf50: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 53     #       and S
cf60: 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d  ystem.Data assem
cf70: 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e  bly references).
cf80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
cf90: 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69   set command [li
cfa0: 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
cfb0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74  compileCSharp $t cfc0: 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d ext$memory $sym cfd0: 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 73 bols$strict res
cfe0: 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20  ults errors \..
cff0: 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy d000: 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 stem.dll$add Sy
d010: 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61  stem.Data.dll $a d020: 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73 61 dd System.Transa d030: 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 ctions.dll \.. d040: 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79 73$add Sys
d050: 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a  tem.Xml.dll]....
d060: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d070: 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74   NOTE: Add all t
d080: 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65  he provided file
d090: 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62   names as assemb
d0a0: 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a  ly references...
d0b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66        #..      f
d0c0: 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
d0d0: 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  $fileNames {.. d0e0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f lappend co d0f0: 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 mmand$add [getB
d100: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f d110: 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. d120: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. d130: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add d140: 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 the extra argume d150: 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 nts, if any, to d160: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 the command to e d170: 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 valuate... d180: 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 #.. eval la d190: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 ppend command$a
d1a0: 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  rgs....      #..
d1b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c        # NOTE: Al
d1c0: 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72  ias the compiler
d1d0: 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61   local results a
d1e0: 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62  nd errors variab
d1f0: 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  les to the..
d200: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62    #       variab
d210: 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65  le names provide
d220: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
d230: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d240: 20 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74   upvar 1 $result d250: 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 sVarName results d260: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 d270: 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65$errorsVarName e
d280: 72 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23  rrors....      #
d290: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
d2a0: 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e  Evaluate the con
d2b0: 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c  structed [compil
d2c0: 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64  eCSharp] command
d2d0: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d   and return the.
d2e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72  .      #       r
d2f0: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d  esult...      #.
d300: 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d  .      eval $com d310: 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a mand.. }..... d320: 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 proc isMemor d330: 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d yDb { fileName } d340: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. d350: 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 # NOTE: Is th d360: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 e specified data d370: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 base file name r d380: 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f eally an in-memo d390: 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 ry database?.. d3a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret d3b0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 urn [expr {$file
d3c0: 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79  Name eq ":memory
d3d0: 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  :" || \..
d3e0: 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65     [string range
d3f0: 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d   $fileName 0 12] d400: 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 eq "file::memor d410: 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d y:"}].. }.... d420: 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c . proc isTabl d430: 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 eInDb { name {va d440: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. d450: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # d460: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t d470: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var d480: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" d490: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context d4a0: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # d4b0: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. d4c0: 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 It contains the d4d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect d4e0: 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 ion handle that d4f0: 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 will be.. # d500: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 used to e d510: 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79 xecute the query d520: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 used to determi d530: 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ne if the named d540: 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 table is.. d550: 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 # present d560: 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65 in that database d570: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d580: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
d590: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
d5a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
d5b0: 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  Use the sqlite_m
d5c0: 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64  aster table to d
d5d0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the
d5e0: 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a  named table is..
d5f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
d600: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
d610: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  abase...      #.
d620: 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b  .      set sql {
d630: 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  ..        SELECT
d640: 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73   COUNT(*) FROM s
d650: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
d660: 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65  RE type = 'table
d670: 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d  ' AND name = ?;.
d680: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
d690: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
d6a0: 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  E: Return non-ze
d6b0: 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ro if the named
d6c0: 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74  table is present
d6d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
d6e0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b    return [expr {
d6f0: 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65  ..        [sql e
d700: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
d710: 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20  scalar $db$sql
d720: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72  [list param1 Str
d730: 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d  ing $name]] > 0. d740: 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d . }].. } d750: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr d760: 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d imSql { sql } {. d770: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 . return [r d780: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c egsub -all -- {\ d790: 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d s+} [string trim d7a0: 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20$sql] " "]..
d7b0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
d7c0: 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c  executeSql { sql
d7d0: 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20   {execute none}
d7e0: 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66  {format none} {f
d7f0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  ileName ""} } {.
d800: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
d810: 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e  ng length $fileN d820: 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then d830: 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d {set fileName :m d840: 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 emory:}.. s d850: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 etupDb$fileName
d860: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" ""
d870: 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73  false false fals
d880: 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d  e false db true.
d890: 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  ...      try {..
d8a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
d8b0: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
d8c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
d8d0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
d8e0: 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f  ute $execute -fo d8f0: 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 rmat$format $db d900: 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d$sql]]..      }
d910: 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20   finally {..
d920: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f d930: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 ileName db false d940: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 false false.. d950: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... d960: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e . proc getCon d970: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66 nectionFlags { f d980: 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71 ileName flags {q d990: 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. d9a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d9b0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o d9c0: 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61 73 ut which databas d9d0: 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63 e file name or c d9e0: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string d9f0: 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20 these.. # da00: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection da10: 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75 flags will actu da20: 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20 ally apply to. da30: 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 This is not nece da40: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 ssary.. # da50: 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f in quiet mo da60: 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73 20 de because this da70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f information is o da80: 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 nly used for log da90: 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 ging.. # daa0: 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e and reportin dab0: 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 g purposes... dac0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { dad0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
dae0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
daf0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c  ring length $fil db00: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then db10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se db20: 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 t database [appe db30: 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d ndArgs "file nam db40: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
db50: 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  \"]..        } e
db60: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
db70: 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65  sts ::dataSource
db80: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
db90: 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 73      ![array exis
dba0: 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d  ts ::dataSource]
dbb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dbc0: 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65      set database
dbd0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 61   [appendArgs "da
dbe0: 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a  ta source \"" $: dbf0: 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d :dataSource \"]. dc00: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else dc10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set dc20: 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f database <unkno dc30: 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a wn>.. }.. dc40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... dc50: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE dc60: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 : Show (and log) dc70: 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 the local conne dc80: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 ction flags and dc90: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a the associated.. dca0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 # da dcb0: 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c ta source or fil dcc0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 e name... # dcd0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
dce0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
dcf0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te dd00: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe dd10: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. dd20: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 "---- loca dd30: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 l connection fla dd40: 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 gs for "$databa
dd50: 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  se \..
dd60: 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72    " are: " [expr
dd70: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
dd80: 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c   $flags] > 0 ? \ dd90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 .. [a dda0: 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c ppendArgs \"$fl
ddb0: 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65  ags \"] : "<none
ddc0: 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  >"}] \n]..
ddd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
dde0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
ddf0: 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73   (and log) the s
de00: 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  hared connection
de10: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23   flags...      #
de20: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu de30: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. de40: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch de50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj de60: 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 ect invoke Syste de70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ de80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 LiteConnection S de90: 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 haredFlags.. dea0: 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67 } sharedFlag deb0: 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. dec0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs ded0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
dee0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
df00: 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65  --- shared conne
df10: 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20  ction flags for
df20: 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20  " $database \.. df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 " a df40: 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 re: " [expr {[st df50: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 68 61 ring length$sha
df60: 72 65 64 46 6c 61 67 73 5d 20 3e 20 30 20 26 26  redFlags] > 0 &&
df70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
df80: 20 20 24 73 68 61 72 65 64 46 6c 61 67 73 20 6e    $sharedFlags n df90: 65 20 22 4e 6f 6e 65 22 20 3f 20 5c 0d 0a 20 20 e "None" ? \.. dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 [app dfb0: 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 72 endArgs \"$shar
dfc0: 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c  edFlags \"] : "<
dfd0: 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20  none>"}] \n]..
dfe0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
dff0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
e000: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel e010: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- e030: 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 -- shared connec e040: 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 tion flags for " e050: 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20$database \..
e060: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72              " ar
e070: 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e  e: <unavailable>
e080: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
e090: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
e0a0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e0b0: 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  E: If there are
e0c0: 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 20  any global (per
e0d0: 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63  test run) connec
e0e0: 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 65  tion flags curre
e0f0: 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ntly..      #
e100: 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 65      set, use the
e110: 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 63  m now (i.e. by c
e120: 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 69  ombining them wi
e130: 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20  th the ones for
e140: 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  this..      #
e150: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e      connection).
e160: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e170: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
e180: 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66  s ::connection_f
e190: 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20  lags] && \..
e1a0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
e1b0: 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69  ngth $::connecti e1c0: 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 on_flags] > 0} t e1d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # e1e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE e1f0: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 : Show (and log) e200: 20 74 68 65 20 64 65 74 65 63 74 65 64 20 67 6c the detected gl e210: 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 obal connection e220: 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 flags... e230: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! e240: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
e250: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
e260: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel e270: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- e290: 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 -- global connec e2a0: 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 65 63 tion flags detec e2b0: 74 65 64 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ted: " \.. e2c0: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b [expr {[ e2d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co e2e0: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 nnection_flags] e2f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. e300: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng e310: 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e th$::connection
e320: 5f 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c 0d  _flags] > 0 ? \.
e330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
e340: 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a  appendArgs \" $: e350: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag e360: 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 s \"] : "<none>" e370: 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 }] \n].. e380: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. e390: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: e3a0: 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 Combine and/or r e3b0: 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 eplace the conne e3c0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 ction flags and e3d0: 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 then show the.. e3e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e # n e3f0: 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 ew value... e400: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se e410: 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 t flags [combine e420: 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a Flags$flags $:: e430: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags e440: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. e450: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: e460: 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 Show (and log) t e470: 68 65 20 6e 65 77 20 65 66 66 65 63 74 69 76 65 he new effective e480: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag e490: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. e4a0: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
e4b0: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
e4c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t e4d0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app e4e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. e4f0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c e500: 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 ombined connecti e510: 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 on flags for "$
e520: 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20  database \..
e530: 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a            " are:
e540: 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e   " [expr {[strin
e550: 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d  g length $flags] e560: 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20 20 > 0 ? \.. e570: 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA e580: 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 rgs \"$flags \"
e590: 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c  ] : "<none>"}] \
e5a0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
e5b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
e5c0: 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20  return $flags.. e5d0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro e5e0: 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 c getFlagsProper e5f0: 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 ty { {flags ""} e600: 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } e610: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. e620: 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d # NOTE: Determ e630: 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d ine what the com e640: 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e bined (global an e650: 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74 d local) connect e660: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # e670: 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 flags should e680: 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69 be, possibly qui e690: 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a etly... #.. e6a0: 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 set flags e6b0: 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c [getConnectionFl e6c0: 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24 71 ags ""$flags $q e6d0: 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 uiet].... # e6e0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e6f0: 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20 If no global or e700: 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e local connection e710: 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65 63 flags were spec e720: 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20 ified, the.. e730: 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c # defaul e740: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 t connection fla e750: 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 gs should be use e760: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 d; therefore, re e770: 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 turn.. # e780: 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 an empty str e790: 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73 65 ing in that case e7a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e7b0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le e7c0: 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 ngth$flags] ==
e7d0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
e7e0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
e7f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
e800: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
e810: 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63  In order to chec
e820: 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74  k if the default
e830: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
e840: 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64  s are being used
e850: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e860: 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  it is necessary
e870: 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e  to attempt a con
e880: 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61  version to the a
e890: 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64  ctual enumerated
e8a0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e8b0: 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74  type.  Failing t
e8c0: 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61  hat, the check a
e8d0: 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 75  gainst the defau
e8e0: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
e8f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e900: 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20  skipped...
e910: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 72 72  #..      set err
e920: 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52  or null; # IGNOR
e930: 45 44 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61  ED..      set va
e940: 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  lue [object invo
e950: 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 61  ke Utility TryPa
e960: 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20  rseFlagsEnum ""
e970: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73  \..          Sys
e980: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
e990: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e9a0: 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20  Flags "" $flags e9b0: 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20 20 null true \.. e9c0: 20 20 20 20 20 20 20 74 72 75 65 20 65 72 72 6f true erro e9d0: 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 r].... #.. e9e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If e9f0: 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 the combined fla ea00: 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 20 gs string could ea10: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65 20 not actually be ea20: 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 20 converted.. ea30: 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 # to the ea40: 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 20 enumerated type ea50: 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c it is the defaul ea60: 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75 t value, then ju ea70: 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23 20 st use.. # ea80: 20 20 20 20 20 20 69 74 20 76 65 72 62 61 74 69 it verbati ea90: 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 m; otherwise, ju eaa0: 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 st return an emp eab0: 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 74 ty string. In t eac0: 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 hat.. # ead0: 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 65 66 case, the def eae0: 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ault connection eaf0: 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75 73 flags will be us eb00: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. eb10: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string eb20: 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d length$value] =
eb30: 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65  = 0 || $value ne eb40: 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65 6e "Default"} then eb50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. eb60: 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e 47 # WARNING eb70: 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 : This returns t eb80: 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 he string value eb90: 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 of the combined eba0: 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 flags, not.. ebb0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 74 # t ebc0: 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76 61 he enumerated va ebd0: 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 62 79 lue. This is by ebe0: 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f 75 design and shou ebf0: 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 ld not.. ec00: 23 20 20 20 20 20 20 20 20 20 20 62 65 20 63 68 # be ch ec10: 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63 61 anged without ca ec20: 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 74 reful considerat ec30: 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f 75 ion (e.g. it wou ec40: 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ld.. # ec50: 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 prevent t ec60: 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 he SQLiteConnect ec70: 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 61 ion class from a ec80: 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d llowing invalid. ec90: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # eca0: 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20 ["magical"] ecb0: 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 meta-flags)... ecc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. ecd0: 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 return [appendA ece0: 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66 6c rgs "Flags="$fl
ecf0: 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d  ags \;]..      }
ed00: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
ed10: 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   ""..    }.....
ed20: 20 20 20 70 72 6f 63 20 65 6e 61 62 6c 65 53 68     proc enableSh
ed30: 61 72 65 64 43 61 63 68 65 20 7b 20 63 68 61 6e  aredCache { chan
ed40: 6e 65 6c 20 65 6e 61 62 6c 65 20 7b 71 75 69 65  nel enable {quie
ed50: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
ed60: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
ed70: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
ed80: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
ed90: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
eda0: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
edb0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
edc0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
edd0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
ede0: 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68  qlite3_enable_sh
edf0: 61 72 65 64 5f 63 61 63 68 65 20 5b 65 78 70 72  ared_cache [expr
ee00: 20 69 6e 74 28 24 65 6e 61 62 6c 65 29 5d 0d 0a   int($enable)].. ee10: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] ee20: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. ee30: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
ee40: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
ee50: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan ee60: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs ee70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. ee80: 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli ee90: 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 te3_enable_share eea0: 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c d_cache("$enabl
eeb0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
eec0: 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24     ")... ok: " $eed0: 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. eee0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e eef0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 lse {.. i ef00: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
ef10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
ef20: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap ef30: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. ef40: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- ef50: 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 call sqlite3_ena ef60: 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 ble_shared_cache ef70: 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 ("$enable \..
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e              ")..
ef90: 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  . error: " \n\t
efa0: 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. efb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. efc0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p efd0: 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 roc setupDb {.. efe0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN eff0: 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 ame {mode ""} {d f000: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 ateTimeFormat "" f010: 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 } {dateTimeKind f020: 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a ""} {flags ""}.. f030: 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 {ext f040: 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 ra ""} {qualify f050: 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 true} {delete tr f060: 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d ue} {uri false}. f070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 . {te f080: 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 mporary true} {v f090: 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 arName db} {quie f0a0: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. f0b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N f0c0: 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see f0d0: 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 if our caller ha f0e0: 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i f0f0: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas f100: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. f110: 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory f120: 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
f130: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
f140: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
f150: 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
f160: 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65  st databases use
f170: 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  d by the test su
f180: 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a  ite are placed..
f190: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
f1a0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
f1b0: 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68  directory.  Each
f1c0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65   database and re
f1d0: 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20  lated files..
f1e0: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20     #       used
f1f0: 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64  by a test should
f200: 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62   be cleaned up b
f210: 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e  y that test usin
f220: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  g the..      #
f230: 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22       "cleanupDb"
f240: 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f   procedure, belo
f250: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
f260: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor f270: 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
f280: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
f290: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
f2a0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
f2b0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
f2c0: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa f2d0: 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... f2e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. f2f0: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau f300: 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 lt, delete any p f310: 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 re-existing data f320: 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 base with the sa f330: 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 me file.. # f340: 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 name if i f350: 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 t currently exis f360: 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ts... #.. f370: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
f380: 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26  ry && $delete && f390: 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 [file exists$f
f3a0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
f3b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f3c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
f3d0: 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61  empt to delete a
f3e0: 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
f3f0: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
f400: 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
f410: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d       #       nam
f420: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
f430: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
f440: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $f450: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] f460: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f470: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. f480: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some f490: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de f4a0: 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r f4b0: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... f4c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f4d0: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
f4e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f4f0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes f500: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen f510: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. f520: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W f530: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t f540: 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 o delete databas f550: 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 e file \""$file
f560: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
f570: 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
f580: 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a  ng setup, error:
f590: 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ f5a0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. f5b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. f5c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. f5d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re f5e0: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci f5f0: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e f600: 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 .g. "db") in the f610: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d context of our. f620: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c f630: 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 aller. The hand f640: 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 le to the opened f650: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 database will b f660: 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. f670: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. f680: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
f690: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
f6a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74        # NOTE: St
f6b0: 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65  art building the
f6c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
f6d0: 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65  ng.  The only re
f6e0: 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a  quired portion..
f6f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66        #       of
f700: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
f710: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 61  string is the da
f720: 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68  ta source, which
f730: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the..
f740: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
f750: 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20  abase file name
f760: 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20  itself.  If our
f770: 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20  caller wants to
f780: 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20  use a URI as..
f790: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
f7a0: 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65  data source, use
f7b0: 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e   the FullUri con
f7c0: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
f7d0: 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20  roperty to..
f7e0: 20 20 23 20 20 20 20 20 20 20 70 72 65 76 65 6e    #       preven
f7f0: 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63  t the data sourc
f800: 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65  e string from be
f810: 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20  ing mangled...
f820: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
f830: 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20  {$uri} then {.. f840: 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 set conne f850: 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 ction {FullUri=$
f860: 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
f870: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
f880: 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
f890: 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65  ion {Data Source
f8a0: 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20  =${fileName}}.. f8b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... f8c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: f8d0: 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 Since this proc f8e0: 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 edure has no spe f8f0: 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f cial knowledge o f900: 66 20 77 68 61 74 20 74 68 65 20 64 65 66 61 75 f what the defau f910: 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 lt.. # f920: 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 setting is for f930: 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 the ToFullPath f940: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin f950: 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 g propery, alway f960: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # f970: 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 add the value w f980: 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 e know about to f990: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s f9a0: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d tring... #. f9b0: 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f . append co f9c0: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c nnection {;ToFul f9d0: 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d lPath=${qualify}
f9e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
f9f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
fa00: 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
fa10: 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f  ied a journal mo
fa20: 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65  de, add the nece
fa30: 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20  ssary portion..
fa40: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20       #       of
fa50: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
fa60: 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20  tring now...
fa70: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
fa80: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d  string length $m fa90: 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ode] > 0} then { faa0: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append fab0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f connection {;Jo fac0: 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 urnal Mode=${mod
fad0: 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e}}..      }....
fae0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
faf0: 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61   NOTE: If our ca
fb00: 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61  ller specified a
fb10: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
fb20: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73  , add the necess
fb30: 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
fb40: 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68     portion of th
fb50: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
fb60: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ing now...
fb70: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
fb80: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74  ring length $dat fb90: 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 eTimeFormat] > 0 fba0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. fbb0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect fbc0: 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f ion {;DateTimeFo fbd0: 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 rmat=${dateTimeF
fbe0: 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d  ormat}}..      }
fbf0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
fc00: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
fc10: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
fc20: 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e  ed a DateTimeKin
fc30: 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73  d, add the neces
fc40: 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20  sary portion..
fc50: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74      #       of t
fc60: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
fc70: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ring now...
fc80: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
fc90: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61  tring length $da fca0: 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d teTimeKind] > 0} fcb0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. fcc0: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti fcd0: 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e on {;DateTimeKin fce0: 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 d=${dateTimeKind
fcf0: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  }}..      }....
fd00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
fd10: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
fd20: 20 77 68 61 74 20 74 68 65 20 66 69 6e 61 6c 20   what the final
fd30: 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20 63  flags for this c
fd40: 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20 74  onnection need t
fd50: 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  o be...      #..
fd60: 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20        set flags
fd70: 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  [getConnectionFl
fd80: 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 24 66  ags $fileName$f
fd90: 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a  lags $quiet].... fda0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # fdb0: 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 NOTE: If our ca fdc0: 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 73 ller specified s fdd0: 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ome SQLiteConnec fde0: 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 tionFlags, add t fdf0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # fe00: 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 necessary port fe10: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 ion of the conne fe20: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 ction string now fe30: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. fe40: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le fe50: 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 ngth$flags] > 0
fe60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
fe70: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
fe80: 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c  ion {;Flags=${fl fe90: 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a ags}}.. }.. fea0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. feb0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our fec0: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified fed0: 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61 an extra payloa fee0: 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 d to the connect fef0: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # ff00: 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 6e string, appen ff10: 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 d it now... ff20: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s ff30: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 tring length$ex
ff40: 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tra] > 0} then {
ff50: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
ff60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24   connection \; $ff70: 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a extra.. }.. ff80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ff90: 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 # NOTE: Open th ffa0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 e database conne ffb0: 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 ction now, placi ffc0: 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 ng the opaque ha ffd0: 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 ndle value.. ffe0: 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 # into t fff0: 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 he variable spec 10000 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c ified by our cal 10010 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 10020 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c set db [sql 10030 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 open -type SQLi 10040 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 te [subst$conne
10050 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20  ction]]....
10060 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
10070 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20  : Configure the
10080 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
10090 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c  ory for the newl
100a0 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73  y opened databas
100b0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
100c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20   connection now
100d0 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65  unless our calle
100e0 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20  r forbids it...
100f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
10100 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20   {$temporary && 10110 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 10120 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44 no(setTemporaryD 10130 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e irectory)]} then 10140 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 {.. sql 10150 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 execute$db [app
10160 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
10170 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74         "PRAGMA t
10180 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
10190 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65  ory = \"" [getTe
101a0 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79  mporaryDirectory
101b0 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d  ] \"\;]..      }
101c0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
101d0 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79     # NOTE: Alway
101e0 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e  s return the con
101f0 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75  nection handle u
10200 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...
10210 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
10220 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a  urn $db.. }.. 10230 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD 10240 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 bConnection { {v 10250 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a arName db} } {.. 10260 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 10270 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 10280 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 10290 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 102a0 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 102b0 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. 102c0 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. 102d0 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t 102e0 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 he database prev 102f0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 iously opened vi 10300 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 a the.. # 10310 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 [setupDb] p 10320 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 rocedure should 10330 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e be stored there. 10340 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 10350 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
10360 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  e db....      #.
10370 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
10380 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20  his returns the
10390 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65  ADO.NET IDbConne
103a0 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73  ction object ins
103b0 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20  tance for the..
103c0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65       #       spe
103d0 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68  cified databse h
103e0 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65  andle.  Since ge
103f0 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63  tting this objec
10400 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20  t relies upon..
10410 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
10420 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72  le internals, gr
10430 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20  eat care should
10440 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69  be taken to avoi
10450 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a  d disposing of..
10460 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
10470 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68  is object or oth
10480 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69  erwise putting i
10490 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69  t into an invali
104a0 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20  d state...
104b0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
104c0 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74  fo exists db]} t
104d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
104e0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
104f0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
10500 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
10510 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c  Public -objectfl
10520 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d  ags +NoDispose -
10530 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
10540 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 74         Interpret
10550 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e  er.GetActive.con
10560 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64  nections Item $d 10570 62 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 b.. } res 10580 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 10590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 105a0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 105b0 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 : Success, retur 105c0 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a n the opaque obj 105d0 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 ect handle... 105e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 105f0 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
10600 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  lt..        } el
10610 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
10620 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
10630 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65  OTE: Failure, re
10640 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
10650 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10660 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 10670 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 10680 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 10690 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 106a0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 NG: failed to ge 106b0 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e t connection han 106c0 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 dle for database 106d0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 106e0 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65$db "\", e
106f0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 10700 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 10710 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 10720 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 10730 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f freeDbConnectio 10740 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e n { {varName con 10750 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 nection} } {.. 10760 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10770 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 10780 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 10790 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e able (e.g. "conn 107a0 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d ection") in the. 107b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 107c0 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 ontext of our ca 107d0 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 ller. The opaqu 107e0 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 e object handle 107f0 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a for an ADO.NET.. 10800 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 10810 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 nnection previou 10820 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 sly returned by 10830 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e [getDbConnection 10840 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 ] should be.. 10850 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 # store 10860 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 10870 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 10880 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63$varName connec
10890 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  tion....      #.
108a0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
108b0 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65  ttempt to remove
108c0 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65   the opaque obje
108d0 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74  ct handle from t
108e0 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a  he interpreter..
108f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f        #       no
10900 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74  w.  This [object
10910 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77   dispose] call w
10920 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  ill not actually
10930 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d   dispose of the.
10940 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
10950 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74  nderlying object
10960 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f   because the +No
10970 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73  Dispose flag was
10980 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20   set on it..
10990 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67    #       during
109a0 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65   creation of the
109b0 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
109c0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  andle...      #.
109d0 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
109e0 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69   exists connecti
109f0 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  on] && \..
10a00 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65      [catch {obje
10a10 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e  ct dispose $conn 10a20 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 ection} error]} 10a30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10a40 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10a50 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 10a60 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 iled to remove t 10a70 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 he handle, repor 10a80 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 10a90 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 10aa0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
10ab0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
10ad0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
10ae0 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e  d to remove conn
10af0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22  ection handle \"
10b00 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d  " $connection \. 10b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" 10b20 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 10b30 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
10b40 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
10b50 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e     proc addDbCon
10b60 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63  nection { connec
10b70 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62  tion {varName db
10b80 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
10b90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
10ba0 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
10bb0 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
10bc0 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
10bd0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
10be0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
10bf0 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
10c00 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $10c10 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 10c20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10c30 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f OTE: Create a co 10c40 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 rrectly formatte 10c50 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 d name for the d 10c60 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 10c70 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 on to.. # 10c80 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 6f be added to 10c90 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 the list manage 10ca0 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 d by the Eagle i 10cb0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 10cc0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 10cd0 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b db [object invok 10ce0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 10cf0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 10d00 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e Eagle._Componen 10d10 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 ts.Private.Forma 10d20 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a tOps DatabaseObj 10d30 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 ectName$connect
10d40 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
10d50 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
10d60 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  n [object invoke
10d70 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
10d80 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d  Active NextId]].
10d90 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
10da0 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68    # NOTE: Add th
10db0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
10dc0 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62  ction provided b
10dd0 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20  y our caller to
10de0 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20  the list..
10df0 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65  #       of those
10e00 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61   known to the Ea
10e10 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  gle interpreter.
10e20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
10e30 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
10e40 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
10e50 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
10e60 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f  Active.connectio
10e70 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20  ns Add \..
10e80 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74      $db$connect
10e90 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ion..    }.....
10ea0 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46     proc getRowsF
10eb0 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64  romDataTable { d
10ec0 61 74 61 54 61 62 6c 65 20 7d 20 7b 0d 0a 20 20  ataTable } {..
10ed0 20 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69      set rows [li
10ee0 73 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63  st]..      set c
10ef0 6f 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65  ount [$dataTable 10f00 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d Columns.Count]. 10f10 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 ... for {se 10f20 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 t index 0} {$ind
10f30 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e  ex < $count} {in 10f40 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 cr index} {.. 10f50 20 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c set dataCol 10f60 75 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 umn [$dataTable
10f70 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67  -alias Columns.g
10f80 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 10f90 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d . set nam 10fa0 65 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 es($index) [$dat 10fb0 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 aColumn ColumnNa 10fc0 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a me].. }.... 10fd0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 10fe0 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 each -alias data 10ff0 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 Row [set dataRow 11000 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f s [$dataTable Ro
11010 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ws]] {..
11020 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a  set row [list]..
11030 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73  ..        for {s
11040 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e  et index 0} {$in 11050 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 dex <$count} {i
11060 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..
11070 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
11080 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65  e [$dataRow -cre 11090 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 ate -alias get_I 110a0 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 tem$index]....
110b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
110c0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c  ring length $val 110d0 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ue] > 0 && \.. 110e0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 ![ob 110f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 ject invoke Conv 11100 65 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 ert IsDBNull$va
11110 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lue]} then {..
11120 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
11130 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d  d row [list $nam 11140 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c es($index) [$val 11150 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 ue ToString]].. 11160 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 11170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c {.. l 11180 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 append row [list 11190 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d$names($index)] 111a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 111b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 111c0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73 lappend rows 111d0 20 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a$row..      }..
111e0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $111f0 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a rows.. }..... 11200 20 20 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77 proc dumpRow 11210 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b sFromDataTable { 11220 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20 channel rows } 11230 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 65 71 {.. set seq 11240 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20 uence 1.... 11250 20 66 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f foreach row$ro
11260 77 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  ws {..        tp
11270 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 11280 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 11290 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
112a0 73 65 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22  sequence > 1 ? "
112b0 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d  \n" : ""}] "----
112c0 20 52 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63   ROW #" $sequenc 112d0 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 e :\n].... 112e0 20 20 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 foreach pair$
112f0 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  row {..
11300 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70   if {[llength $p 11310 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20 air] >= 2} then 11320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 11330 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
11340 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a  ppendArgs \t \..
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11360 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70  [list [lindex $p 11370 61 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69 air 0]] ": " [li 11380 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
11390 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20   1]] \n]..
113a0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c      } elseif {[l
113b0 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d  length $pair] == 113c0 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 1} then {.. 113d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
113e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
113f0 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20  gs \t \..
11400 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b           [list [
11410 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d  lindex $pair 0]] 11420 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a ": <null>\n"].. 11430 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 11440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 11450 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c tputs$channel \
11460 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f  t<empty>\n; # NO
11470 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20  TE: No data?..
11480 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
11490 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
114a0 69 6e 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20  incr sequence..
114b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
114c0 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e  ..    proc clean
114d0 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20  upDb { fileName
114e0 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f  {varName db} {co
114f0 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61  llect true} {qua
11500 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20  lify true}..
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11520 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d   {delete true} }
11530 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
11540 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
11550 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20  pt to force all
11560 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65  pending "garbage
11570 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20  " objects to be
11580 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20  collected,..
11590 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64    #       includ
115a0 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65  ing SQLite state
115b0 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70  ments and backup
115c0 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73   objects; this s
115d0 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20  hould allow..
115e0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
115f0 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
11600 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65  se file to be de
11610 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  leted...      #.
11620 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll 11630 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. 11640 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb 11650 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e age$::test_chan
11660 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  nel..      }....
11670 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11680 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
11690 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
116a0 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
116b0 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
116c0 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
116d0 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
116e0 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
116f0 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76  he database prev
11700 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
11710 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  a the..      #
11720 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70       [setupDb] p
11730 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20  rocedure should
11740 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
11750 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11760 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 11770 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. 11780 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 11790 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 lose the connect 117a0 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 ion to the datab 117b0 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 ase now. This s 117c0 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a hould allow us.. 117d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to 117e0 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 delete the unde 117f0 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 rlying database 11800 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a file... #.. 11810 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 11820 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 exists db] && [c 11830 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 atch {sql close 11840 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65$db} error]} the
11850 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
11860 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
11870 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
11880 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64  d to close the d
11890 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20  atabase, report
118a0 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  why...        #.
118b0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $118c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 118d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 118e0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 118f0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 11900 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 to close databas 11910 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 e \""$db "\", e
11920 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
11930 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72         \n\t $err 11940 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d or \n].. }. 11950 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11960 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, 11970 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c see if our call 11980 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 er has requested 11990 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 an in-memory da 119a0 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # 119b0 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 .. set isMe 119c0 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 mory [isMemoryDb 119d0 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20$fileName]....
119e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
119f0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
11a00 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65  full path to the
11a10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
11a20 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61  ame.  For now, a
11a30 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23  ll test..      #
11a40 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
11a50 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64  files are stored
11a60 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72   in the temporar
11a70 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
11a80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
11a90 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
11aa0 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
11ab0 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
11ac0 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
11ad0 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
11ae0 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
11af0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 11b00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 11b10 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11b20 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 : Check if the f 11b30 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 ile still exists 11b40 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11b50 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
11b60 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b   && $delete && [ 11b70 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
11b80 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
11b90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11ba0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
11bb0 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73  deleting databas
11bc0 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  e files if someb
11bd0 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
11be0 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bal..        #
11bf0 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f       variable to
11c00 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
11c10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11c20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
11c30 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44  ts ::no(cleanupD
11c40 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  bFile)]} then {.
11c50 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
11c60 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
11c70 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74  Attempt to delet
11c80 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62  e the test datab
11c90 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20  ase file now...
11ca0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
11cb0 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63        if {[set c
11cc0 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65  ode [catch {file
11cd0 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d   delete $fileNam 11ce0 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e e} error]]} then 11cf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 11d00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 11d10 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f NOTE: We someho 11d20 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 w failed to dele 11d30 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 te the file, rep 11d40 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 11d50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11d60 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
11d70 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
11d80 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
11d90 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
11da0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
11db0 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61  to delete databa
11dc0 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  se file \"" $fil 11dd0 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 11de0 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 "\" dur 11df0 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 ing cleanup, err 11e00 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
11e10 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
11e20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
11e30 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
11e40 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
11e50 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77  OTE: Show that w
11e60 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  e skipped deleti
11e70 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20  ng the file...
11e80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11e90 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d       set code 0.
11ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  ...          tpu
11eb0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 11ec0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 11ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 11ee0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 "==== WARNING: s 11ef0 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 kipped deleting 11f00 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 database file \" 11f10 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
11f30 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c   during cleanup\
11f40 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
11f50 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
11f60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11f70 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66     # NOTE: The f
11f80 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ile does not exi
11f90 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20  st, success!..
11fa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11fb0 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20   set code 0..
11fc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
11fd0 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20  turn $code.. 11fe0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 11ff0 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 etupDbInterruptC 12000 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 allback { channe 12010 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 l log } {.. 12020 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
12030 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70  "---- setting up
12040 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 72   debugger interr
12050 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20  upt callback...
12060 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  "....      if {[
12070 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
12080 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
12090 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68  TE: Make sure th
120a0 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65  e script debugge
120b0 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74  r and the isolat
120c0 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 61  ed interpreter a
120d0 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #
120e0 20 20 20 20 73 65 74 75 70 20 61 6e 64 20 72 65      setup and re
120f0 61 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20  ady for use...
12100 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12110 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75   debug setup tru
12120 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20  e true....
12130 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
12140 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65  OTE: Load the ne
12150 63 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73  cessary packages
12160 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74   into the isolat
12170 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  ed interpreter..
12180 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
12190 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b      debug eval {
121a0 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b  ..          pack
121b0 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
121c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63  e..          pac
121d0 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67  kage require Eag
121e0 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20  le.Library..
121f0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65        package re
12200 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74  quire Eagle.Test
12210 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
12220 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12230 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74    # NOTE: Copy t
12240 68 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72  he necessary var
12250 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20  iables into the
12260 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
12270 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
12280 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20  ..        debug
12290 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74  invoke 0 set ::t
122a0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61  est_channel $cha 122b0 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f nnel; # NOTE: Fo 122c0 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 r [tputs]... 122d0 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 debug invoke 122e0 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 0 set ::test_lo 122f0 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 g$log; # NOTE:
12300 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20  For [tlog].....
12310 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12320 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c    # NOTE: Instal
12330 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73  l the callback s
12340 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c  cript to be eval
12350 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f  uated in the iso
12360 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23  lated..        #
12370 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74         interpret
12380 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74  er when this int
12390 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65  erpreter is inte
123a0 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70  rrupted by scrip
123b0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
123c0 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c     cancellation,
123d0 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23   etc...        #
123e0 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20  ..        debug
123f0 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b  callback apply {
12400 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20  {sender e} {..
12410 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12420 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
12430 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62  ck if this callb
12440 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20  ack is one that
12450 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a  we care about...
12460 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
12470 20 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63         if {"Canc
12480 65 6c 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20  eled" in [split
12490 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 70  [$e InterruptTyp 124a0 65 5d 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b e] ", "]} then { 124b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 124c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 124d0 4f 54 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 OTE: Iterate thr 124e0 6f 75 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 ough all databas 124f0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e e connections kn 12500 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 own to the.. 12510 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 12520 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 parent interpret 12530 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er... 12540 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 12550 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d object foreach - 12560 61 6c 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20 alias pair \.. 12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f [o 12580 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 12590 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 ags +NonPublic$
125a0 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f  e Interpreter.co
125b0 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20  nnections] {..
125c0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
125e0 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
125f0 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71  cancel any SQL q
12600 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65  ueries in progre
12610 73 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20  ss on this..
12620 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
12630 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65    database conne
12640 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...
12650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12660 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
12670 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43  h {$pair Value.C 12680 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 ancel} error]} t 12690 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 126a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
126b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
126c0 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20  pendArgs \n \..
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
126e0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
126f0 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63  : failed to canc
12700 65 6c 20 71 75 65 72 79 20 66 6f 72 20 63 6f 6e  el query for con
12710 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20  nection \"" \..
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12730 20 20 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22     [$pair Key] " 12740 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 12750 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
12760 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
12770 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
12780 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12790 20 20 20 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65     }}..      } e
127a0 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
127b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
127c0 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72  onstraint interr
127d0 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69  uptCallback.sqli
127e0 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  te3....        t
127f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 12800 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 s\n.. } els 12810 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 12820 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
12830 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72  endArgs "no, err
12840 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 12850 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 12860 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 12870 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b oc cleanupFile { 12880 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 fileName {colle 12890 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 ct true} {force 128a0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 128b0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 128c0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 128d0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 128e0 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 128f0 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 12900 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 12910 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 12920 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 12930 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 12940 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 12950 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 12960 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 12970 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 12980 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 12990 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 129a0 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
129b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
129c0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 129d0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 129e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 129f0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 12a00 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 heck if the file 12a10 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a still exists... 12a20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 12a30 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 12a40 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
12a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
12a60 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
12a70 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73  kip deleting tes
12a80 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  t files if someb
12a90 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
12aa0 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  bal variable..
12ab0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
12ac0 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
12ad0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12ae0 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || ! 12af0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 12b00 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d o(cleanupFile)]} 12b10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12b20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 12b30 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 12b40 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 12b50 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 st file now... 12b60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12b70 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f if {[set co 12b80 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 de [catch {file 12b90 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
12ba0 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20  } error]]} then
12bb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
12bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
12bd0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
12be0 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
12bf0 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
12c00 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
12c10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12c20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 12c30 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 12c40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 12c50 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 12c60 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 12c70 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 o delete test fi 12c80 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
12c90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12ca0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
12cb0 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22  leanup, error: "
12cc0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 12cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 12ce0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 12cf0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 12d00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 12d10 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 Show that we ski 12d20 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 pped deleting th 12d30 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 e file... 12d40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 12d50 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 set code 0.... 12d60 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
12d70 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
12d80 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
12d90 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
12da0 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65   WARNING: skippe
12db0 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  d deleting test
12dc0 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 12dd0 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 12de0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 12df0 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 leanup\n"].. 12e00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 12e10 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 12e20 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 12e30 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 : The file does 12e40 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 not exist, succe 12e50 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ss!.. #.. 12e60 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 12e70 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 0.. }.... 12e80 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 return$cod
12e90 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
12ea0 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72   proc collectGar
12eb0 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  bage { channel {
12ec0 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30  milliseconds 100
12ed0 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20  0} {quiet true}
12ee0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
12ef0 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e  catch {object in
12f00 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c  voke GC GetTotal
12f10 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65  Memory false} re
12f20 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
12f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
12f40 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 12f50 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 12f60 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
12f70 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
12f80 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d         "---- mem
12f90 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68  ory in use by th
12fa0 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c  e CLR before col
12fb0 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a  lection... " \..
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72                $r 12fd0 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 esult " bytes\n" 12fe0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 12ff0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 13000 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
13010 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
13020 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13030 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
13040 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52  ailed to get CLR
13050 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65   memory usage, e
13060 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
13070 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res 13080 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d ult \n].. } 13090 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 .... ###### 130a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 130b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 130c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 130d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 130e0 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a ###.... #.. 130f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 13100 70 65 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 peatedly attempt 13110 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 to collect garb 13120 61 67 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c age until the al 13130 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 lotted number.. 13140 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 13150 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 milliseconds has 13160 20 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 elapsed. Alway 13170 73 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c s attempt to col 13180 6c 65 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 lect garbage.. 13190 20 20 20 20 23 20 20 20 20 20 20 20 61 74 20 6c # at l 131a0 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 east once... 131b0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 #.. set s 131c0 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f tart [clock seco 131d0 6e 64 73 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 nds].. set 131e0 73 74 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61 stop [expr {$sta
131f0 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f  rt + ($milliseco 13200 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d nds / 1000)}]... 13210 0a 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 . do {.. 13220 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 13230 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 13240 74 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 to force a full 13250 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 garbage collecti 13260 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 on now. Report 13270 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 any.. # 13280 20 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 error that 13290 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 is encountered i 132a0 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 f we fail... 132b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 132c0 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 132d0 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 132e0 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d otalMemory true} 132f0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 13300 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 13310 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
13320 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
13330 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
13340 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c  NING: failed ful
13350 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63  l garbage collec
13360 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c  tion, error: " \
13370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13380 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 13390 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 133a0 20 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 set now [c 133b0 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 lock seconds].. 133c0 20 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 } while {$s
133d0 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20  tart <= $now && 133e0 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d$now < $stop}... 133f0 0a 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 . ######### 13400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13440 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 13450 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 atch {object inv 13460 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM 13470 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 emory false} res 13480 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 13490 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! 134a0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
134b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
134c0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 134d0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 134e0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f "---- memo 134f0 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 ry in use by the 13500 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 CLR after colle 13510 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 ction... " \.. 13520 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73$res
13530 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ult " bytes\n"].
13540 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
13550 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13560 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 13570 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 13580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d .. "= 13590 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 135a0 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d led to get CLR m 135b0 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 emory usage, err 135c0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 135d0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
135e0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  t \n]..      }..
135f0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
13600 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64  oc getSQLiteHand
13610 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e  leCounts { chann
13620 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  el {quiet false}
13630 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
13640 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
13650 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
13660 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20  Constraint \..
13670 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69              defi
13680 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
13690 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f  m.Data.SQLite.CO
136a0 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65  UNT_HANDLE]} the
136b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
136c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
136d0 41 64 64 20 65 61 63 68 20 63 72 69 74 69 63 61  Add each critica
136e0 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74  l handle count t
136f0 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  o the resulting
13700 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  list...        #
13710 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
13720 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e  h name [list con
13730 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61  nectionCount sta
13740 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b  tementCount back
13750 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20  upCount] {..
13760 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20        set value
13770 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
13780 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
13790 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
137a0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
137b0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
137c0 65 4d 65 74 68 6f 64 73 20 24 6e 61 6d 65 5d 0d  eMethods $name]. 137d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 137e0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
137f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
13800 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 13810 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 13820 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 13830 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c - critical handl 13840 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d e count \""$nam
13850 65 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75  e "\" is " $valu 13860 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 e \n].. 13870 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 13880 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 lappend result$
13890 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d  value..        }
138a0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
138b0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 138c0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 138d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 138e0 65 20 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20 e actual handle 138f0 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 counts are not a 13900 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66 vailable; theref 13910 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20 ore, just.. 13920 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 # retur 13930 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e n an empty list. 13940 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 13950 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
13960 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63  nel "---- critic
13970 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73  al handle counts
13980 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d   unavailable\n".
13990 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
139a0 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 139b0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 139c0 70 72 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c proc shutdownSQL 139d0 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 ite { channel {f 139e0 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69 orce false} {qui 139f0 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. 13a00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 13a10 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 NOTE: Make sure 13a20 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65 that SQLite core 13a30 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70 library is comp 13a40 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e letely shutdown. 13a50 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20 This.. # 13a60 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 is used by 13a70 20 74 65 73 74 73 20 74 68 61 74 20 63 68 61 6e tests that chan 13a80 67 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ge configuration 13a90 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 options and/or 13aa0 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20 those.. # 13ab0 20 20 20 20 20 74 68 61 74 20 6e 65 65 64 20 74 that need t 13ac0 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67 o make sure logg 13ad0 69 6e 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a ing is initializ 13ae0 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e ed (i.e. just in 13af0 20 63 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 case.. # 13b00 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 the SQLite 13b10 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 core library was 13b20 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 initialized in 13b30 74 68 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f the process prio 13b40 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 r to.. # 13b50 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f the SQLiteLo 13b60 67 20 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62 g class being ab 13b70 6c 65 20 74 6f 20 73 65 74 75 70 20 69 74 73 20 le to setup its 13b80 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b logging callback 13b90 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 )... # 13ba0 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 Normally, this 13bb0 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 should only be 13bc0 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c performed if SQL 13bd0 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e ite is loaded an 13be0 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 13bf0 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 ready for use b 13c00 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 13c10 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 13c20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 if {$force ||
13c30 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d  [isSQLiteReady]}
13c40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13c50 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
13c60 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65 20  GFIX: Make sure
13c70 74 68 61 74 20 61 6e 79 20 22 6c 65 61 6b 65 64  that any "leaked
13c80 22 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  " transactions a
13c90 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  nd/or connection
13ca0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
13cb0 20 20 20 20 20 61 72 65 20 63 6c 65 61 6e 65 64       are cleaned
13cc0 20 75 70 20 62 65 66 6f 72 65 20 63 61 6c 6c 69   up before calli
13cd0 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68  ng the native sh
13ce0 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2e  utdown function.
13cf0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
13d00 20 20 20 20 20 66 6f 72 65 61 63 68 20 74 72 61       foreach tra
13d10 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 6f 20 74  nsaction [info t
13d20 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 7b 0d 0a  ransactions] {..
13d30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
13d40 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20  tring match \..
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
13d60 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 23  tem#Data#SQLite#
13d70 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f  SQLiteTransactio
13d80 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 69 6f 6e  n#* $transaction 13d90 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 13da0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 13db0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 13dc0 20 20 20 73 71 6c 20 74 72 61 6e 73 61 63 74 69 sql transacti 13dd0 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 74 72 61 on rollback$tra
13de0 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nsaction..
13df0 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d        } error] =
13e00 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
13e10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
13e20 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13e40 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
13e50 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e70 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 64 20 62    "---- rolled b
13e80 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e 73  ack leaked trans
13e90 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20  action \"" \..
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13eb0 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c    $transaction \ 13ec0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 13ed0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 13ee0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 13ef0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 13f00 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 13f30 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13f50 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 13f60 20 66 61 69 6c 65 64 20 74 6f 20 72 6f 6c 6c 62 failed to rollb 13f70 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e 73 ack leaked trans 13f80 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 action \"" \.. 13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13fa0 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20 22$transaction "
13fb0 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
13fc0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 13fd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 13fe0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 13ff0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 14000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 14010 66 6f 72 65 61 63 68 20 64 62 20 5b 69 6e 66 6f foreach db [info 14020 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d connections] {. 14030 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 14040 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a string match \.. 14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 14060 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 stem#Data#SQLite 14070 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f #SQLiteConnectio 14080 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65 6e 20 7b n#*$db]} then {
14090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
140a0 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c   {[catch {sql cl
140b0 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 20  ose $db} error] 140c0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 140d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 140e0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
140f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14100 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 14110 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14130 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73 65 64 20 "---- closed 14140 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65 20 leaked database 14150 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d 0d 0a 20 \""$db \"\n]..
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14170 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
14180 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
14190 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 141a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 141b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
141c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
141d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
141e0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
141f0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
14200 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 6b 65 64   to close leaked
14210 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d   database \"" \.
14220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14230 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72       $db "\", er 14240 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
14250 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
14260 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
14270 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
14280 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
14290 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
142a0 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42       # BUGFIX: B
142b0 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68  efore calling th
142c0 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77  e native shutdow
142d0 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65  n function, make
142e0 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 20   sure both..
142f0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 6f 66      #         of
14300 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61   the PRAGMA rela
14310 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61  ted directory na
14320 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a  mes are freed...
14330 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14340 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
14350 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68  eDirectories $ch 14360 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 annel true.... 14370 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 14380 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 14390 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 143a0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 143b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 143c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 143d0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 143e0 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 73 68 thods sqlite3_sh 143f0 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 utdown.. 14400 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 14410 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14420 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
14430 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14440 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 14450 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 14460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14470 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 14480 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e te3_shutdown().. 14490 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 . ok: "$result
144a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
144b0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
144c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
144d0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 144e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 144f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
14500 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
14520 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
14530 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72  shutdown()... er
14540 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73  ror: " \n\t $res 14550 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 14560 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 14570 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 14580 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 .... proc rep 14590 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 ortSQLiteResourc 145a0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 145b0 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 channel {quiet 145c0 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 74 20 74 false} {reset t 145d0 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 rue} {collect tr 145e0 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue} } {.. # 145f0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 14600 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 If available, re 14610 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 6f 73 port on (and pos 14620 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 68 65 sibly reset) the 14630 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 runtime.. 14640 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 # configur 14650 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 ation statistics 14660 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 14670 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 if {[haveConst 14680 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 raint buildConfi 14690 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 20 guration.Debug] 146a0 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 && [catch {.. 146b0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 146c0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 146d0 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 blic -alias \.. 146e0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 146f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un 14700 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod 14710 73 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 s settingReadCou 14720 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 73 65 74 nts.. } set 14730 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d 20 tingReadCounts] 14740 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 14750 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f set nameCo 14760 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 65 61 unt [$settingRea
14770 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a  dCounts Count]..
14780 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
14790 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20  eCount 0....
147a0 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
147b0 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24  ch -alias pair $147c0 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 settingReadCount 147d0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 s {.. i 147e0 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b ncr valueCount [ 147f0 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a$pair Value]....
14800 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$14810 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 14820 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 14830 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
14840 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
14850 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
14860 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69  etting \"" [$pai 14870 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 r Key] "\" was r 14880 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ead " \.. 14890 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 [$pair
148a0 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 5c 6e  Value] " times\n
148b0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
148c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
148d0 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74        if {$reset 148e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 148f0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 14900 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e$settingReadCoun
14910 74 73 20 43 6c 65 61 72 7d 20 65 72 72 6f 72 5d  ts Clear} error]
14920 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
14930 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
14940 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 14960 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
14970 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
14990 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e  --- reset settin
149a0 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72  g statistics for
149b0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20   the previous "
149c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
149d0 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20       $nameCount 149e0 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
149f0 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75  alueCount " valu
14a00 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 20  es read\n"]..
14a10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
14a20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
14a30 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
14a40 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 14a50 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 14a60 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 14a70 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 14a80 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 to reset setting 14a90 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 statistics for 14aa0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 14ab0 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f "the previo 14ac0 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 us "$nameCount
14ad0 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76  " names and " $v 14ae0 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 alueCount \.. 14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 76 " v 14b00 61 6c 75 65 73 20 72 65 61 64 2c 20 65 72 72 6f alues read, erro 14b10 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
14b20 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
14b30 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
14b40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
14b50 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
14b60 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
14b70 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61      defineConsta
14b80 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
14b90 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49  QLite.INTEROP_VI
14ba0 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20  RTUAL_TABLE] &&
14bb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61  \..          [ha
14bc0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a  veConstraint \..
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
14be0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
14bf0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
14c00 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
14c10 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ES]} then {..
14c20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 14c30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14c40 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
14c50 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74  el "---- current
14c60 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
14c70 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e  y SQLiteMemory..
14c80 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  . "..        }..
14c90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
14ca0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
14cb0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
14cc0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
14cd0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
14ce0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
14cf0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f  QLite.SQLiteMemo
14d00 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65  ry bytesAllocate
14d10 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  d..        } mem
14d20 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
14d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
14d40 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 14d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 14d60 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
14d70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 14d80 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 14d90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 14da0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 14db0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 14dc0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 14dd0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
14de0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
14df0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 14e00 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 14e10 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
14e20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
14e30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
14e40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 14e50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14e60 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
14e70 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65  "---- maximum me
14e80 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
14e90 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22  QLiteMemory... "
14ea0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
14eb0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
14ec0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
14ed0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
14ee0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
14ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14f00 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
14f10 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20  te.SQLiteMemory
14f20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f  maximumBytesAllo
14f30 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d  cated..        }
14f40 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
14f50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14f60 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 14f70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14f80 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
14f90 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 14fa0 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d mory " bytes\n"] 14fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 14fc0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 14fd0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d . set m 14fe0 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 14ff0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 15000 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
15010 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
15020 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 15030 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
15040 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
15050 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
15060 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
15070 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 15080 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 15090 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
150a0 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
150b0 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e   use by SQLite..
150c0 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  . "..      }....
150d0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
150e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
150f0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
15100 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
15110 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
15120 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
15130 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
15140 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s sqlite3_memory
15150 5f 75 73 65 64 0d 0a 20 20 20 20 20 20 7d 20 6d  _used..      } m
15160 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
15170 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
15180 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 15190 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 151a0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
151b0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 151c0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 151d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 151e0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 151f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 15200 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 15210 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 15220 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 15230 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 15240 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 15250 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 15260 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
15270 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15280 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 15290 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
152a0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
152b0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
152c0 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result
152d0 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a  $memory; # NOTE: 152e0 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 Return memory i 152f0 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c n-use to our cal 15300 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ler..... if 15310 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
15320 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
15330 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 15340 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 maximum memory i 15350 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e n use by SQLite. 15360 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d .. ".. }... 15370 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 15380 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a h {.. obj 15390 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 153a0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 153b0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 153c0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 153d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 153e0 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 ds sqlite3_memor 153f0 79 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 y_highwater 0.. 15400 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 15410 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 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 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 15450 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
15460 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
15470 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  "]..        }..
15480 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
15490 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
154a0 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20    # NOTE: Maybe
154b0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
154c0 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61  library is unava
154d0 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20  ilable?..
154e0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
154f0 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
15500 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$15510 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 15520 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
15530 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
15540 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 15550 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 15560 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 15570 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
15580 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
15590 63 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e  ctGarbage $chann 155a0 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... 155b0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
155c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
155d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 155e0 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m 155f0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 15600 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 the CLR... ".. 15610 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 15620 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 15630 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 15640 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false 15650 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 15660 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 15670 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 if {[string is i 15680 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 nteger -strict$
15690 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  memory]} then {.
156a0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
156b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 156c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 156d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
156e0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 156f0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 15700 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 15710 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 15720 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 15730 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 invalid.... 15740 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
15750 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15760 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 15770 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 15780 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
15790 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
157a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
157b0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
157c0 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
157d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
157e0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 157f0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 15800 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
15810 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 15820 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 15830 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 15840 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
15850 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
15860 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
15870 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68  Directories { ch
15880 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c  annel {reset fal
15890 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
158a0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
158b0 43 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c  Check if the sql
158c0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
158d0 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
158e0 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  n is available..
158f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15900 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c  tputs $channel \ 15910 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- 15920 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 - checking for f 15930 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f unction sqlite3_ 15940 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 15950 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ory... ".... 15960 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15970 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 E: This call to 15980 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 15990 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 159a0 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 function uses th 159b0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 159c0 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 invalid value 0 159d0 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 for the first a 159e0 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 rgument. This c 159f0 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d ode is designed. 15a00 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 15a10 6f 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 o check if calli 15a20 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 ng the function 15a30 77 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 will raise an ex 15a40 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 ception (i.e... 15a50 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 15a60 20 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f actual result o 15a70 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 f the function d 15a80 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 oes not matter a 15a90 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 s long as no.. 15aa0 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 15ab0 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 ctory is changed 15ac0 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 15ad0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 15ae0 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object 15af0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 15b00 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 15b10 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 15b20 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 15b30 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 15b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 .. sq 15b50 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 15b60 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c directory 0 null 15b70 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d .. }] == 0} 15b80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15b90 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15ba0 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 TE: Calling the 15bb0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 15bc0 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 15bd0 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 tion does not.. 15be0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 15bf0 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f ause an exceptio 15c00 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 n; therefore, it 15c10 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 must be availab 15c20 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 le (i.e... 15c30 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 # even t 15c40 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 hough it should 15c50 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 return a failure 15c60 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 return code in 15c70 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 15c80 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 case)... 15c90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15ca0 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 addConstraint s 15cb0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 15cc0 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 _directory.... 15cd0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
15ce0 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20  nnel yes\n....
15cf0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15d00 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
15d10 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
15d20 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
15d30 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20  tories?..
15d40 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
15d50 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $reset} then {.. 15d60 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 15d70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 15d80 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 ow make sure the 15d90 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 database and te 15da0 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 mporary director 15db0 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 ies are.. 15dc0 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 # reset 15dd0 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 their default v 15de0 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f alues, which sho 15df0 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 uld be null for 15e00 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 both... 15e10 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 # Since t 15e20 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 15e30 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 15e40 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c unction is avail 15e50 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 able,.. 15e60 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 2e # use it. 15e70 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 15e80 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 for {se 15e90 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 t index 1} {$ind
15ea0 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e  ex < 3} {incr in
15eb0 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  dex} {..
15ec0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
15ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15ee0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
15ef0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
15f00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
15f10 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
15f20 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
15f30 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15f50 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
15f60 65 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e  et_directory $in 15f70 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 dex null.. 15f80 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 15f90 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 15fa0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 15fb0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
15fc0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
15fe0 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77  - call sqlite3_w
15ff0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
16000 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20  ry(" $index \.. 16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16020 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a ", null)... ok: 16030 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a "$result \n]..
16040 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
16050 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
16060 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 16070 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 16080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16090 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 160a0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 160b0 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e _directory("$in
160c0 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dex \..
160d0 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c           ", null
160e0 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e  )... error: " \n
160f0 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 16100 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 16110 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 16120 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 16130 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 16140 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
16150 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  \n....        #.
16160 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
16170 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72   Does our caller
16180 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74   want to reset t
16190 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20  he directories?
161a0 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a   This can only..
161b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
161c0 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20  be performed if
161d0 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64  SQLite is loaded
161e0 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75   and ready for u
161f0 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a  se by the test..
16200 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16210 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
16220 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  #..        if {$16230 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 reset && [isSQLi 16240 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b teReady]} then { 16250 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 16260 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 16270 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 Now make sure t 16280 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 he database and 16290 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 162a0 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 ories are.. 162b0 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 # res 162c0 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 et their default 162d0 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 values, which s 162e0 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f hould be null fo 162f0 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 r both... 16300 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 # Since 16310 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e the sqlite3_win 16320 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 16330 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e function does n 16340 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ot.. # 16350 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 appear to 16360 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 be available, us 16370 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 e the associated 16380 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 PRAGMA commands 16390 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 163a0 20 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 instead... 163b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 163c0 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 foreach dir 163d0 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 ectory [list dat 163e0 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 a_store_director 163f0 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 y temp_store_dir 16400 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 ectory] {.. 16410 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b set sql [ 16420 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 appendArgs "PRAG 16430 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 MA "$directory
16440 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20  " = \"\";"]....
16450 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
16460 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71  catch {executeSq
16470 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20  l $sql} result] 16480 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 16490 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 164a0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
164b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
164c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
164d0 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41  - execute PRAGMA
164e0 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e   " $directory ". 164f0 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 .. ok: \"" \.. 16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16510 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20$result \"\n]..
16520 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
16530 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
16540 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 16550 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16570 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 "---- execute 16580 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 PRAGMA "$direc
16590 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a  tory "... error:
165a0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
165b0 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 165c0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 165d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 165e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 165f0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 16600 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 16610 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 E: Finally, show 16620 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c the current val 16630 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 ue of the databa 16640 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 se and temporary 16650 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16660 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 directories. Th 16670 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 is can only be p 16680 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 erformed if SQLi 16690 74 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 te is loaded.. 166a0 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 166b0 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 ready for use by 166c0 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 166d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 166e0 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 if {[isSQLiteRe 166f0 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ady]} then {.. 16700 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 foreach di 16710 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 rectory [list da 16720 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f ta_store_directo 16730 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 ry temp_store_di 16740 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 rectory] {.. 16750 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
16760 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
16770 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
16780 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e  " $directory ".. 16790 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 . "].... 167a0 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e set sql [appen 167b0 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 dArgs "PRAGMA " 167c0 24 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a$directory \;]..
167d0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
167e0 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53  [catch {executeS
167f0 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20  ql $sql scalar} 16800 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 16810 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16820 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
16830 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b   [appendArgs "ok
16840 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22  : \"" $result \" 16850 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 16860 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 16870 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
16880 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
16890 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24  "error: " \n\t $168a0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 168b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 168c0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 168d0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 168e0 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 loadSQLiteTestSe 168f0 74 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c ttings { channel 16900 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 {suffix ""} {qu 16910 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 16920 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16930 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 NOTE: Skip load 16940 69 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 ing the settings 16950 20 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 if their usage 16960 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 has been disable 16970 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 16980 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 16990 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 ists ::no(sqlite 169a0 54 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 TestSettings)]} 169b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 169c0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 169d0 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 E: Load custom p 169e0 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 er-user and/or p 169f0 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 16a00 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 tings now... 16a10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 16a20 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 16a30 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 ::tcl_platform(u 16a40 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ser)]} then {.. 16a50 20 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 set use 16a60 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 16a70 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 16a80 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 tCommonDirectory 16a90 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 16aa0 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 [appendArgs s 16ab0 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 ettings$suffix
16ac0 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  . $::tcl_platfor 16ad0 6d 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d m(user) .eagle]] 16ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 16af0 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
16b00 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
16b10 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
16b20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
16b30 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 16b50 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
16b60 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
16b80 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d  --- loading per-
16b90 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e  user test settin
16ba0 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16bc0 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69   $userSettingsFi 16bd0 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d leName \"...\n]. 16be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 16bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 16c00 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 16c10 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 upleve 16c20 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 l 1 [list source 16c30 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69$userSettingsFi
16c40 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
16c50 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74       } error]} t
16c60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
16c70 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 16c80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16c90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 16ca0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
16cb0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
16cd0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
16ce0 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73  d to load per-us
16cf0 65 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  er settings file
16d00 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
16d10 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65              $use 16d20 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 16d30 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 e "\", error: " 16d40 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
16d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
16d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16d70 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
16d80 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
16d90 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 16da0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16db0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
16dc0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
16dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16de0 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
16df0 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73  d loading per-us
16e00 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  er test settings
16e10 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $16e30 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 16e40 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 Name "\", it doe 16e50 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 16e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 16e70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 16e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16e90 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 16ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 16eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 16ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 16ed0 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 16ee0 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 16ef0 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 xists ::tcl_plat 16f00 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 form(host)]} the 16f10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 16f20 65 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 et hostSettingsF 16f30 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ileName [file jo 16f40 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 in [getCommonDir 16f50 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 ectory] \.. 16f60 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append 16f70 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 Args settings$s
16f80 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70  uffix . $::tcl_p 16f90 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 latform(host) .e 16fa0 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 agle]].... 16fb0 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 16fc0 69 73 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e ists$hostSettin
16fd0 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65  gsFileName]} the
16fe0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
16ff0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 17000 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 17010 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
17020 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
17030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17040 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e      "---- loadin
17050 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20  g per-host test
17060 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
17070 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
17080 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74         $hostSett 17090 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e ingsFileName \". 170a0 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ..\n].. 170b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 170c0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 170d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 170e0 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 170f0 73 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 source$hostSett
17100 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20  ingsFileName]..
17110 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
17120 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
17130 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
17140 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17160 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
17170 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17190 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
171a0 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20   failed to load
171b0 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67  per-host setting
171c0 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
171e0 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46    $hostSettingsF 171f0 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 ileName "\", err 17200 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
17210 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
17220 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
17230 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
17240 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
17250 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 17260 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 17270 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 17280 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
17290 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
172a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
172b0 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20  skipped loading
172c0 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65  per-host test se
172d0 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
172e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
172f0 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e       $hostSettin 17300 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 gsFileName "\", 17310 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 17320 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 t\n"].. 17330 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 17340 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 17350 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 17360 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c . proc runSQL 17370 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 iteTestPrologue 17380 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 17390 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 173a0 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 173b0 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 stom prologue if 173c0 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 173d0 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 173e0 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a skipped... 173f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 17400 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 17410 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 ::no(prologue.e 17420 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a agle)]} then {.. 17430 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17440 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 17450 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 the "before-cons 17460 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 traints" custom 17470 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 17480 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 per-host.. 17490 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 174a0 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 174b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 174c0 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 174d0 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 174e0 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
174f0 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d  channel .before]
17500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
17510 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44         # NOTE: D
17520 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d  etermine the nam
17530 65 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  es of the native
17540 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72   platform and ar
17550 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20  chitecture...
17560 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17570 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65  set platform [ge
17580 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74  tBuildPlatform t
17590 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65  rue]..        se
175a0 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b  t architecture [
175b0 61 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50  architectureForP
175c0 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72  latform $platfor 175d0 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d m].... #. 175e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 175f0 20 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f Show the platfo 17600 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 rm and architect 17610 75 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 ure used to help 17620 20 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 locate the.. 17630 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 # nat 17640 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e ive build files. 17650 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 17660 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
17670 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17680 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
17690 20 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74        "---- plat
176a0 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e  form for locatin
176b0 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66  g native build f
176c0 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20  iles is \"" \..
176d0 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74             $plat 176e0 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 form \"\n].... 176f0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
17700 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
17710 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
17720 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63         "---- arc
17730 68 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f  hitecture for lo
17740 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75  cating native bu
17750 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22  ild files is \""
17760 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17770 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22  $architecture \" 17780 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 17790 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 177a0 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f : Build a list o 177b0 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 f configuration 177c0 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 files that we ha 177d0 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 ndle... # 177e0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f .. set co 177f0 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c nfigFileNames [l 17800 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 17810 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 17820 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 QLite.dll.config 17830 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 17840 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 17850 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 Build a list of 17860 61 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 auxiliary Manage 17870 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 d Debugging Assi 17880 73 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 stants (MDA).. 17890 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 178a0 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 nfiguration file 178b0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 178c0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 178d0 20 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e set mdaCon 178e0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 figFileNames [li 178f0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 17900 20 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 EagleShell32.e 17910 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e xe.mda.config In 17920 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e staller.exe.mda. 17930 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 config \.. 17940 20 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d test.exe.m 17950 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 da.config testli 17960 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 nq.exe.mda.confi 17970 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g \.. 17980 20 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 testef6.exe.mda 17990 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 .config].... 179a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 179b0 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 179c0 20 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 list of externa 179d0 6c 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 l files that we 179e0 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 handle. Some of 179f0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 17a00 20 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 these files ma 17a10 79 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f y be native and/ 17a20 6f 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d or managed assem 17a30 62 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a blies that are.. 17a40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 17a50 72 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 required to perf 17a60 6f 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 orm various test 17a70 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 17a80 20 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72 set exter 17a90 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 nalFileNames [li 17aa0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 17ab0 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 [file join Ent 17ac0 69 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 ityFramework lib 17ad0 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 [string map [li 17ae0 73 74 20 46 78 20 22 22 5d 20 5b 73 74 72 69 6e st Fx ""] [strin 17af0 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g \.. 17b00 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 map [list netFx 17b10 34 35 31 20 6e 65 74 46 78 34 35 5d 20 5b 67 65 451 netFx45] [ge 17b20 74 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 tBuildNetFx]]] E 17b30 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 ntityFramework.d 17b40 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ll]].... 17b50 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17b60 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 E: Build the lis 17b70 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65 t of native asse 17b80 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 mbly files that 17b90 77 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d we handle. The. 17ba0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 17bb0 20 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79 73 reason the "Sys 17bc0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 17bd0 64 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e 63 dll" file is inc 17be0 6c 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a 20 luded here is.. 17bf0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 17c00 65 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64 20 ecause it could 17c10 62 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 be the mixed-mod 17c20 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 e assembly... 17c30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17c40 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 set nativeFileNa 17c50 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 mes [list \.. 17c60 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 sqlite3 17c70 2e 64 6c 6c 20 53 51 4c 69 74 65 2e 49 6e 74 65 .dll SQLite.Inte 17c80 72 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 rop.dll System.D 17c90 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d ata.SQLite.dll]. 17ca0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 17cb0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 17cc0 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 ild the list of 17cd0 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 17ce0 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 files that we h 17cf0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... 17d00 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d #.. set m 17d10 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 17d20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 17d30 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 17d40 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 .SQLite.dll Syst 17d50 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L 17d60 69 6e 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 inq.dll \.. 17d70 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 17d80 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c ta.SQLite.EF6.dl 17d90 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d l].... #. 17da0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 17db0 20 52 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 Remove any test 17dc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 constraints tha 17dd0 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e t refer to the n 17de0 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 ative and/or.. 17df0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 # ma 17e00 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 naged assembly f 17e10 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 17e20 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 dle unless forbi 17e30 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 dden from.. 17e40 20 20 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67 # doing 17e50 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d so... #. 17e60 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 17e70 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 17e80 73 71 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 sqliteRemoveCons 17e90 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 traints)]} then 17ea0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 {.. for 17eb0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 each fileName$c
17ec0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
17ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
17ee0 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  moveConstraint [
17ef0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
17f00 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20   $fileName].. 17f10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 17f20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 17f30 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 leName$mdaConfi
17f40 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
17f50 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
17f60 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
17f70 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69  ndArgs file_ $fi 17f80 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 leName].. 17f90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 17fa0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 17fb0 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 me$externalFile
17fc0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
17fd0 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74       removeConst
17fe0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
17ff0 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61  s file_ [file ta
18000 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 18010 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 18020 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 18030 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 fileName$nativ
18040 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  eFileNames {..
18050 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
18060 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
18070 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69  ndArgs file_ $fi 18080 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 leName].. 18090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 180a0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 180b0 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e me$managedFileN
180c0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
180d0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
180e0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
180f0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 18100 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 18110 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18120 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 18130 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c # NOTE: Skip all 18140 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 18150 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 ite related file 18160 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 handling (delet 18170 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ing,.. # 18180 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 copying, a 18190 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 nd loading) if i 181a0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 181b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 181c0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 181d0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 ::no(sqliteFile 181e0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 181f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18200 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 18210 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 trying to delet 18220 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 e any files if i 18230 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 18240 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18250 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 18260 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 18270 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 18280 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18290 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 182a0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 182b0 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 SqliteConfigFile 182c0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 182d0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 182e0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e ch fileName$con
182f0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18310 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
18320 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 18330 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 18340 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 18350 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 18360 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 18370 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 18380 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d ExternalFiles)]} 18390 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 183a0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 183b0 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 ileName$mdaConf
183c0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
183e0 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c  ryDeleteBuildFil
183f0 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  e $fileName.. 18400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 18420 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
18430 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  externalFileName
18440 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
18450 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
18460 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61  naryFile $fileNa 18470 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 18480 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 18490 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 184a0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 184b0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 184c0 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 qliteNativeFiles 184d0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 184e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 184f0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 18500 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 (deleteSqliteImp 18510 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 18520 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 18530 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 18540 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
18550 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
18570 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24  DeleteAssembly $18580 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 18590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 185a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 185c0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 185d0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 185e0 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 eNonImplicitFile 185f0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 18600 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 18610 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 18620 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 18630 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 PlatformFiles)] 18640 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 18650 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 18660 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
18670 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
18680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18690 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
186a0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 186b0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 186c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 186d0 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 eleteAssembly$f
186e0 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 186f0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m.. 18700 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 18710 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18720 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 18730 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 18740 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 18750 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 ArchitectureFile 18760 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 18780 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 tring length$ar
18790 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d  chitecture] > 0}
187a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
187b0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
187c0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 187d0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 187f0 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 18800 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
18810 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20  $architecture.. 18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18830 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 18840 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 18850 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 18860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 18870 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 18880 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 18890 74 65 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 teSqliteManagedF 188a0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 188c0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
188d0 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
188e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
188f0 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73      tryDeleteAss
18900 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d  embly $fileName. 18910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 18920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 18930 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 18940 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 18950 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 18960 68 65 63 6b 20 66 6f 72 20 74 68 65 20 22 61 75 heck for the "au 18970 74 6f 53 65 6c 65 63 74 22 20 72 75 6e 74 69 6d toSelect" runtim 18980 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 e option. If pr 18990 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 esent,.. 189a0 20 20 23 20 20 20 20 20 20 20 61 74 74 65 6d 70 # attemp 189b0 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c t to automatical 189c0 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 ly select the fi 189d0 72 73 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 rst available.. 189e0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 189f0 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 build (or "rele 18a00 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20 ase") of SQLite 18a10 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e and System.Data. 18a20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 SQLite.. 18a30 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 # for us 18a40 65 20 77 69 74 68 20 74 68 65 20 74 65 73 74 20 e with the test 18a50 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 18a60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 18a70 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 f {[hasRuntimeOp 18a80 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d tion autoSelect] 18a90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18aa0 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68 65 63 if {![chec 18ab0 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 kForSQLiteBuilds 18ac0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
18ad0 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a   true]} then {..
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68                ch
18af0 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65  eckForSQLiteRele
18b00 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ases $::test_cha 18b10 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 nnel true.. 18b20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 18b30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 18b40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18b50 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 18b60 69 6e 67 20 74 6f 20 76 65 72 69 66 79 20 74 68 ing to verify th 18b70 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 18b80 79 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 3b y if instructed; 18b90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 18ba0 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6d otherwise, m 18bb0 61 6b 65 20 73 75 72 65 20 69 74 20 61 63 74 75 ake sure it actu 18bc0 61 6c 6c 79 20 65 78 69 73 74 73 20 6f 72 20 68 ally exists or h 18bd0 61 6c 74 20 74 68 65 20 65 6e 74 69 72 65 0d 0a alt the entire.. 18be0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 18bf0 20 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 testing proces 18c00 73 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 s if it does not 18c10 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 exist... 18c20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18c30 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 18c40 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 s ::no(verifyBui 18c50 6c 64 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 ldDirectory)]} t 18c60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18c70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18c80 20 20 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 # NOTE: At thi 18c90 73 20 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 s point, the bui 18ca0 6c 64 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53 ld directory MUS 18cb0 54 20 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20 T exist as a.. 18cc0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 18cd0 20 20 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 valid director 18ce0 79 20 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e y for the testin 18cf0 67 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e g process to con 18d00 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 tinue... 18d10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 18d20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 set directory 18d30 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 [getBuildDirect 18d40 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ory].... 18d50 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 18d60 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 xists$directory
18d70 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
18d80 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69          ![file i
18d90 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire 18da0 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 18dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 18dd0 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f NOTE: Just prio 18de0 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 r to actually ha 18df0 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e lting the testin 18e00 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 g process,.. 18e10 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 18e20 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 add an error t 18e30 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 o the test log f 18e40 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 18e50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 18e60 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
18e70 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
18e80 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
18e90 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
18ea0 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69  - could not veri
18eb0 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  fy build directo
18ec0 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72  ry \"" $director 18ed0 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 18ee0 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 "\", all 18ef0 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e testing halted\n 18f00 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 18f10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 18f20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 # NOTE: Rai 18f30 73 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 sing a script er 18f40 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f ror from this po 18f50 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d int should halt. 18f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 18f70 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 the testi 18f80 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 ng process... 18f90 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 18fa0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro 18fb0 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d r [appendArgs \. 18fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 18fd0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 "could not ve 18fe0 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 rify build direc 18ff0 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 tory \""$direct
19000 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
19010 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c           "\", al
19020 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
19030 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
19040 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
19050 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
19060 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
19070 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
19080 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69  copy any files i
19090 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
190a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
190b0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
190c0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
190d0 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  ySqliteFiles)]}
190e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
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 63 6f 70 79 53  xists ::no(copyS
19110 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73  qliteConfigFiles
19120 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
19130 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
19140 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66  h fileName $conf 19150 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 19170 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 ryCopyBuildFile 19180 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
19190 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
191a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
191b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
191c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
191d0 63 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e  copySqliteExtern
191e0 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  alFiles)]} then
191f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
19200 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
19210 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74    # NOTE: Copy t
19220 68 65 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67  he Managed Debug
19230 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20  ging Assistants
19240 28 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74  (MDA) configurat
19250 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..
19260 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20     #       file
19270 66 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68  for the Eagle sh
19280 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ell to the build
19290 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72   output director
192a0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..
192b0 20 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 20    #       while
192c0 75 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68  using each of th
192d0 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76  e names of the v
192e0 61 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65  arious legacy te
192f0 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..
19300 20 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74    #       execut
19310 61 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c  ables.  This wil
19320 6c 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73  l help to make s
19330 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65  ure that all the
19340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19350 23 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 74  #       legacy t
19360 65 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 78  ests run with ex
19370 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73  actly the same s
19380 65 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20  et of Managed..
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
193a0 20 20 20 20 20 44 65 62 75 67 67 69 6e 67 20 41       Debugging A
193b0 73 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67  ssistants config
193c0 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  ured...
193d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
193e0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
193f0 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69  leName $mdaConfi 19400 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 gFileNames {.. 19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 19420 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 yCopyBinaryFile 19430 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d EagleShell.exe.m 19440 64 61 2e 63 6f 6e 66 69 67 20 22 22 20 24 66 69 da.config ""$fi
19450 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
19460 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
19470 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19480 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
19490 3a 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72  : Copy the exter
194a0 6e 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66  nal binaries, if
194b0 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72   any, to the dir
194c0 65 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20  ectory that..
194d0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
194e0 20 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20     contains the
194f0 45 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68  Eagle shell.  Th
19500 69 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  is is typically
19510 75 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20  used to make..
19520 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
19530 20 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c      sure assembl
19540 69 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62  ies referenced b
19550 79 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67  y the ones being
19560 20 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20   tested are..
19570 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
19580 20 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72     available dur
19590 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20  ing the testing
195a0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  process...
195b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
195c0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
195d0 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72   fileName $exter 195e0 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a nalFileNames {.. 195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19600 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 tryCopyExternalF 19610 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 ile$fileName..
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19630 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19640 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
19650 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
19660 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61  :no(copySqliteNa
19670 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  tiveFiles)]} the
19680 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19690 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
196a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
196b0 68 65 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d  he test platform
196c0 20 69 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64   is likely the d
196d0 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d  efault for this.
196e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
196f0 20 20 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20         machine,
19700 61 6c 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79  also try to copy
19710 20 74 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65   the native file
19720 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..
19730 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
19740 62 69 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  binary location.
19750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19760 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
19770 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
19780 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
19790 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29  teImplicitFiles)
197a0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
197b0 20 20 20 20 20 20 20 20 20 20 5b 69 73 44 65 66            [isDef
197c0 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  aultBuildPlatfor
197d0 6d 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d  m true]} then {.
197e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
197f0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
19800 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 19810 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 19820 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 tryCopyA 19830 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
19840 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
19850 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
19860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
19870 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
19880 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
19890 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69  pySqliteNonImpli
198a0 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
198b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
198c0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
198d0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
198e0 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c  qlitePlatformFil
198f0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
19910 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p 19920 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 latform] > 0} th 19930 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19940 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 19950 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
19960 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19980 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
19990 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
199a0 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..
199b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
199c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
199e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
199f0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
19a00 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c  eArchitectureFil
19a10 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
19a30 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61  string length $a 19a40 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 rchitecture] > 0 19a50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19a60 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 19a70 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 ach fileName$na
19a80 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  tiveFileNames {.
19a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19aa0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
19ab0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
19ac0 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20  architecture..
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19ae0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
19af0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
19b00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
19b10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
19b20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
19b30 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
19b40 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65  qliteManagedFile
19b50 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
19b60 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
19b70 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e  ch fileName $man 19b80 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d agedFileNames {. 19b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19ba0 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 tryCopyAssembly 19bb0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
19bc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
19bd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
19be0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
19bf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19c00 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74    # NOTE: Skip t
19c10 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e  rying to load an
19c20 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72  y files if instr
19c30 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
19c40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
19c50 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
19c60 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
19c70 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
19c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
19c90 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
19ca0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d  :no(loadSqliteIm
19cb0 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74  plicitFiles)]} t
19cc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19cd0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
19ce0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
19cf0 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..
19d00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
19d10 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
19d20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
19d30 28 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46  (loadSqliteLinqF
19d40 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19d60 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
19d70 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
19d80 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20  .Linq.dll..
19d90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
19da0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
19db0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
19dc0 6f 61 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65  oadSqliteEf6File
19dd0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
19de0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f             tryLo
19df0 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65  adAssembly Syste
19e00 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
19e10 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  6.dll..
19e20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
19e30 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
19e40 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53  xists ::no(loadS
19e50 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74  qliteNonImplicit
19e60 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
19e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
19e80 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
19e90 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
19ea0 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20  PlatformFiles)]
19eb0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
19ec0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
19ed0 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform 19ee0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 19f00 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 ryLoadAssembly S 19f10 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 19f20 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d e.dll$platform.
19f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
19f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
19f50 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
19f60 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c  sts ::no(loadSql
19f70 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
19f80 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
19fa0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61  string length $a 19fb0 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 rchitecture] > 0 19fc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19fd0 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 19fe0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 19ff0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 1a000 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a$architecture..
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a020 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1a030 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1a040 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1a050 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
1a060 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1a070 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1a080 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1a090 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 1a0a0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 1a0b0 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e sqlite3.dll\"... 1a0c0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1a0d0 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f [file versio 1a0e0 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 1a0f0 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c Name sqlite3.dll 1a100 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 1a110 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 1a120 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1a130 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1a140 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1a150 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1a160 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
1a170 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74  rsion of \"SQLit
1a180 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e  e.Interop.dll\".
1a190 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
1a1a0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
1a1b0 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
1a1c0 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e  leName SQLite.In
1a1d0 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  terop.dll]] \n].
1a1e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1a1f0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1a200 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a210 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1a220 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1a230 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1a240 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 1a250 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 1a260 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 1a270 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1a280 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 1a290 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 1a2a0 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 1a2b0 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d SQLite.dll]] \n] 1a2c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1a2d0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 1a2e0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1a2f0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1a300 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1a320 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
1a330 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61  of \"System.Data
1a340 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
1a350 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20  \"... " \..
1a360 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76           [file v
1a370 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72  ersion [getBinar
1a380 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  yFileName System
1a390 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
1a3a0 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  q.dll]] \n]..
1a3b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1a3c0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
1a3d0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1a3e0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1a3f0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1a400 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 1a410 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 1a420 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1a430 74 65 2e 45 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 te.EF6.dll\"... 1a440 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1a450 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 1a460 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 1a470 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 1a480 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d SQLite.EF6.dll]] 1a490 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 1a4a0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 1a4b0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
1a4c0 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68  latform] > 0} th
1a4d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1a4e0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1a4f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1a500 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1a510 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1a520 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1a530 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 1a540 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d \""$platform \.
1a550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a560 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22   "/sqlite3.dll\"
1a570 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73  ... " [file vers
1a580 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
1a590 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72         [getBinar
1a5a0 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65  yFileName sqlite
1a5b0 33 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d  3.dll $platform] 1a5c0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 1a5d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1a5e0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1a5f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1a600 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1a610 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1a620 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1a630 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
1a640 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d  \"" $platform \. 1a650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1a660 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f "/SQLite.Intero 1a670 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 p.dll\"... " [fi 1a680 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 le version \.. 1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 1a6a0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 1a6b0 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e SQLite.Interop. 1a6c0 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 dll$platform]]
1a6d0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1a6e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  ....          ca
1a6f0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1a700 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1a710 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1a720 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1a730 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 1a740 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 1a750 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 "$platform \..
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a770 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  /System.Data.SQL
1a780 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b  ite.dll\"... " [
1a790 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a  file version \..
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a7b0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
1a7c0 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
1a7d0 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66  QLite.dll $platf 1a7e0 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 orm]] \n].. 1a7f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1a800 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 1a810 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 1a820 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e$architecture] >
1a830 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1a840 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1a850 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1a860 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1a870 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1a890 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 1a8a0 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
1a8b0 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
1a8c0 20 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c             "/sql
1a8d0 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  ite3.dll\"... "
1a8e0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
1a8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a900 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
1a910 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20  ame sqlite3.dll
1a920 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20  $architecture]] 1a930 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1a940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 .... ca 1a950 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1a960 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1a970 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1a980 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1a990 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
1a9a0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
1a9b0 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20  " $architecture 1a9c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a9d0 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 "/SQLite.Inte 1a9e0 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b rop.dll\"... " [ 1a9f0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1aa10 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 1aa20 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f me SQLite.Intero 1aa30 70 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 p.dll$architect
1aa40 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  ure]] \n]..
1aa50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1aa60 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
1aa70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1aa80 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1aa90 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1aab0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 1aac0 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 of \""$archite
1aad0 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20  cture \..
1aae0 20 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65           "/Syste
1aaf0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1ab00 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76  l\"... " [file v
1ab10 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
1ab20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
1ab30 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
1ab40 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1ab50 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72  dll $architectur 1ab60 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e]] \n].. 1ab70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1ab80 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1ab90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 # NOTE: Gr 1aba0 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d ab the list of m 1abb0 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 1abc0 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e s for the curren 1abd0 74 20 70 72 6f 63 65 73 73 0d 0a 20 20 20 20 20 t process.. 1abe0 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 # and r 1abf0 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 eport on the Sys 1ac00 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 1ac10 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 related ones... 1ac20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ac30 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 set assemblies 1ac40 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 1ac50 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e AppDomain.Curren 1ac60 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d tDomain GetAssem 1ac70 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 blies].... 1ac80 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 1ac90 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d assembly$assem
1aca0 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  blies {..
1acb0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d     if {[string m
1acc0 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61  atch \{System.Da
1acd0 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65  ta.SQLite* $asse 1ace0 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mbly]} then {.. 1acf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1ad00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1ad10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ad30 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64  "---- found load
1ad40 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24  ed assembly: " $1ad50 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 assembly \n].. 1ad60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1ad70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1ad80 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1ad90 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1ada0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
1adb0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1adc0 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73  define constants
1add0 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61   for \"System.Da
1ade0 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22  ta.SQLite\"... "
1adf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1ae00 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1ae10 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1ae20 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1ae30 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1ae40 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1ae50 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
1ae60 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73  Lite3 DefineCons
1ae70 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20  tants..
1ae80 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e   } defineConstan
1ae90 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ts] == 0} then {
1aea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1aeb0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1aec0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1aed0 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f [formatList [lso 1aee0 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rt \.. 1aef0 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e$defineCon
1af00 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20  stants] <none>]
1af10 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1af20 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1af30 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1af40 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 1af50 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 1af60 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1af70 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 1af80 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 1af90 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1afa0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1afb0 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76    "---- source v
1afc0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74  ersion of \"Syst
1afd0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
1afe0 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  ll\"... "....
1aff0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1b000 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
1b010 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
1b020 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
1b030 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b040 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
1b050 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
1b060 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72  nection Provider
1b070 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..
1b080 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d     } version] ==
1b090 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1b0a0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
1b0b0 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers 1b0c0 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then 1b0d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b0e0 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c set version nul 1b0f0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 1b100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1b110 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1b120 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b130 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20  $version \n].. 1b140 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1b150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1b160 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1b170 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20  nel unknown\n..
1b180 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1b190 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1b1a0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
1b1b0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1b1c0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 1b1d0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1b1e0 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 source checkout 1b1f0 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 of \"System.Dat 1b200 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e a.SQLite.dll\".. 1b210 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 1b220 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1b230 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 1b240 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 1b250 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 1b270 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1b280 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 1b290 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 n ProviderSource 1b2a0 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 Id.. } 1b2b0 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 sourceId] == 0} 1b2c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b2d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 1b2e0 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 length$sourceId
1b2f0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1b310 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d  t sourceId null.
1b320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b330 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1b340 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1b350 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 l [appendArgs$s
1b360 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20  ourceId \n]..
1b370 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1b380 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1b390 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1b3a0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 el unknown\n.. 1b3b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1b3c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1b3d0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b3e0 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 E: Check the ava 1b3f0 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 ilable builds (a 1b400 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f nd "releases") o 1b410 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 f SQLite and.. 1b420 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 # Sy 1b430 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1b440 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b450 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 1b460 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 LiteBuilds$::te
1b470 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
1b480 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
1b490 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65  teReleases $::te 1b4a0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 1b4b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1b4c0 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 # NOTE: Now, we 1b4d0 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 need to know if 1b4e0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core 1b4f0 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 library is avai 1b500 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 lable.. # 1b510 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 (i.e. bec 1b520 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 ause the managed 1b530 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 -only System.Dat 1b540 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c a.SQLite assembl 1b550 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 y can.. # 1b560 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 load with 1b570 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c out it; however, 1b580 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e it cannot do an 1b590 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 ything useful wi 1b5a0 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 thout.. # 1b5b0 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 it). If 1b5c0 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 we are using the 1b5d0 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 1b5e0 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 mbly and we alre 1b5f0 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ady.. # 1b600 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 found it (a 1b610 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 bove), this shou 1b620 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 ld always succee 1b630 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 1b640 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 1b650 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a QLiteLibrary$::
1b660 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
1b670 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1b680 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
1b690 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69   if the SQLite i
1b6a0 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20  nterop assembly
1b6b0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  is available...
1b6c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b6d0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
1b6e0 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f  Interop $::test_ 1b6f0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 1b700 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b710 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 1b720 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 SQLite database 1b730 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 and temporary di 1b740 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 rectories... 1b750 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 1b760 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 heckForSQLiteDir 1b770 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 ectories$::test
1b780 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
1b790 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1b7a0 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
1b7b0 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76  o determine if v
1b7c0 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74  arious compile-t
1b7d0 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64  ime options need
1b7e0 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ed for..
1b7f0 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e  #       test con
1b800 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e  straints were en
1b810 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61  abled for the ma
1b820 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20  naged assembly.
1b830 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   There..
1b840 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65  #       are some
1b850 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
1b860 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20  tions that must
1b870 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65  also have been e
1b880 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nabled..
1b890 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20  #       for the
1b8a0 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
1b8b0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be
1b8c0 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20  effective.  For
1b8d0 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23  those..        #
1b8e0 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20         options,
1b8f0 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d  it will be assum
1b900 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65  ed that it was e
1b910 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69  nabled for the i
1b920 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20  nterop..
1b930 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
1b940 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c   if it was enabl
1b950 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67  ed for the manag
1b960 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  ed assembly...
1b970 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1b980 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43   foreach defineC
1b990 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d  onstant [list \.
1b9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45  .            CHE
1b9b0 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48  CK_STATE COUNT_H
1b9c0 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45  ANDLE DEBUG INTE
1b9d0 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f  ROP_CODEC INTERO
1b9e0 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20  P_DEBUG \..
1b9f0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45         INTEROP_E
1ba00 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f  XTENSION_FUNCTIO
1ba10 4e 53 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43  NS INTEROP_LEGAC
1ba20 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f  Y_CLOSE INTEROP_
1ba30 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  LOG \..
1ba40 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f     INTEROP_TEST_
1ba50 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f  EXTENSION INTERO
1ba60 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE
1ba70 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d  NET_20 NET_35 \.
1ba80 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54  .            NET
1ba90 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34  _40 NET_45 NET_4
1baa0 35 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  51 NET_COMPACT_2
1bab0 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  0 PLATFORM_COMPA
1bac0 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20  CTFRAMEWORK \..
1bad0 20 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f             PRELO
1bae0 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52  AD_NATIVE_LIBRAR
1baf0 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53  Y RETARGETABLE S
1bb00 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c  QLITE_STANDARD \
1bb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48  ..            TH
1bb20 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20  ROW_ON_DISPOSED
1bb30 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e  TRACE TRACE_CONN
1bb40 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 54  ECTION TRACE_DET
1bb50 45 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20  ECTION \..
1bb60 20 20 20 20 20 20 54 52 41 43 45 5f 48 41 4e 44        TRACE_HAND
1bb70 4c 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44  LE TRACE_PRELOAD
1bb80 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52   TRACE_SHARED TR
1bb90 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 5c 0d  ACE_STATEMENT \.
1bba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41  .            TRA
1bbb0 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b  CE_WARNING TRACK
1bbc0 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53  _MEMORY_BYTES US
1bbd0 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f  E_ENTITY_FRAMEWO
1bbe0 52 4b 5f 36 20 5c 0d 0a 20 20 20 20 20 20 20 20  RK_6 \..
1bbf0 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f      USE_INTEROP_
1bc00 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f  DLL USE_PREPARE_
1bc10 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20  V2 WINDOWS] {..
1bc20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1bc30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
1bc40 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69  eck if the compi
1bc50 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
1bc60 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20  s listed in the
1bc70 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20  list of..
1bc80 20 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69     #       "defi
1bc90 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65  ne constants" ke
1bca0 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74  pt track of by t
1bcb0 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  he managed assem
1bcc0 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  bly...
1bcd0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  #..          che
1bce0 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e  ckForSQLiteDefin
1bcf0 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73  eConstant $::tes 1bd00 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e t_channel$defin
1bd10 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20  eConstant..
1bd20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1bd30 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1bd40 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  E: Check the cur
1bd50 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e  rent build year.
1bd60 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69    Basically, thi
1bd70 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20  s indicates..
1bd80 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
1bd90 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53  ch version of MS
1bda0 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73  Build and/or Vis
1bdb0 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75  ual Studio was u
1bdc0 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  sed to..
1bdd0 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20  #       compile
1bde0 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e  the assembly bin
1bdf0 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74  aries under test
1be00 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1be10 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1be20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 1be30 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1be40 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 1be50 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1be60 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 build year... " 1be70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 1be80 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 year [getBuildYe 1be90 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 ar].. add 1bea0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 1beb0 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 ndArgs buildYear 1bec0 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 .$year]..
1bed0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1bee0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1bef0 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c rgs \"$year \"\
1bf00 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
1bf10 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1bf20 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
1bf30 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72  nt build .NET Fr
1bf40 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 61  amework.  Basica
1bf50 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 20  lly, this..
1bf60 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 63     #       indic
1bf70 61 74 65 73 20 77 68 69 63 68 20 76 65 72 73 69  ates which versi
1bf80 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46  on of the .NET F
1bf90 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 6e  ramework is bein
1bfa0 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  g..        #
1bfb0 20 20 20 75 73 65 64 20 62 79 20 74 68 65 20 61     used by the a
1bfc0 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73  ssembly binaries
1bfd0 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20   under test...
1bfe0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1bff0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1c000 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 1c010 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 1c020 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 1c030 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 1c040 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b d .NET Framework 1c050 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 1c060 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42 set netFx [getB 1c070 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20 uildNetFx].. 1c080 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 1c090 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 t [appendArgs bu 1c0a0 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e ildFramework.$n
1c0b0 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74  etFx]..        t
1c0c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1c0d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1c0e0 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d \"$netFx \"\n]
1c0f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1c100 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
1c110 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
1c120 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61   build configura
1c130 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75  tion.  This shou
1c140 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20  ld normally..
1c150 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
1c160 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f  either "Debug" o
1c170 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20  r "Release"...
1c180 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c190 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1c1a0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 1c1b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 1c1c0 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 1c1d0 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 1c1e0 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 1c1f0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 1c200 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f set configuratio 1c210 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 n [getBuildConfi 1c220 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 guration].. 1c230 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 1c240 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 1c250 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e ldConfiguration. 1c260 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d$configuration]
1c270 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
1c280 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1c290 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
1c2a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22  configuration \"
1c2b0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
1c2c0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1c2d0 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61  : Try to setup a
1c2e0 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c  n interrupt call
1c2f0 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73  back using the s
1c300 63 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a  cript debugger..
1c310 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1c320 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c  that will cancel
1c330 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73   all SQL queries
1c340 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72   in progress for
1c350 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20   all database..
1c360 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
1c370 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e  onnections known
1c380 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72   to this interpr
1c390 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
1c3a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
1c3b0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1c3c0 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74  (sqliteInterrupt
1c3d0 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e  Callback)]} then
1c3e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
1c3f0 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61  tupDbInterruptCa
1c400 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63  llback $::test_c 1c410 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c hannel$::test_l
1c420 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  og..        }...
1c430 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1c440 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
1c450 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65  k for the native
1c460 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c   runtime option,
1c470 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61   which would mea
1c480 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20  n we are..
1c490 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20    #       using
1c4a0 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
1c4b0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
1c4c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
1c4d0 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69  ckForRuntimeOpti
1c4e0 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  on $::test_chann 1c4f0 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 el native.... 1c500 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1c510 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 1c520 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 1c530 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 should count the 1c540 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 number of conne 1c550 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 ctions.. 1c560 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 # "opened" 1c570 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 and "closed" fr 1c580 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e om the pool when 1c590 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 determining if 1c5a0 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 a test.. 1c5b0 23 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 # passed. 1c5c0 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 Disabling this 1c5d0 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 behavior is some 1c5e0 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 times necessary 1c5f0 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 (e.g... # 1c600 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 during th 1c610 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e e release testin 1c620 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 g process) becau 1c630 73 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76 se there are sev 1c640 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 eral.. # 1c650 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 tests that 1c660 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 rely on the "op 1c670 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 ened from pool" 1c680 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 count being grea 1c690 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ter.. # 1c6a0 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 than zero. 1c6b0 20 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 These tests may 1c6c0 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 fail due to the 1c6d0 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 non-determinist 1c6e0 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ic.. # 1c6f0 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 behavior of 1c700 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e the CLR GC, even 1c710 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e when there is n 1c720 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 o bug in the cod 1c730 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 1c740 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e being tested. 1c750 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c760 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e checkForRun 1c770 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 timeOption$::te
1c780 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f  st_channel noPoo
1c790 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20  lCounts....
1c7a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1c7b0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
1c7c0 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68  he test suite sh
1c7d0 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65 64 2d  ould use shared-
1c7e0 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20  cache mode...
1c7f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c800 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f  checkForRuntimeO
1c810 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68  ption $::test_ch 1c820 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61 63 68 annel sharedCach 1c830 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 1c840 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1c850 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 Report the resou 1c860 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 rce usage prior 1c870 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 to running any t 1c880 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ests... # 1c890 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 .. report 1c8a0 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 SQLiteResources 1c8b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
1c8c0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1c8d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72        # NOTE: Gr
1c8e0 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e  ab the list of n
1c8f0 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f  ative modules fo
1c900 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
1c910 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20  ocess and..
1c920 20 20 20 23 20 20 20 20 20 20 20 72 65 70 6f 72     #       repor
1c930 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e  t on the System.
1c940 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61  Data.SQLite rela
1c950 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20  ted ones...
1c960 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
1c970 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 63  t modules [objec
1c980 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20  t invoke \..
1c990 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
1c9a0 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65  iagnostics.Proce
1c9b0 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f  ss.GetCurrentPro
1c9c0 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d  cess Modules]...
1c9d0 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
1c9e0 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 6d  foreach -alias m
1c9f0 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20 7b  odule $modules { 1ca00 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1ca10 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1ca20 20 54 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 The module file 1ca30 20 6e 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 name here must 1ca40 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a be normalized... 1ca50 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1ca60 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 1ca70 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c ame [file normal 1ca80 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c ize [$module Fil
1ca90 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eName]]....
1caa0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
1cab0 20 6d 61 74 63 68 20 2d 6e 6f 63 61 73 65 20 2a   match -nocase *
1cac0 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 66 69  /sqlite3.dll $fi 1cad0 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 1cae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1caf0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1cb00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1cb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1cb20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
1cb30 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69  aded SQLite nati
1cb40 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c  ve library modul
1cb50 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  e: " \..
1cb60 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d          $fileNam 1cb70 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 e \n].. 1cb80 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 } elseif {[stri 1cb90 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 ng match \.. 1cba0 20 20 20 20 20 20 20 20 20 20 2d 6e 6f 63 61 73 -nocas 1cbb0 65 20 2a 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 e */SQLite.Inter 1cbc0 6f 70 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 op.dll$fileName
1cbd0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1cbe0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1cbf0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1cc00 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1cc10 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1cc20 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 - found loaded S 1cc30 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 1cc40 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 sembly module: " 1cc50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cc60 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e$fileName \n
1cc70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1cc80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1cc90 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
1cca0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1ccb0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 1ccc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 1ccd0 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d ---- compile-tim 1cce0 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 e options for SQ 1ccf0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 1cd00 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 1cd10 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1cd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 1cd30 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1cd40 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 1cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1cd60 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1cd70 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 ite.SQLite3 SQLi 1cd80 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 teCompileOptions 1cd90 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f .. } co 1cda0 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d mpileOptions] == 1cdb0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1cdc0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1cdd0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1cde0 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61  ppendArgs [forma
1cdf0 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a  tList [lsort \..
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce10 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d  $compileOptions] 1ce20 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 <none>] \n].. 1ce30 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1ce40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1ce50 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1ce60 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20  nel unknown\n..
1ce70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1ce80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1ce90 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
1cea0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1ceb0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 1cec0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1ced0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 compile-time op 1cee0 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 tions for SQLite 1cef0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 1cf00 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 1cf10 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1cf20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 1cf30 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1cf40 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 1cf50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1cf60 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1cf70 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 ite.SQLite3 Inte 1cf80 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e ropCompileOption 1cf90 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 s.. } c 1cfa0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d ompileOptions] = 1cfb0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1cfc0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1cfd0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1cfe0 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d  appendArgs [form
1cff0 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d  atList [lsort \.
1d000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d010 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73   $compileOptions 1d020 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 ] <none>] \n].. 1d030 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1d040 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1d050 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1d060 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
1d070 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1d080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1d090 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1d0a0 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63  OTE: Show the ac
1d0b0 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72  tive test constr
1d0c0 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  aints...
1d0d0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
1d0e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1d0f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d [appendArgs "-- 1d100 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 -- constraints: 1d110 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1d120 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 1d130 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 ort [getConstrai 1d140 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e nts]] <none>] \n 1d150 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 1d160 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1d170 53 61 76 65 20 74 68 65 20 74 65 73 74 20 63 6f Save the test co 1d180 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75 73 nstraints for us 1d190 65 20 62 79 20 74 68 72 65 61 64 73 20 63 72 65 e by threads cre 1d1a0 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 ated in this.. 1d1b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 1d1c0 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e plication domain 1d1d0 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 . This is neces 1d1e0 73 61 72 79 20 62 65 63 61 75 73 65 20 61 6c 6c sary because all 1d1f0 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 the Eagle.. 1d200 20 20 20 20 23 20 20 20 20 20 20 20 22 74 65 73 # "tes 1d210 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 t context" infor 1d220 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 mation is per-th 1d230 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 read... # 1d240 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1d250 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1d260 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d st_constraints]} 1d270 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1d280 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f set ::test_co 1d290 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 nstraints$::eag
1d2a0 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 61  le_tests(constra
1d2b0 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 7d  ints)..        }
1d2c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1d2d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c         # NOTE: L
1d2e0 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 2d 63  oad the "after-c
1d2f0 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74  onstraints" cust
1d300 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f  om per-user and/
1d310 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20  or per-host..
1d320 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
1d330 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d  t settings now..
1d340 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1d350 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c      uplevel 1 [l
1d360 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65  ist loadSQLiteTe
1d370 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65  stSettings $::te 1d380 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 st_channel .afte 1d390 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d r].... #. 1d3a0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1d3b0 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20 65 If necessary, e 1d3c0 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63 nable shared-cac 1d3d0 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 he mode now... 1d3e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1d3f0 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 if {[hasRuntime 1d400 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63 Option sharedCac 1d410 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 he]} then {.. 1d420 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61 enableSha 1d430 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74 redCache$::test
1d440 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20  _channel true..
1d450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1d460 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1d470 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e   NOTE: Show when
1d480 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61   our tests actua
1d490 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e  lly began (now).
1d4a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1d4b0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1d4c0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1d4d0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1d4e0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 "---- Syst 1d4f0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 em.Data.SQLite t 1d500 65 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 20 ests began at " 1d510 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1d520 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c clock format [cl 1d530 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e ock seconds]] \n 1d540 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 1d550 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 1d560 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 unSQLiteTestFile 1d570 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a sPrologue {} {.. 1d580 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 1d590 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1d5a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 # NOTE: Se 1d5b0 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 tup the variable 1d5c0 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 s that refer to 1d5d0 74 68 65 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d the various non- 1d5e0 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 data files.. 1d5f0 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 # requ 1d600 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 ired by the test 1d610 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d s in this file.. 1d620 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1d630 20 20 20 20 73 65 74 20 65 6e 74 69 74 79 46 72 set entityFr 1d640 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 20 5c ameworkDllFile \ 1d650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 1d660 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 1d670 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e EntityFramework. 1d680 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 dll].... 1d690 73 65 74 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 set installerExe 1d6a0 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 File [getBuildFi 1d6b0 6c 65 4e 61 6d 65 20 49 6e 73 74 61 6c 6c 65 72 leName Installer 1d6c0 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 .exe].. s 1d6d0 65 74 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 et sqliteDesigne 1d6e0 72 44 6c 6c 46 69 6c 65 20 5b 67 65 74 42 75 69 rDllFile [getBui 1d6f0 6c 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 ldFileName SQLit 1d700 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 5d 0d e.Designer.dll]. 1d710 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 ... set s 1d720 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 ystemDataSQLiteD 1d730 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 1d740 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 [getBuildF 1d750 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 ileName System.D 1d760 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d ata.SQLite.dll]. 1d770 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 ... set s 1d780 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c ystemDataSQLiteL 1d790 69 6e 71 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 inqDllFile \.. 1d7a0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu 1d7b0 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 ildFileName Syst 1d7c0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L 1d7d0 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 inq.dll].... 1d7e0 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 set systemDa 1d7f0 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 taSQLiteEf6DllFi 1d800 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 1d810 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e [getBuildFileN 1d820 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 1d830 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d SQLite.EF6.dll]. 1d840 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 ... set t 1d850 65 73 74 45 78 65 46 69 6c 65 20 5b 67 65 74 42 estExeFile [getB 1d860 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 uildFileName tes 1d870 74 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 20 t.exe].. 1d880 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78 65 46 set testLinqExeF 1d890 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ile [getBuildFil 1d8a0 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 eName testlinq.e 1d8b0 78 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 xe].. set 1d8c0 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 testEf6ExeFile 1d8d0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 1d8e0 65 20 74 65 73 74 65 66 36 2e 65 78 65 5d 0d 0a e testef6.exe].. 1d8f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1d900 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 # NOTE: Set 1d910 75 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 up the variables 1d920 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 that refer to t 1d930 68 65 20 76 61 72 69 6f 75 73 20 64 61 74 61 20 he various data 1d940 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 23 files.. # 1d950 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20 required 1d960 62 79 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 by the tests in 1d970 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 20 20 this file... 1d980 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 1d990 65 74 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 et testLinqOutFi 1d9a0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 1d9b0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 1d9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 1d9d0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 1d9e0 50 61 74 68 5d 20 74 65 73 74 6c 69 6e 71 2e 6f Path] testlinq.o 1d9f0 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ut]].... 1da00 73 65 74 20 6e 6f 72 74 68 77 69 6e 64 45 66 44 set northwindEfD 1da10 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 bFile [file nati 1da20 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 1da30 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 1da40 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [ 1da50 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 67 65 file dirname [ge 1da60 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 1da70 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 ath]]] \.. 1da80 20 20 20 20 20 20 74 65 73 74 6c 69 6e 71 20 6e testlinq n 1da90 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d orthwindEF.db]]. 1daa0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e ... set n 1dab0 6f 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c onWalDbFile [fil 1dac0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 1dad0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 1dae0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 1daf0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 6e eTestDataPath] n 1db00 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 onWal.db]].... 1db10 20 20 20 20 20 20 73 65 74 20 77 61 6c 44 62 46 set walDbF 1db20 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 1db30 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 1db40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1db50 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 1db60 61 50 61 74 68 5d 20 77 61 6c 2e 64 62 5d 5d 0d aPath] wal.db]]. 1db70 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1db80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 1db90 65 20 76 61 72 69 6f 75 73 20 69 6e 73 74 61 6c e various instal 1dba0 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 6c 6f 67 20 l/uninstall log 1dbb0 66 69 6c 65 73 20 75 73 65 64 20 74 6f 20 74 65 files used to te 1dbc0 73 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 st the.. 1dbd0 23 20 20 20 20 20 20 20 64 65 73 69 67 6e 2d 74 # design-t 1dbe0 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e ime component in 1dbf0 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 staller... 1dc00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 1dc10 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 1dc20 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 05LogFile [file 1dc30 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 1dc40 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 1dc50 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 1dc60 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 estDataPath] Ins 1dc70 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 1dc80 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 05.log]].... 1dc90 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 set testInst 1dca0 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 1dcb0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 1dcc0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 1dce0 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 1dcf0 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 th] Installer_Te 1dd00 73 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d st_Vs2008.log]]. 1dd10 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 ... set t 1dd20 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 estInstallVs2010 1dd30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 LogFile [file na 1dd40 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 1dd50 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 1dd60 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 1dd70 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 tDataPath] Insta 1dd80 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30 ller_Test_Vs2010 1dd90 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .log]].... 1dda0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c set testInstal 1ddb0 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b lVs2012LogFile [ 1ddc0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 1ddd0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 1dde0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 1ddf0 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 1de00 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 ] Installer_Test 1de10 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d _Vs2012.log]]... 1de20 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 . set tes 1de30 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f tInstallVs2013Lo 1de40 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 1de50 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 1de60 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 1de70 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 1de80 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c ataPath] Install 1de90 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 2e 6c er_Test_Vs2013.l 1dea0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 1deb0 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c set testUninstal 1dec0 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b lVs2005LogFile [ 1ded0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 1dee0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 1def0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 1df00 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 1df10 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 ] Uninstaller_Te 1df20 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d st_Vs2005.log]]. 1df30 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 ... set t 1df40 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 1df50 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 08LogFile [file 1df60 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 1df70 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 1df80 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 1df90 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 estDataPath] Uni 1dfa0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 1dfb0 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2008.log]].... 1dfc0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e set testUn 1dfd0 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 installVs2010Log 1dfe0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 1dff0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 1e000 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e010 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 1e020 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c taPath] Uninstal 1e030 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e ler_Test_Vs2010. 1e040 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 1e050 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 set testUninsta 1e060 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 llVs2012LogFile 1e070 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 1e080 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 1e090 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 1e0a0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 1e0b0 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 h] Uninstaller_T 1e0c0 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d est_Vs2012.log]] 1e0d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 1e0e0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 1e0f0 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 013LogFile [file 1e100 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 1e110 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 1e120 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 1e130 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e TestDataPath] Un 1e140 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 installer_Test_V 1e150 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2013.log]].... 1e160 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 ######### 1e170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e1a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a ##############.. 1e1b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1e1c0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 1e1d0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 1e1e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e1f0 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e 74 69 [file tail$enti
1e200 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69  tyFrameworkDllFi
1e210 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
1e220 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
1e230 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 1e240 6e 65 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65 nel$entityFrame
1e250 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  workDllFile..
1e260 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1e270 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
1e280 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1e290 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
1e2a0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
1e2b0 69 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 65  il $installerExe 1e2c0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 1e2d0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 1e2e0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
1e2f0 61 6e 6e 65 6c 20 24 69 6e 73 74 61 6c 6c 65 72  annel $installer 1e300 45 78 65 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65 ExeFile Installe 1e310 72 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d r.exe.. } 1e320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1e330 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 1e340 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 1e350 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 1e360 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 71 [file tail$sq
1e370 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46  liteDesignerDllF
1e380 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
1e390 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
1e3a0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 1e3b0 6e 6e 65 6c 20 24 73 71 6c 69 74 65 44 65 73 69 nnel$sqliteDesi
1e3c0 67 6e 65 72 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  gnerDllFile..
1e3d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1e3e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
1e3f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1e400 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
1e410 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
1e420 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51  il $systemDataSQ 1e430 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 LiteDllFile]]]} 1e440 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1e450 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
1e460 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79  test_channel $sy 1e470 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c stemDataSQLiteDl 1e480 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d lFile.. } 1e490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1e4a0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 1e4b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 1e4c0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 1e4d0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 [file tail$sy
1e4e0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69  stemDataSQLiteLi
1e4f0 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68  nqDllFile]]]} th
1e500 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1e510 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 1e520 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 st_channel$syst
1e530 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71  emDataSQLiteLinq
1e540 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  DllFile..
1e550 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1e560 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
1e570 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1e580 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
1e590 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $1e5a0 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 1e5b0 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 Ef6DllFile]]]} t 1e5c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e5d0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
1e5e0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73  est_channel $sys 1e5f0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 temDataSQLiteEf6 1e600 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 DllFile.. 1e610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1e620 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1e630 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1e640 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1e650 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1e660 74 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d 7d 20  testExeFile]]]}
1e670 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1e680 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $1e690 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
1e6a0 73 74 45 78 65 46 69 6c 65 20 74 65 73 74 2e 65  stExeFile test.e
1e6b0 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  xe..        }...
1e6c0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
1e6d0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
1e6e0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
1e6f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
1e700 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 4c  file tail $testL 1e710 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 inqExeFile]]]} t 1e720 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e730 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
1e740 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 1e750 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 74 65 73 tLinqExeFile tes 1e760 74 6c 69 6e 71 2e 65 78 65 0d 0a 20 20 20 20 20 tlinq.exe.. 1e770 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1e780 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 1e790 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1e7a0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 1e7b0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 1e7c0 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c 65$testEf6ExeFile
1e7d0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
1e7e0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
1e7f0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 1e800 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c l$testEf6ExeFil
1e810 65 20 74 65 73 74 65 66 36 2e 65 78 65 0d 0a 20  e testef6.exe..
1e820 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1e830 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
1e840 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
1e850 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
1e860 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
1e870 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 4f 75  tail $testLinqOu 1e880 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b tFile]]]} then { 1e890 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 1e8a0 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
1e8b0 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71  hannel $testLinq 1e8c0 4f 75 74 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 OutFile.. 1e8d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1e8e0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1e8f0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1e900 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1e910 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1e920 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c  northwindEfDbFil
1e930 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
1e940 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
1e950 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 1e960 65 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 el$northwindEfD
1e970 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d  bFile..        }
1e980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1e990 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
1e9a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1e9b0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
1e9c0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f    [file tail $no 1e9d0 6e 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 nWalDbFile]]]} t 1e9e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e9f0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
1ea00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 6e  est_channel $non 1ea10 57 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 WalDbFile.. 1ea20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1ea30 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 1ea40 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1ea50 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 1ea60 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 1ea70 20 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20$walDbFile]]]}
1ea80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ea90 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $1eaa0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 77 61 test_channel$wa
1eab0 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  lDbFile..
1eac0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1ead0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
1eae0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1eaf0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
1eb00 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $1eb10 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 1eb20 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 5LogFile]]]} the 1eb30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 1eb40 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
1eb50 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 1eb60 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 1eb70 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 1eb80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1eb90 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 1eba0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 1ebb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ebc0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
1ebd0 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  InstallVs2008Log
1ebe0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
1ebf0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
1ec00 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 1ec10 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
1ec20 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 0d  llVs2008LogFile.
1ec30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1ec40 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
1ec50 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
1ec60 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
1ec80 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 1ec90 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 1eca0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 1ecb0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 1ecc0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
1ecd0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 1ece0 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2010LogFile.. 1ecf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1ed00 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 1ed10 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 1ed20 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 1ed30 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 1ed40 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 il$testInstallV
1ed50 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2012LogFile]]]}
1ed60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ed70 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
1ed80 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
1ed90 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32  estInstallVs2012
1eda0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
1edb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1edc0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
1edd0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1ede0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
1edf0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $1ee00 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 1ee10 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 3LogFile]]]} the 1ee20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 1ee30 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
1ee40 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 1ee50 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 1ee60 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 1ee70 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1ee80 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 1ee90 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 1eea0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1eeb0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
1eec0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c  UninstallVs2005L
1eed0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  ogFile]]]} then
1eee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
1eef0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 1ef00 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
1ef10 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
1ef20 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
1ef30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
1ef40 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
1ef50 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
1ef60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1ef70 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 1ef80 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c UninstallVs2008L 1ef90 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 1efa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 1efb0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
1efc0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 1efd0 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 1efe0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 1eff0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1f000 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 1f010 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 1f020 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f030 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
1f040 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c  UninstallVs2010L
1f050 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  ogFile]]]} then
1f060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
1f070 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 1f080 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
1f090 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46  nstallVs2010LogF
1f0a0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
1f0b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
1f0c0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
1f0d0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
1f0e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f0f0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 1f100 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c UninstallVs2012L 1f110 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 1f120 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 1f130 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
1f140 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 1f150 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 1f160 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 1f170 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1f180 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 1f190 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 1f1a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f1b0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
1f1c0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c  UninstallVs2013L
1f1d0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  ogFile]]]} then
1f1e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
1f1f0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 1f200 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
1f210 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
1f220 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
1f230 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1f240 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53  ...    proc runS
1f250 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 45 70  QLiteTestFilesEp
1f260 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20  ilogue {} {..
1f270 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a     uplevel 1 {..
1f280 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1f290 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20  ocomplain \..
1f2a0 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69           testUni
1f2b0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
1f2c0 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c  ile testUninstal
1f2d0 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 5c  lVs2012LogFile \
1f2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ..            te
1f2f0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
1f300 30 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69  0LogFile testUni
1f310 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
1f320 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
1f330 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c     testUninstall
1f340 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 74 65  Vs2005LogFile te
1f350 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c  stInstallVs2013L
1f360 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  ogFile \..
1f370 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c        testInstal
1f380 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74  lVs2012LogFile t
1f390 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30  estInstallVs2010
1f3a0 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  LogFile \..
1f3b0 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 61         testInsta
1f3c0 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20  llVs2008LogFile
1f3d0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
1f3e0 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 20 20  5LogFile....
1f3f0 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d      unset -nocom
1f400 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20  plain \..
1f410 20 20 20 20 20 6e 6f 72 74 68 77 69 6e 64 45 66       northwindEf
1f420 44 62 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 4f  DbFile testLinqO
1f430 75 74 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  utFile \..
1f440 20 20 20 20 20 20 77 61 6c 44 62 46 69 6c 65 20        walDbFile
1f450 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a 0d 0a  nonWalDbFile....
1f460 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1f470 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20  ocomplain \..
1f480 20 20 20 20 20 20 20 20 20 74 65 73 74 45 66 36           testEf6
1f490 45 78 65 46 69 6c 65 20 74 65 73 74 4c 69 6e 71  ExeFile testLinq
1f4a0 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  ExeFile \..
1f4b0 20 20 20 20 20 20 20 74 65 73 74 45 78 65 46 69         testExeFi
1f4c0 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c  le systemDataSQL
1f4d0 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d  iteEf6DllFile \.
1f4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73  .            sys
1f4f0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e  temDataSQLiteLin
1f500 71 44 6c 6c 46 69 6c 65 20 73 79 73 74 65 6d 44  qDllFile systemD
1f510 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65  ataSQLiteDllFile
1f520 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f530 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c  sqliteDesignerDl
1f540 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c 65 72 45  lFile installerE
1f550 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  xeFile \..
1f560 20 20 20 20 20 20 65 6e 74 69 74 79 46 72 61 6d        entityFram
1f570 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20  eworkDllFile..
1f580 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
1f590 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c  .    proc runSQL
1f5a0 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20  iteTestEpilogue
1f5b0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
1f5c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
1f5d0 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75  p running our cu
1f5e0 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66  stom epilogue if
1f5f0 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61   the main one ha
1f600 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20  s been..      #
1f610 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a        skipped...
1f620 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1f630 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1f640 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65   ::no(epilogue.e
1f650 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  agle)]} then {..
1f660 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1f670 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
1f680 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61  when our tests a
1f690 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e  ctually ended (n
1f6a0 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ow)...        #.
1f6b0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1f6c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1f6d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1f6e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1f6f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1f700 74 65 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 te tests ended a 1f710 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 t " \.. 1f720 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 [clock format 1f730 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 1f740 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 1f750 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1f760 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 TE: Load the "ep 1f770 69 6c 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 ilogue" custom p 1f780 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 er-user and/or p 1f790 65 72 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 er-host test.. 1f7a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 1f7b0 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 ttings now... 1f7c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f7d0 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 1f7e0 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 loadSQLiteTestSe 1f7f0 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 ttings$::test_c
1f800 68 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65  hannel .epilogue
1f810 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
1f820 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58          # BUGFIX
1f830 3a 20 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e  : Before checkin
1f840 67 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f  g the final reso
1f850 75 72 63 65 73 20 69 6e 20 75 73 65 20 62 79 20  urces in use by
1f860 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20  SQLite, make..
1f870 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
1f880 73 75 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65  sure both of the
1f890 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20   PRAGMA related
1f8a0 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20  directory names
1f8b0 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20  are freed...
1f8c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
1f8d0 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72  heckForSQLiteDir
1f8e0 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74  ectories $::test 1f8f0 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d _channel true... 1f900 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1f910 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f # NOTE: Also 1f920 20 72 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f report the reso 1f930 75 72 63 65 20 75 73 61 67 65 20 61 66 74 65 72 urce usage after 1f940 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 running the tes 1f950 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 1f960 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 reportSQ 1f970 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a LiteResources$:
1f980 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
1f990 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1f9a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f      # NOTE: Repo
1f9b0 72 74 20 74 68 65 20 63 72 69 74 69 63 61 6c 20  rt the critical
1f9c0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66  handle counts af
1f9d0 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20  ter running the
1f9e0 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  tests...
1f9f0 23 0d 0a 20 20 20 20 20 20 20 20 67 65 74 53 51  #..        getSQ
1fa00 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73  LiteHandleCounts
1fa10 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1fa20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1fa30 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 1fa40 66 20 6e 65 63 65 73 73 61 72 79 2c 20 64 69 73 f necessary, dis 1fa50 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 able shared-cach 1fa60 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 e mode now... 1fa70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1fa80 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f if {[hasRuntimeO 1fa90 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 ption sharedCach 1faa0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 1fab0 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 enableShar 1fac0 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f edCache$::test_
1fad0 63 68 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a 20  channel false..
1fae0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1faf0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1fb00 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
1fb10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb40 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..
1fb50 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
1fb60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 20  ###############
1fb70 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23  END Eagle ONLY #
1fb80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb90 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############..
1fba0 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
1fbb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fbc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fbd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fbe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1fbf0 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
1fc00 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 6e  NOTE: Save the n
1fc10 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65 63  ame of the direc
1fc20 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tory containing
1fc30 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d  this file...  #.
1fc40 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
1fc50 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65  ists common_dire
1fc60 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
1fc70 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64      set common_d
1fc80 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
1fc90 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72  irname [info scr
1fca0 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ipt]]..  }....
1fcb0 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f  #..  # NOTE: Pro
1fcc0 76 69 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e  vide the System.
1fcd0 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
1fce0 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20   package to the
1fcf0 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
1fd00 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f  #..  package pro
1fd10 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61  vide System.Data
1fd20 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30  .SQLite.Test 1.0
1fd30 0d 0a 7d 0d 0a                                   ..}..