System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 66fd71b7ba640e0137abe4c31e1d353d44ce78a6:

• File Tests/common.eagle — part of check-in [26ca8062a7] at 2014-01-04 01:23:30 on branch trunk — Test suite infrastructure changes to produce cleaner output when globally testing connection flags. (user: mistachkin size: 102330)

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 2e 0d 0a 20 20 20  test years...
1170: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1180: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30  return [list 200
1190: 35 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32  5 2008 2010 2012
11a0: 20 32 30 31 33 5d 0d 0a 20 20 20 20 20 20 7d 0d   2013]..      }.
11b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
11c0: 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c 61 74  roc getBuildPlat
11d0: 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 7d 20  form { native }
11e0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  {..      if {[in
11f0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
1200: 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 5c 0d  _platform] && \.
1210: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
1220: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1230: 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d t_platform] > 0} 1240: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1250: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1260: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1270: 69 66 69 65 64 20 74 65 73 74 20 70 6c 61 74 66 ified test platf 1280: 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20 76 61 orm. If this va 1290: 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 riable is not se 12a0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 t,.. # 12b0: 20 20 20 20 74 68 65 20 64 65 66 61 75 6c 74 20 the default 12c0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 value will be ba 12d0: 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63 68 69 sed on the machi 12e0: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 2e ne architecture. 12f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1300: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1310: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24 3a 3a r {$native ? $:: 1320: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 test_platform : 1330: 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ""}].. } el 1340: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 1350: 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e ts ::test_machin 1360: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 e] && \.. 1370: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 1380: 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e h$::test_machin
1390: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
13a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13b0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
13c0: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65  ative builds, re
13d0: 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  turn the platfor
13e0: 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e  m name correspon
13f0: 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20  ding to..
1400: 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73   #       the tes
1410: 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74  t machine archit
1420: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73  ecture; otherwis
1430: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
1440: 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ty..        #
1450: 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...
1460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1470: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a  return [expr {..
1480: 20 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76            $nativ 1490: 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c e ? [machineToPl 14a0: 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74 5f 6d atform$::test_m
14b0: 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a 20 20  achine] : ""..
14c0: 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20        }]..
14d0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
14e0: 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61  exists ::tcl_pla
14f0: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d  tform(machine)]}
1500: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1510: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1520: 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62  TE: For native b
1530: 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68  uilds, return th
1540: 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  e platform name
1550: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1560: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1570: 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72    the machine ar
1580: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65  chitecture; othe
1590: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e  rwise, return an
15a0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a   empty string...
15b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15c0: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
15d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61  {..          $na 15e0: 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 tive ? [machineT 15f0: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c oPlatform$::tcl
1600: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e  _platform(machin
1610: 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20  e)] : ""..
1620: 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c    }]..      } el
1630: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
1640: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1650: 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 72 63 68   No machine arch
1660: 69 74 65 63 74 75 72 65 20 69 73 20 61 76 61 69  itecture is avai
1670: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e  lable, return an
1680: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a   empty string...
1690: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16a0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
16b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
16c0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
16d0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ldConfiguration
16e0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
16f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65       # NOTE: See
1700: 20 69 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75   if the "configu
1710: 72 61 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20  ration" setting
1720: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1730: 64 65 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20  den by the..
1740: 20 20 23 20 20 20 20 20 20 20 75 73 65 72 20 28    #       user (
1750: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1760: 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73  and line).  This
1770: 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65   helps control e
1780: 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20  xactly..      #
1790: 20 20 20 20 20 20 77 68 69 63 68 20 73 65 74 20        which set
17a0: 6f 66 20 62 69 6e 61 72 69 65 73 20 77 65 20 61  of binaries we a
17b0: 72 65 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e  re testing (i.e.
17c0: 20 74 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20   those built in
17d0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
17e0: 20 20 20 22 44 65 62 75 67 22 20 6f 72 20 22 52     "Debug" or "R
17f0: 65 6c 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f  elease" build co
1800: 6e 66 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20  nfigurations).
1810: 54 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  To override this
1820: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1830: 76 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f  value via the co
1840: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65  mmand line, ente
1850: 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69  r a command simi
1860: 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20  lar to one of..
1870: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1880: 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20   following (all
1890: 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20  on one line):..
18a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18b0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
18c0: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
18d0: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
18e0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75  nfiguration Debu
18f0: 67 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  g"..      #
1900: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
1910: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
1920: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1930: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
1940: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
1950: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
1960: 6e 66 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65  nfiguration Rele
1970: 61 73 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ase"..      #
1980: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
1990: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
19a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
19b0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
19c0: 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70  ll.exe -file .\p
19d0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
19e0: 20 2d 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20   -preTest..
19f0: 20 23 20 20 20 20 20 20 20 20 20 22 75 6e 73 65   #         "unse
1a00: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
1a10: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
1a20: 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  "..      #..
1a30: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1a40: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
1a50: 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20  uration] && \..
1a60: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1a70: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 1a80: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e configuration] > 1a90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1aa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1ab0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 1ac0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f pecified test co 1ad0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 nfiguration. Th 1ae0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 1af0: 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 used.. # 1b00: 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 for this v 1b10: 61 72 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 ariable is typic 1b20: 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 ally "Release", 1b30: 61 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65 as set by the te 1b40: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 1b50: 20 20 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 suite itself 1b60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
1b80: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
1b90: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  on..      } else
1ba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1bb0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
1bc0: 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c  ormally, we will
1bd0: 20 6e 65 76 65 72 20 68 69 74 20 74 68 69 73 20   never hit this
1be0: 63 61 73 65 20 62 65 63 61 75 73 65 20 74 68 65  case because the
1bf0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20   value of the..
1c00: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
1c10: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
1c20: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c  n variable is al
1c30: 77 61 79 73 20 73 65 74 20 62 79 20 74 68 65 20  ways set by the
1c40: 74 65 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20  test suite..
1c50: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65      #       itse
1c60: 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20  lf; however, it
1c70: 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65  can be overridde
1c80: 6e 20 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65  n using the unse
1c90: 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20  t command..
1ca0: 20 20 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20     #       from
1cb0: 74 68 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74  the -preTest opt
1cc0: 69 6f 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20  ion to the test
1cd0: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
1ce0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1cf0: 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66  n $::eagle_platf 1d00: 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f orm(configuratio 1d10: 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n).. }.. 1d20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1d30: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 1d40: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 ations {} {.. 1d50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1d60: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c TE: See if the l 1d70: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 1d80: 69 67 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 igurations has b 1d90: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 een overridden b 1da0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 1db0: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 the user (e.g. 1dc0: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c on the command l 1dd0: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ine)... #.. 1de0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 1df0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f exists ::test_co 1e00: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 nfigurations] && 1e10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c \.. [l 1e20: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 length$::test_c
1e30: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e  onfigurations] >
1e40: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1e50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1e60: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
1e70: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66  pecified list of
1e80: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74   test configurat
1e90: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ions...        #
1ea0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1eb0: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu 1ec0: 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d rations.. } 1ed0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1ee0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1ef0: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 TE: Use the defa 1f00: 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 ult list of test 1f10: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e configurations. 1f20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1f30: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 1f40: 74 20 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d t Debug Release] 1f50: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1f60: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 1f70: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 tBuildBaseDirect 1f80: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 1f90: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1fa0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the 1fb0: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 base directory w 1fc0: 68 65 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 here all the bui 1fd0: 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 lds should be.. 1fe0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 # loc 1ff0: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 2000: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 be the director 2010: 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 y that contains 2020: 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 the actual.. 2030: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 2040: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory 2050: 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 (e.g. parent of 2060: 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 "bin")... 2070: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 2080: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c fo exists ::buil 2090: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 d_base_directory 20a0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 20b0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 20c0: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64$::build_base_d
20d0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74  irectory] > 0} t
20e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
20f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2100: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  : The location o
2110: 66 20 74 68 65 20 62 75 69 6c 64 20 62 61 73 65  f the build base
2120: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
2130: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
2140: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2150: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
2160: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
2170: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2180: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64   return $::build 2190: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d _base_directory. 21a0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 21b0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 21c0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 21d0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 21e0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 21f0: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63$::common_direc
2200: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
2210: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65        # NOTE: Ne
2230: 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20  xt, fallback to
2240: 74 68 65 20 70 61 72 65 6e 74 20 64 69 72 65 63  the parent direc
2250: 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e 65 20  tory of the one
2260: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..
2270: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73      #       this
2280: 20 66 69 6c 65 20 28 69 2e 65 2e 20 22 63 6f 6d   file (i.e. "com
2290: 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 69 66 20  mon.eagle"), if
22a0: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20  available...
22b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
22c0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e  eturn [file dirn
22d0: 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ame $::common_di 22e0: 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 20 20 20 rectory].. 22f0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 2300: 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d 20 26 exists ::path] & 2310: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 2320: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2330: 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68 65 6e  :path] > 0} then
2340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
2350: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
2360: 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63 6b  inally, fallback
2370: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64   to the parent d
2380: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20  irectory of the
2390: 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20 20 20  EagleTest..
23a0: 20 20 20 23 20 20 20 20 20 20 20 70 61 74 68 2e     #       path.
23b0: 20 20 54 68 65 20 45 61 67 6c 65 54 65 73 74 20    The EagleTest
23c0: 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e 74 65  package guarante
23d0: 65 73 20 74 68 61 74 20 74 68 69 73 20 76 61 72  es that this var
23e0: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23  iable..        #
23f0: 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 73         will be s
2400: 65 74 20 74 6f 20 74 68 65 20 64 69 72 65 63 74  et to the direct
2410: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ory containing t
2420: 68 65 20 66 69 72 73 74 20 66 69 6c 65 20 74 6f  he first file to
2430: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2440: 20 20 65 78 65 63 75 74 65 20 74 68 65 20 5b 72    execute the [r
2450: 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20  unTestPrologue]
2460: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70  script library p
2470: 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20  rocedure...
2480: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
2490: 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61  turn [file dirna
24a0: 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 20 20  me $::path].. 24b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 24c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24d0: 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 68 20 # NOTE: No path 24e0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 is available, re 24f0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 turn an empty st 2500: 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f 69 6e ring. This poin 2510: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 2520: 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 should not be 2530: 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 20 20 reached... 2540: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 2550: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d turn "".. } 2560: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 2570: 70 72 6f 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 proc isMixedMode 2580: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e Assembly { fileN 2590: 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d ame {varName ""} 25a0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 25b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 # NOTE: Fir 25c0: 73 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 st, make sure th 25d0: 65 20 74 65 73 74 20 73 75 69 74 65 20 69 6e 66 e test suite inf 25e0: 72 61 73 74 72 75 63 74 75 72 65 20 69 73 20 61 rastructure is a 25f0: 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 llowed to.. 2600: 20 23 20 20 20 20 20 20 20 75 73 65 20 74 68 65 # use the 2610: 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e [exec] command. 2620: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2630: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 2640: 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 ts ::no(exec)] & 2650: 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 & ![info exists 2660: 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d ::no(corFlags)]} 2670: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2680: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2690: 54 45 3a 20 49 66 20 74 68 65 20 6c 6f 63 61 74 TE: If the locat 26a0: 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 ion of CorFlags 26b0: 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 is present in th 26c0: 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a e environment,.. 26d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26e0: 75 73 65 20 69 74 3b 20 6f 74 68 65 72 77 69 73 use it; otherwis 26f0: 65 20 61 73 73 75 6d 65 20 69 74 20 69 73 20 69 e assume it is i 2700: 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 n the PATH... 2710: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2720: 73 65 74 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 set corFlags [ex 2730: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 pr {.. 2740: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 [info exists ::e 2750: 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 nv(CorFlags)] ? 2760: 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29$::env(CorFlags)
2770: 20 3a 20 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20   : "CorFlags"..
2780: 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20         }]....
2790: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27a0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
27b0: 74 6f 20 65 78 65 63 75 74 65 20 43 6f 72 46 6c  to execute CorFl
27c0: 61 67 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69  ags on the speci
27d0: 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20  fied file...
27e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
27f0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
2800: 20 20 20 20 20 20 20 65 78 65 63 20 2d 2d 20 24         exec -- $2810: 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e corFlags [file n 2820: 61 74 69 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e ativename$fileN
2830: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20  ame]..        }
2840: 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  exec] == 0} then
2850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
2860: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
2870: 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20  E: If requested
2880: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61  by our caller, a
2890: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
28a0: 69 6e 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ine the..
28b0: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66     #       platf
28c0: 6f 72 6d 20 66 6f 72 20 74 68 65 20 73 70 65 63  orm for the spec
28d0: 69 66 69 65 64 20 66 69 6c 65 20 61 73 20 77 65  ified file as we
28e0: 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ll...          #
28f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
2900: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $2910: 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 varName] > 0} th 2920: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2930: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 2940: 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 # NOTE: Store t 2950: 68 65 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 he platform in t 2960: 68 65 20 6e 61 6d 65 64 20 76 61 72 69 61 62 6c he named variabl 2970: 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 e in the.. 2980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 2990: 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c ntext of our cal 29a0: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ler... 29b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 29c0: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
29d0: 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20  e platform....
29e0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
29f0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2a00: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72   Attempt to extr
2a10: 61 63 74 20 74 68 65 20 50 45 20 6c 69 6e 65 20  act the PE line
2a20: 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65  from the capture
2a30: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  d..            #
2a40: 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20         output.
2a50: 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  If this value is
2a60: 20 22 50 45 33 32 22 20 6f 72 20 22 50 45 33 32   "PE32" or "PE32
2a70: 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20  +", the..
2a80: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
2a90: 65 6d 62 6c 79 20 66 69 6c 65 20 69 73 20 33 32  embly file is 32
2aa0: 2d 62 69 74 20 6f 72 20 36 34 2d 62 69 74 2c 20  -bit or 64-bit,
2ab0: 72 65 73 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20  respectively;..
2ac0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
2ad0: 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74     otherwise, it
2ae0: 73 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77  s type is unknow
2af0: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...
2b00: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  #..            s
2b10: 65 74 20 70 61 74 74 65 72 6e 20 7b 5e 50 45 20  et pattern {^PE
2b20: 20 20 20 20 20 20 20 3a 20 28 50 45 33 32 7c 50         : (PE32|P
2b30: 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20  E32\+)\s+$}.... 2b40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 2b50: 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 regexp -line -- 2b60: 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64$pattern $exec d 2b70: 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74 68 65 6e ummy pe32]} then 2b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2b90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 2ba0: 20 20 20 23 20 48 41 43 4b 3a 20 54 68 69 73 20 # HACK: This 2bb0: 5b 73 77 69 74 63 68 5d 20 61 73 73 75 6d 65 73 [switch] assumes 2bc0: 20 74 68 61 74 20 33 32 2d 62 69 74 20 65 78 65 that 32-bit exe 2bd0: 63 75 74 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 cutables are.. 2be0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 2bf0: 20 20 20 20 61 6c 77 61 79 73 20 78 38 36 20 61 always x86 a 2c00: 6e 64 20 74 68 61 74 20 36 34 2d 62 69 74 20 65 nd that 64-bit e 2c10: 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 61 xecutables are a 2c20: 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 lways.. 2c30: 20 20 20 20 20 23 20 20 20 20 20 20 20 78 36 34 # x64 2c40: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2c50: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 2c60: 20 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 switch -exact 2c70: 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 --$pe32 {..
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32              PE32
2c90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2ca0: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
2cb0: 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20 20 20 20  rm Win32..
2cc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33               PE3
2ce0: 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  2+ {..
2cf0: 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74          set plat
2d00: 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20 20 20 20  form x64..
2d10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
2d30: 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20  ault {..
2d40: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c            set pl
2d50: 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20  atform ""..
2d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
2d80: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2d90: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
2da0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
2db0: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..
2dc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
2dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2de0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2df0: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72   Attempt to extr
2e00: 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c  act the ILONLY l
2e10: 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70  ine from the cap
2e20: 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20  tured..
2e30: 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e   #       output.
2e40: 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20    If this value
2e50: 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 70 65  is zero, the spe
2e60: 63 69 66 69 65 64 20 66 69 6c 65 20 6d 75 73 74  cified file must
2e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
2e80: 20 20 20 20 62 65 20 61 20 6d 69 78 65 64 2d 6d      be a mixed-m
2e90: 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74  ode assembly; ot
2ea0: 68 65 72 77 69 73 65 2c 20 69 74 20 63 6f 6e 74  herwise, it cont
2eb0: 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20  ains only..
2ec0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e       #       man
2ed0: 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e  aged components.
2ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2ef0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74           set pat
2f00: 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20  tern {^ILONLY
2f10: 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d   : (0|1)\s+$}... 2f20: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 2f30: 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d [regexp -line -- 2f40: 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20$pattern $exec 2f50: 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 dummy ilOnly]} t 2f60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2f70: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 2f80: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 2f90: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
2fa0: 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a  ilOnly} then {..
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fc0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
2fd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2fe0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
2ff0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
3000: 45 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 73  E: If the test s
3010: 75 69 74 65 20 63 61 6e 6e 6f 74 20 75 73 65 20  uite cannot use
3020: 5b 65 78 65 63 5d 20 6f 72 20 65 78 65 63 75 74  [exec] or execut
3030: 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d  ion of CorFlags.
3040: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
3050: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 66 61  ailed, return fa
3060: 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  lse...      #..
3070: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
3080: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
3090: 20 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76 61   proc isBuildAva
30a0: 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65 20  ilable { native
30b0: 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61  directory {varNa
30c0: 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  me ""} } {..
30d0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
30e0: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c  E: Build the ful
30f0: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c  ly qualified fil
3100: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70  e name for the p
3110: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d  rimary assembly.
3120: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
3130: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79  ontaining the Sy
3140: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
3150: 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65   managed compone
3160: 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20 20  nts.  It..
3170: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
3180: 65 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68 69  e noted that thi
3190: 73 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20  s assembly file
31a0: 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  may also contain
31b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
31c0: 20 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f      native compo
31d0: 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74 69  nents, if a nati
31e0: 76 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20 75  ve build is in u
31f0: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
3200: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
3210: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
3220: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  e [file join $di 3230: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 rectory \.. 3240: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 3250: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d .SQLite.dll]]... 3260: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil 3270: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
3280: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
3290: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32a0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
32b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
32c0: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
32d0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
32e0: 74 65 63 74 20 69 66 20 74 68 65 20 70 72 69 6d  tect if the prim
32f0: 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ary assembly..
3300: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74      #       cont
3310: 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 20  ains any native
3320: 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 6e  components, if n
3330: 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20  ecessary...
3340: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
3350: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61  tring length $na 3360: 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e tive] == 0} then 3370: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 3380: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3390: 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  varName] > 0} th
33a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
33b0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 33c0: 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20$varName..
33d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
33e0: 73 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d 69  set native [isMi
33f0: 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20  xedModeAssembly
3400: 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e 61  $fileName$varNa
3410: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
3420: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
3430: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 72   NOTE: If the pr
3440: 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 61  imary assembly a
3450: 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  lso contains the
3460: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e   native componen
3470: 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ts,..      #
3480: 20 20 20 77 65 20 68 61 76 65 20 65 76 65 72 79     we have every
3490: 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a  thing we need...
34a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
34b0: 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e  f {$native} then 34c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 34d0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } 34e0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 34f0: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 3500: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali 3510: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 fied file name f 3520: 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 or the interop a 3530: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 ssembly.. # 3540: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e containin 3550: 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 g the System.Dat 3560: 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 a.SQLite native 3570: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 components. If 3580: 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 this.. # 3590: 20 20 20 20 66 69 6c 65 20 65 78 69 73 74 73 2c file exists, 35a0: 20 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 we should have 35b0: 65 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 everything we ne 35c0: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 35d0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 35e0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 35f0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 e [file join$di
3600: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
3610: 20 20 20 20 20 53 51 4c 69 74 65 2e 49 6e 74 65       SQLite.Inte
3620: 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20  rop.dll]]....
3630: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
3640: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 3650: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3660: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 3670: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 3680: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 3690: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q 36a0: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 ualified file na 36b0: 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 me for the SQLit 36c0: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 e core.. # 36d0: 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 library. 36e0: 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 If this file exi 36f0: 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 sts, we should h 3700: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 ave everything w 3710: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 3720: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d need... #. 3730: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 3740: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 3750: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 3760: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
3770: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e          sqlite3.
3780: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  dll]]....      i
3790: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
37a0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 37b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 37c0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } 37d0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 37e0: 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f # NOTE: One o 37f0: 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63 6f r more native co 3800: 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64 20 mponents needed 3810: 62 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 by System.Data.S 3820: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 QLite.. # 3830: 20 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e 67 are missing 3840: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 3850: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 3860: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 3870: 6f 63 20 69 73 52 65 6c 65 61 73 65 41 76 61 69 oc isReleaseAvai 3880: 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f 72 lable { director 3890: 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d y {varName ""} } 38a0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 {.. if {[s 38b0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
38c0: 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  rName] > 0} then
38d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61   {..        upva
38e0: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61  r 1 $varName$va
38f0: 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  rName..      }..
3900: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
3910: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
3920: 20 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 24   "" $directory$
3930: 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d  varName]..    }.
3940: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69  ....    proc joi
3950: 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20  nBuildDirectory
3960: 7b 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 65  { native path ye
3970: 61 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66  ar platform conf
3980: 69 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20  iguration } {..
3990: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
39a0: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
39b0: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
39c0: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69   the fully quali
39d0: 66 69 65 64 20 70 61 74 68 20 74 6f 20 74 68 65  fied path to the
39e0: 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20   build..      #
39f0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
3a00: 62 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65  based on all the
3a10: 20 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 69   arguments provi
3a20: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
3a30: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  r...      #..
3a40: 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20     if {$native} 3a50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3a60: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 return [file joi 3a70: 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 n$path bin $yea 3a80: 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e r$platform $con 3a90: 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 3aa0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 3ab0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 3ac0: 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e e join$path bin
3ad0: 20 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75 72   $year$configur
3ae0: 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20  ation bin]..
3af0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
3b00: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
3b10: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
3b20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
3b30: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68   NOTE: See if th
3b40: 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69  e "native" runti
3b50: 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65  me option has be
3b60: 65 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20  en set.  If so,
3b70: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23  use the..      #
3b80: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
3b90: 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d   for the mixed-m
3ba0: 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e  ode assembly (a.
3bb0: 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20  k.a. the native
3bc0: 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23  interop..      #
3bd0: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29         assembly)
3be0: 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69  .  To enable thi
3bf0: 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65  s option via the
3c00: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65   command line, e
3c10: 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20  nter a..      #
3c20: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69        command si
3c30: 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20  milar to one of
3c40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61  the following (a
3c50: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
3c60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
3c70: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
3c80: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c  ell.exe -initial
3c90: 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69  ize -runtimeOpti
3ca0: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  on native..
3cb0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
3cc0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
3cd0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
3ce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 20       #       To
3cf0: 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69  enable this opti
3d00: 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  on via the comma
3d10: 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f  nd line prior to
3d20: 20 74 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a   the "beta 16"..
3d30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
3d40: 6c 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20  lease of Eagle,
3d50: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
3d60: 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73  mmand must be us
3d70: 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20  ed instead..
3d80: 20 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20    #       (also
3d90: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29  all on one line)
3da0: 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  :..      #..
3db0: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53    #       EagleS
3dc0: 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61  hell.exe -initia
3dd0: 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61  lize -postInitia
3de0: 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20  lize..      #
3df0: 20 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e        "object in
3e00: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
3e10: 2e 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75  .GetActive AddRu
3e20: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
3e30: 76 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ve"..      #
3e40: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
3e50: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
3e60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
3e70: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
3e80: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72  ::build_director
3e90: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
3ea0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
3eb0: 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  h $::build_direc 3ec0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 3ed0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 3ee0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 3ef0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 3f00: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 3f10: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 y has been overr 3f20: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 idden;.. 3f30: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 # therefor 3f40: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 e, use it verbat 3f50: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a im... #.. 3f60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
3f70: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72  ::build_director
3f80: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  y..      } else
3f90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3fa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
3fb0: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
3fc0: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  ntime option is
3fd0: 73 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d  set, the mixed-m
3fe0: 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ode assembly..
3ff0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73        #       is
4000: 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20   being tested.
4010: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68  In that case, th
4020: 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75  e path to the bu
4030: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  ild directory..
4040: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
4050: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the
4060: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e  platform name an
4070: 64 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69  d all the binari
4080: 65 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20  es under test..
4090: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
40a0: 68 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74  hould be present
40b0: 20 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f   in that directo
40c0: 72 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74  ry.  If the "nat
40d0: 69 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20  ive" runtime..
40e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70        #       op
40f0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c  tion is not set,
4100: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
4110: 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e  tory will be con
4120: 73 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20  sidered to be..
4130: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22         #       "
4140: 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c  platform-neutral
4150: 22 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61  ", with the nota
4160: 62 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66  ble exception of
4170: 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20   any native..
4180: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
4190: 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c  embly (e.g. "SQL
41a0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22  ite.Interop.dll"
41b0: 29 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 64  ) copied there d
41c0: 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  uring the..
41d0: 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64     #       build
41e0: 20 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e   process itself.
41f0: 20 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 70    If the build p
4200: 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64  rocess somehow d
4210: 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  oes not..
4220: 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 68   #       copy th
4230: 65 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c  e native assembl
4240: 79 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66  y for this platf
4250: 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65  orm, most of the
4260: 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20   tests..
4270: 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 73  #       in the s
4280: 75 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79  uite will simply
4290: 20 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65   be skipped.  Ge
42a0: 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67  nerally speaking
42b0: 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20  , there..
42c0: 20 23 20 20 20 20 20 20 20 61 72 65 20 74 77 6f   #       are two
42d0: 20 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74   ways to build t
42e0: 68 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e  he binaries when
42f0: 20 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75   preparing to ru
4300: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  n the..        #
4310: 20 20 20 20 20 20 20 74 65 73 74 20 73 75 69 74         test suit
4320: 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e:..        #..
4330: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 31         #       1
4340: 2e 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 61  . Build the sepa
4350: 72 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64  rate managed and
4360: 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69   native assembli
4370: 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20  es using some..
4380: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
4390: 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c    commands simil
43a0: 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20  ar to:..
43b0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  #..        #
43c0: 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20        build.bat
43d0: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d  ${Configuration} 43e0: 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c ManagedOnly${Pl
43f0: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20  atform}..
4400: 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c   #          buil
4410: 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72  d.bat ${Configur 4420: 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 ation}NativeOnly 4430: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20${Platform}..
4440: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4450: 20 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72   #          Wher
4460: 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f  e ${Configuratio 4470: 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65 n} is either "De 4480: 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 bug" or "Release 4490: 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 " and.. # 44a0: 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74${Plat
44b0: 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20  form} is either
44c0: 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22  "Win32" or "x64"
44d0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
44e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 32 2e        #       2.
44f0: 20 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64   Build the mixed
4500: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75  -mode assembly u
4510: 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73  sing a command s
4520: 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20  imilar to:..
4530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
4540: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e            build.
4550: 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74  bat ${Configurat 4560: 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d ion}${Platform}
4570: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4580: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
4590: 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72  Where ${Configur 45a0: 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 ation} is either 45b0: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c "Debug" or "Rel 45c0: 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 ease" and.. 45d0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b #${
45e0: 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74  Platform} is eit
45f0: 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22  her "Win32" or "
4600: 78 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 63  x64".  If this c
4610: 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20  ommand is..
4620: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 75 73     #          us
4630: 65 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74  ed, various test
4640: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 73  s that require s
4650: 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e  upplementary man
4660: 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  aged..        #
4670: 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
4680: 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20  ies (e.g. LINQ)
4690: 6d 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 75  may be skipped u
46a0: 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61  nless those bina
46b0: 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20  ries..        #
46c0: 20 20 20 20 20 20 20 20 20 61 72 65 20 73 75 62           are sub
46d0: 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64  sequently copied
46e0: 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63   into the correc
46f0: 74 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65  t directory (i.e
4700: 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20  . by..        #
4710: 20 20 20 20 20 20 20 20 20 22 74 65 73 74 5f 61           "test_a
4720: 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20  ll.bat")...
4730: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
4740: 20 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20        Note that
4750: 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64  all of the build
4760: 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20   commands above
4770: 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20  will default to
4780: 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23  using..        #
4790: 20 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 73         the lates
47a0: 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42  t version of MSB
47b0: 75 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61  uild available a
47c0: 6e 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 61  nd the "test_yea
47d0: 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20  r" may..
47e0: 23 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20  #       need to
47f0: 62 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f  be adjusted acco
4800: 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61  rdingly to actua
4810: 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74  lly run the test
4820: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   suite...
4830: 20 23 20 20 20 20 20 20 20 52 65 66 65 72 20 74   #       Refer t
4840: 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69  o the comments i
4850: 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d  n [getBuildYear]
4860: 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d   for more inform
4870: 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20  ation on..
4880: 20 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f    #       how to
4890: 20 73 65 74 20 74 68 69 73 20 76 61 72 69 61 62   set this variab
48a0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
48b0: 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69          set nati
48c0: 76 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  ve [hasRuntimeOp
48d0: 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a  tion native]....
48e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
48f0: 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f  joinBuildDirecto
4900: 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42  ry $native [getB 4910: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 uildBaseDirector 4920: 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 y] \.. 4930: 20 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d [getBuildYear] 4940: 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f [getBuildPlatfo 4950: 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 rm$native] [get
4960: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  BuildConfigurati
4970: 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  on]]..      }..
4980: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
4990: 63 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 73  c getReleaseVers
49a0: 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ion {} {..
49b0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
49c0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20   Figure out the
49d0: 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20  release version
49e0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65  for use with the
49f0: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
4a00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4a10: 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f  when checking fo
4a20: 72 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65  r available rele
4a30: 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ases...      #..
4a40: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
4a50: 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65  exists ::release
4a60: 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a  _version] && \..
4a70: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
4a80: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65  g length $::rele 4a90: 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 ase_version] > 0 4aa0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 4ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 4ac0: 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 OTE: The release 4ad0: 20 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 version has bee 4ae0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 n overridden; th 4af0: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d erefore, use it. 4b00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4b10: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 4b20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 4b30: 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 eturn$::release
4b40: 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  _version..
4b50: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
4b60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
4b70: 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20  OTE: No release
4b80: 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c  version is avail
4b90: 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  able, return an
4ba0: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20  empty string...
4bb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4bc0: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
4bd0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
4be0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
4bf0: 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65  dFileName { file
4c00: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
4c10: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
4c20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
4c30: 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69  eturns the speci
4c40: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61  fied file name a
4c50: 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63  s if it were loc
4c60: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20  ated in the..
4c70: 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64     #       build
4c80: 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63   directory, disc
4c90: 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63  arding any direc
4ca0: 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tory information
4cb0: 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20   present..
4cc0: 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66  #       in the f
4cd0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76  ile name as prov
4ce0: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
4cf0: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
4d00: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
4d10: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
4d20: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
4d30: 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72  oin [getBuildDir
4d40: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 4d50: 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 m [file tail$fi
4d60: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d  leName]]]..    }
4d70: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
4d80: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
4d90: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
4da0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
4db0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
4dc0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f  urns the directo
4dd0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73  ry where the tes
4de0: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  t application..
4df0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73       #       its
4e00: 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61  elf (i.e. the Ea
4e10: 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f  gle shell) is lo
4e20: 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c  cated.  This wil
4e30: 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20  l be used as..
4e40: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
4e50: 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20  destination for
4e60: 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65  the copied Syste
4e70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61  m.Data.SQLite na
4e80: 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  tive and..
4e90: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20  #       managed
4ea0: 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e  assemblies (i.e.
4eb0: 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73   because this is
4ec0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20   one of the few
4ed0: 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20  places..      #
4ee0: 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20        where the
4ef0: 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c  CLR will actuall
4f00: 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20  y find and load
4f10: 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d  them properly)..
4f20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4f30: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
4f40: 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74   ::binary_direct
4f50: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
4f60: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
4f70: 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69  gth $::binary_di 4f80: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 4f90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 4fa0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4fb0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 4fc0: 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 the binary dire 4fd0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f ctory has been o 4fe0: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 verridden;.. 4ff0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 # ther 5000: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 efore, use it ve 5010: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 rbatim... 5020: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 5030: 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 rn$::binary_dir
5040: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
5050: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
5060: 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e  return [info bin
5070: 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ary]..      }..
5080: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
5090: 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e  c getBinaryFileN
50a0: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  ame { fileName {
50b0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b  platform ""} } {
50c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
50d0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73   # NOTE: Returns
50e0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
50f0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69  ile name as if i
5100: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69  t were located i
5110: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
5120: 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 65       binary dire
5130: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e  ctory, discardin
5140: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20  g any directory
5150: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73  information pres
5160: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
5170: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e     in the file n
5180: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20  ame as provided
5190: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  by our caller...
51a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
51b0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69  eturn [file nati
51c0: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  vename \..
51d0: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
51e0: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
51f0: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 66  ry] $platform [f 5200: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 ile tail$fileNa
5210: 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  me]]]..    }....
5220: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 72  .    proc getCor
5230: 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  eBinaryFileName
5240: 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  { {platform ""}
5250: 7b 73 74 61 6e 64 61 72 64 20 66 61 6c 73 65 7d  {standard false}
5260: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
5270: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
5280: 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70 61  urns the full pa
5290: 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  th for the file
52a0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
52b0: 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..
52c0: 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65    #       native
52d0: 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66 6f   library code fo
52e0: 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e  r this platform.
52f0: 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 61    First, check a
5300: 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20 20  nd see if..
5310: 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c   #       the SQL
5320: 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20  ite core native
5330: 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65  library has alre
5340: 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 2e  ady been loaded.
5350: 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20 23    Next,..      #
5360: 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b 20         fallback
5370: 74 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c 6c  to what the full
5380: 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65 2c   path should be,
5390: 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65   based on whethe
53a0: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  r the..      #
53b0: 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20       mixed-mode
53c0: 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69 6e  assembly is bein
53d0: 67 20 75 73 65 64 20 61 6e 64 20 74 68 65 20 6e  g used and the n
53e0: 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65  ame of the curre
53f0: 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  nt..      #
5400: 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20    platform...
5410: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
5420: 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69  [catch {object i
5430: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
5440: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
5450: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
5460: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
5470: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
5480: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
5490: 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   _SQLiteNativeMo
54a0: 64 75 6c 65 46 69 6c 65 4e 61 6d 65 7d 20 66 69  duleFileName} fi
54b0: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20  leName] == 0 &&
54c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
54d0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c  ring length $fil 54e0: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then 54f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 5500: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 5510: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e he SQLite core n 5520: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 61 ative library ha 5530: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c s already been l 5540: 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 20 20 20 oaded via.. 5550: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6e # the n 5560: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 70 72 ative library pr 5570: 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 74 75 72 e-loader. Retur 5580: 6e 20 74 68 61 74 20 66 69 6c 65 20 6e 61 6d 65 n that file name 5590: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 now... # 55a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 55b0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
55c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
55d0: 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69  {[hasRuntimeOpti
55e0: 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  on native]} then
55f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
5600: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
5610: 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65 64 2d  eturn the mixed-
5620: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69  mode assembly fi
5630: 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...
5640: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
5650: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  urn [file native
5660: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
5670: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
5680: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
5690: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53 79  ry] $platform Sy 56a0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 56b0: 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 .dll]].. } 56c0: 65 6c 73 65 69 66 20 7b 24 73 74 61 6e 64 61 72 elseif {$standar
56d0: 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  d} then {..
56e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
56f0: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
5700: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61   native-only sta
5710: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62  ndard SQLite lib
5720: 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  rary file name..
5730: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5740: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
5750: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
5760: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
5770: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
5780: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 5790: 66 6f 72 6d 20 73 71 6c 69 74 65 33 2e 64 6c 6c form sqlite3.dll 57a0: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ]].. } else 57b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 57c0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 57d0: 65 74 75 72 6e 20 74 68 65 20 6e 61 74 69 76 65 eturn the native 57e0: 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 -only interop as 57f0: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 sembly file name 5800: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 5810: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 5820: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d le nativename \. 5830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 5840: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 le join [getBina 5850: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c ryDirectory]$pl
5860: 61 74 66 6f 72 6d 20 53 51 4c 69 74 65 2e 49 6e  atform SQLite.In
5870: 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 20 20 20  terop.dll]]..
5880: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
5890: 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6d 6d      proc getComm
58a0: 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  onDirectory {} {
58b0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
58c0: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
58d0: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
58e0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68  the directory wh
58f0: 65 72 65 20 74 68 65 20 74 65 73 74 20 73 63 72  ere the test scr
5900: 69 70 74 73 0d 0a 20 20 20 20 20 20 23 20 20 20  ipts..      #
5910: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f      should be lo
5920: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75  cated.  By defau
5930: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 72 65  lt, this just re
5940: 74 75 72 6e 73 20 74 68 65 20 45 61 67 6c 65 0d  turns the Eagle.
5950: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
5960: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e  inary directory.
5970: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
5980: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
5990: 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63  s ::common_direc
59a0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
59b0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
59c0: 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  ngth $::common_d 59d0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 59e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 59f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 5a00: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 5a10: 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 f the common dir 5a20: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 5a30: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 5a40: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 5a50: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 5a60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 5a70: 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 urn$::common_di
5a80: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
5a90: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
5aa0: 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f 72 5f 64  xists ::vendor_d
5ab0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
5ac0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
5ad0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76 65 6e 64  g length $::vend 5ae0: 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 or_directory] > 5af0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 5b00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 5b10: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 NOTE: The locati 5b20: 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e 64 6f 72 on of the vendor 5b30: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 5b40: 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 een set;.. 5b50: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 5b60: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 5b70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5b80: 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 6e 64 6f return$::vendo
5b90: 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  r_directory..
5ba0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
5bb0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f  fo exists ::tcl_
5bc0: 6c 69 62 72 61 72 79 5d 20 26 26 20 5c 0d 0a 20  library] && \..
5bd0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5be0: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63 6c 5f 6c   length $::tcl_l 5bf0: 69 62 72 61 72 79 5d 20 3e 20 30 20 26 26 20 5c ibrary] > 0 && \ 5c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 5c10: 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 3a e isdirectory$:
5c20: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 7d 20 74  :tcl_library]} t
5c30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
5c40: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
5c50: 3a 20 54 68 65 20 76 61 72 69 61 62 6c 65 20 77  : The variable w
5c60: 69 74 68 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e  ith the location
5c70: 20 6f 66 20 74 68 65 20 73 63 72 69 70 74 20 6c   of the script l
5c80: 69 62 72 61 72 79 20 69 73 0d 0a 20 20 20 20 20  ibrary is..
5c90: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 20 61     #       set a
5ca0: 6e 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  nd appears to be
5cb0: 20 61 20 72 65 61 6c 20 64 69 72 65 63 74 6f 72   a real director
5cc0: 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65 6d 62 65  y (i.e. not embe
5cd0: 64 64 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  dded..        #
5ce0: 20 20 20 20 20 20 77 69 74 68 69 6e 20 61 20 66        within a f
5cf0: 69 6c 65 29 3b 20 74 68 65 72 65 66 6f 72 65 2c  ile); therefore,
5d00: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
5d10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
5d20: 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  urn $::tcl_libra 5d30: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 5d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 5d50: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 5d60: 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 64 allback to the d 5d70: 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e irectory contain 5d80: 69 6e 67 20 74 68 65 20 65 78 65 63 75 74 61 62 ing the executab 5d90: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 5da0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 5db0: 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 info binary].. 5dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 5dd0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 . proc getDat 5de0: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 20 7b abaseDirectory { 5df0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 5e00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 5e10: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 5e20: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 5e30: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 where the test 5e40: 64 61 74 61 62 61 73 65 73 0d 0a 20 20 20 20 20 databases.. 5e50: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 # should 5e60: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 be located. By 5e70: 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 default, this ju 5e80: 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 st uses the temp 5e90: 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 orary.. # 5ea0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c 5eb0: 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 onfigured for th 5ec0: 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 is system... 5ed0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 5ee0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 info exists ::da 5ef0: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 tabase_directory 5f00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 5f10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 5f20: 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72$::database_dir
5f30: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
5f40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
5f50: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
5f60: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
5f70: 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72  the database dir
5f80: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
5f90: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
5fa0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
5fb0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d  refore, use it..
5fc0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5fd0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61      return $::da 5fe0: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 tabase_directory 5ff0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 6000: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 6010: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo 6020: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 6030: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 6040: 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 th$::scratch_di
6050: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
6060: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
6070: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
6080: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
6090: 20 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72   the scratch dir
60a0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
60b0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
60c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
60d0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d  refore, use it..
60e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
60f0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63      return $::sc 6100: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d ratch_directory. 6110: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 6120: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6130: 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 [getTemporaryPat 6140: 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 h].. }.. 6150: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 6160: 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 getTemporaryDire 6170: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 6180: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6190: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 61a0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 61b0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 61c0: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 e temporary file 61d0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 61e0: 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 should be locat 61f0: 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c ed. By default, 6200: 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 20 this just uses 6210: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 the temporary.. 6220: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 # dir 6230: 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 ectory configure 6240: 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 65 d for this syste 6250: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 6260: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 6270: 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 72 79 5f sts ::temporary_ 6280: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 6290: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 62a0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 6d ng length$::tem
62b0: 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79  porary_directory
62c0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
62d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
62e0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
62f0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 65  cation of the te
6300: 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
6310: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
6320: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
6330: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
6340: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
6350: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
6360: 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70 6f 72 61  eturn $::tempora 6370: 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 ry_directory.. 6380: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 6390: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr 63a0: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 63b0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 63c0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
63d0: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
63e0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
63f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6400: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
6410: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
6420: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
6430: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6440: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6450: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6460: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6470: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6480: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc 6490: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. 64a0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 64b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get 64c0: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. 64d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 64e0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 64f0: 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 estOverridesPrea 6500: 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 mble { {extraVar 6510: 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 Names ""} } {.. 6520: 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 set varName 6530: 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 s [list].... 6540: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6550: 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c E: If available, 6560: 20 73 74 61 72 74 20 77 69 74 68 20 74 68 65 20 start with the 6570: 6d 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 master list of t 6580: 65 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 est override.. 6590: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 65a0: 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d ables... #. 65b0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 65c0: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f exists ::test_o 65d0: 76 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a verrides] && \.. 65e0: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 [lleng 65f0: 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 th$::test_overr
6600: 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ides] > 0} then
6610: 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  {..        eval
6620: 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73  lappend varNames
6630: 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64   $::test_overrid 6640: 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 es.. }.... 6650: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6660: 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 NOTE: If request 6670: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 6680: 2c 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 , add any additi 6690: 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 onal variable.. 66a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 66b0: 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d es to copy now.. 66c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 66d0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 if {[llength$ex
66e0: 74 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30  traVarNames] > 0
66f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
6700: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76    eval lappend v
6710: 61 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61  arNames $extraVa 6720: 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d rNames.. }. 6730: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6740: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 6750: 74 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d the script fragm 6760: 65 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e ent to be return 6770: 65 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 ed by processing 6780: 20 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 each.. # 6790: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 variable na 67a0: 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 me and adding th 67b0: 65 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 e nececessary sc 67c0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 ript fragments f 67d0: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 or.. # 67e0: 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 each one... 67f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 6800: 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 result "".... 6810: 20 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 foreach varNa 6820: 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a me$varNames {..
6830: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6840: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
6850: 20 74 68 65 20 71 75 61 6c 69 66 69 65 64 20 67   the qualified g
6860: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e  lobal variable n
6870: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
6880: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 75 6c  .        set ful
6890: 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64  lVarName [append
68a0: 41 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65  Args :: $varName 68b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 68c0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 68d0: 44 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 6c Does the variabl 68e0: 65 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 e exist in this 68f0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 interpreter cont 6900: 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d ext?.. #. 6910: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e . if {[in 6920: 66 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 fo exists$fullV
6930: 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  arName]} then {.
6940: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
6950: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
6960: 41 70 70 65 6e 64 20 61 20 73 63 72 69 70 74 20  Append a script
6970: 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20  fragment to the
6980: 72 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c  result that will
6990: 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20   correctly..
69a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
69b0: 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64  py any contained
69c0: 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65   value to anothe
69d0: 72 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f  r interpreter co
69e0: 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20  ntext...
69f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61    #..          a
6a00: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20  ppend result \n
6a10: 22 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e  "set " $fullVarN 6a20: 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 ame " \{" [set$
6a30: 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d  fullVarName] \}.
6a40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
6a50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
6a60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
6a70: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74   the result cont
6a80: 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
6a90: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
6aa0: 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20  s, append a..
6ab0: 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69     #       newli
6ac0: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne...      #..
6ad0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
6ae0: 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20  length $result] 6af0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 6b00: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu 6b10: 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a lt \n.. }.. 6b20: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
6b30: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
6b40: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 70  ..    proc getAp
6b50: 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20  pDomainPreamble
6b60: 7b 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73  { {prefix ""} {s
6b70: 75 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20  uffix ""} } {..
6b80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
6b90: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
6ba0: 64 75 72 65 20 72 65 74 75 72 6e 73 20 61 20 74  dure returns a t
6bb0: 65 73 74 20 73 65 74 75 70 20 73 63 72 69 70 74  est setup script
6bc0: 20 66 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62   fragment suitab
6bd0: 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20  le for..      #
6be0: 20 20 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e        evaluation
6bf0: 20 62 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74   by an interpret
6c00: 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e  er created in an
6c10: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63   isolated applic
6c20: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  ation..      #
6c30: 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68       domain.  Th
6c40: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  e script fragmen
6c50: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  t being returned
6c60: 20 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e   will be surroun
6c70: 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20  ded by..      #
6c80: 20 20 20 20 20 20 74 68 65 20 70 72 65 66 69 78        the prefix
6c90: 20 61 6e 64 20 73 75 66 66 69 78 20 22 73 63 72   and suffix "scr
6ca0: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73  ipt fragments" s
6cb0: 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20  pecified by our
6cc0: 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23  caller,..      #
6cd0: 20 20 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20         if any.
6ce0: 54 68 65 20 65 6e 74 69 72 65 20 73 63 72 69 70  The entire scrip
6cf0: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  t being returned
6d00: 20 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74   will be substit
6d10: 75 74 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20  uted via..
6d20: 23 20 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c  #       [subst],
6d30: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
6d40: 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62  of our caller, b
6d50: 65 66 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75  efore being retu
6d60: 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20  rned...      #
6d70: 20 20 20 20 20 54 68 69 73 20 73 74 65 70 20 69       This step i
6d80: 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74  s necessary so t
6d90: 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64  hat some limited
6da0: 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61   context informa
6db0: 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20  tion,..      #
6dc0: 20 20 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72       primarily r
6dd0: 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 74 65  elated to the te
6de0: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65  sting directorie
6df0: 73 2c 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66  s, can be transf
6e00: 65 72 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20  erred..      #
6e10: 20 20 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65       to the inte
6e20: 72 70 72 65 74 65 72 20 69 6e 20 74 68 65 20 69  rpreter in the i
6e30: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
6e40: 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69  ion domain, maki
6e50: 6e 67 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20  ng it..      #
6e60: 20 20 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63       able to suc
6e70: 63 65 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65  cessfully run te
6e80: 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65  sts that require
6e90: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of
6ea0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
6eb0: 20 20 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20     files in one
6ec0: 6f 66 20 74 68 65 20 74 65 73 74 69 6e 67 20 64  of the testing d
6ed0: 69 72 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c  irectories.  Cal
6ee0: 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70  lers should keep
6ef0: 20 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20   in..      #
6f00: 20 20 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65     mind that the
6f10: 20 74 65 73 74 20 73 63 72 69 70 74 20 66 72 61   test script fra
6f20: 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75  gment being retu
6f30: 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79  rned cannot rely
6f40: 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20   on..      #
6f50: 20 20 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69     any script li
6f60: 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 73  brary procedures
6f70: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72   that are not pr
6f80: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 45 61  ovided by the Ea
6f90: 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  gle..      #
6fa0: 20 20 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61     library packa
6fb0: 67 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65  ge (i.e. "init.e
6fc0: 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e  agle"), includin
6fd0: 67 20 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64  g those provided
6fe0: 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20   by..      #
6ff0: 20 20 20 74 68 65 20 45 61 67 6c 65 20 74 65 73     the Eagle tes
7000: 74 20 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73  t package, unles
7010: 73 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61  s the file conta
7020: 69 6e 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f  ining them is lo
7030: 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  aded..      #
7040: 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61      manually via
7050: 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68   some other mech
7060: 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69  anism (e.g. by i
7070: 6e 63 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72  ncluding appropr
7080: 69 61 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20  iate..      #
7090: 20 20 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71      [package req
70a0: 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65  uire] or [source
70b0: 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68  ] commands in th
70c0: 65 20 70 72 65 66 69 78 20 6f 72 20 73 75 66 66  e prefix or suff
70d0: 69 78 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ix..      #
70e0: 20 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e    script fragmen
70f0: 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20  ts).  Also, all
7100: 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e  variable referen
7110: 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74  ces and all nest
7120: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
7130: 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e    commands (i.e.
7140: 20 74 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65   those in square
7150: 20 62 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61   brackets) conta
7160: 69 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61  ined in the fina
7170: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  l..      #
7180: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
7190: 20 77 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69   will end up bei
71a0: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20  ng evaluated in
71b0: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74  the context of t
71c0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
71d0: 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70    calling interp
71e0: 72 65 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68  reter and not th
71f0: 65 20 74 61 72 67 65 74 20 69 6e 74 65 72 70 72  e target interpr
7200: 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20  eter created in
7210: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
7220: 20 20 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c     isolated appl
7230: 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75  ication domain u
7240: 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72  nless the dollar
7250: 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71   signs and/or sq
7260: 75 61 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20  uare..      #
7270: 20 20 20 20 62 72 61 63 6b 65 74 73 20 61 72 65      brackets are
7280: 20 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65   specially quote
7290: 64 20 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68  d with backslash
72a0: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
72b0: 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65      return [uple
72c0: 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73  vel 1 [list subs
72d0: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70  t [appendArgs $p 72e0: 72 65 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 refix {.. 72f0: 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 if {[hasRuntime 7300: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 Option native]} 7310: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7320: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 7330: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 7340: 63 74 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 ctive AddRuntime 7350: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 Option native.. 7360: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 7370: 7d 20 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69 } [getTestOverri 7380: 64 65 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 desPreamble [lis 7390: 74 20 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e t path test_chan 73a0: 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d nel]]$suffix]]]
73b0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
73c0: 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69 6e 61  proc tryCopyBina
73d0: 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  ryFile { fileNam
73e0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
73f0: 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d  {newFileName ""}
7400: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
7410: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b  sourceFileName [
7420: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
7430: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
7440: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
7450: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
7460: 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  s $sourceFileNam 7470: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 7480: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
7490: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
74a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
74b0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
74c0: 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 72  ed copying binar
74d0: 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72  y file \"" $sour 74e0: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. 74f0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i 7500: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 7510: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... 7520: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. 7530: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 7540: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 ring length$new
7550: 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  FileName] > 0} t
7560: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
7570: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  et targetFileNam
7580: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
7590: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  ame $newFileName 75a0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
75b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
75c0: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46       set targetF
75d0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c  ileName [getBuil
75e0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  dFileName $fileN 75f0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
7600: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
7610: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63   set targetDirec
7620: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61  tory [file dirna
7630: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa 7640: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 me].... if 7650: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 7660: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 if {![f 7670: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 ile exists$targ
7680: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  etDirectory]} th
7690: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
76a0: 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72        file mkdir
76b0: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72   $targetDirector 76c0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y.. 76d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 76e0: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 file copy -for 76f0: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ce$sourceFileNa
7700: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa 7710: 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 me}] == 0} then 7720: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 7730: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
7740: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
7750: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
7760: 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20  - copied binary
7770: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s 7780: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c ourceFileName "\ 7790: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 " to \"" \.. 77a0: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46$targetF
77b0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
77c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
77d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 77e0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 77f0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 7800: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa 7810: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e iled to copy bin 7820: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 ary file from \" 7830: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d "$sourceFileNam
7840: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
7850: 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72   "\" to \"" $tar 7860: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e getFileName \"\n 7870: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 7880: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 }..... proc t 7890: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 ryCopyBuildFile 78a0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 { fileName {plat 78b0: 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c form ""} {newFil 78c0: 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 eName ""} } {.. 78d0: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 set sourceF 78e0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil 78f0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e dFileName$fileN
7900: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. 7910: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi 7920: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 le exists$sourc
7930: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  eFileName]} then
7940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
7950: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 7960: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 7970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 7980: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 -- skipped copyi 7990: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 ng build file \" 79a0: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d "$sourceFileNam
79b0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
79c0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
79d0: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20  t exist\n"]....
79e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20         return..
79f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
7a00: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
7a10: 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d  th $newFileName] 7a20: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 7a30: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target 7a40: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e FileName [getBin 7a50: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 aryFileName$new
7a60: 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  FileName $platfo 7a70: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 rm].. } els 7a80: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set 7a90: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 targetFileName 7aa0: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 7ab0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl 7ac0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d atform].. } 7ad0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 .... set ta 7ae0: 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 rgetDirectory [f 7af0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 ile dirname$tar
7b00: 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  getFileName]....
7b10: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
7b20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
7b30: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
7b40: 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63  sts $targetDirec 7b50: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tory]} then {.. 7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 7b70: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 ile mkdir$targe
7b80: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  tDirectory..
7b90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
7ba0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20             file
7bb0: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75  copy -force $sou 7bc0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 rceFileName$tar
7bd0: 67 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d  getFileName}] ==
7be0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7bf0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 7c00: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 7c10: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 7c20: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 "---- copie 7c30: 64 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f d build file fro 7c40: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
7c50: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22  eName "\" to \""
7c60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7c70: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName 7c80: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e 7c90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 7ca0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
7cb0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
7cc0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7cd0: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to
7ce0: 63 6f 70 79 20 62 75 69 6c 64 20 66 69 6c 65 20  copy build file
7cf0: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source 7d00: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 FileName \.. 7d10: 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c "\" to \ 7d20: 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 ""$targetFileNa
7d30: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
7d40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
7d50: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42   proc tryDeleteB
7d60: 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65  inaryFile { file
7d70: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
7d80: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  "} } {..      se
7d90: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  t fileName [getB
7da0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 7db0: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
7dc0: 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  m]....      if {
7dd0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  ![file exists $f 7de0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 7df0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 7e00: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
7e10: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
7e20: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
7e30: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
7e40: 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22  g binary file \"
7e50: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 7e60: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 7e70: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 7e80: 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 t\n"].... 7e90: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } 7ea0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 7eb0: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 7ec0: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d e$fileName}] ==
7ed0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7ee0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 7ef0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 7f00: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 7f10: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 "---- delet 7f20: 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c ed binary file \ 7f30: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c ""$fileName \"\
7f40: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  n]..      } else
7f50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
7f60: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 7f70: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 7f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 7f90: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c -- failed to del 7fa0: 65 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 ete binary file 7fb0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 \""$fileName \"
7fc0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
7fd0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
7fe0: 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46   tryDeleteBuildF
7ff0: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  ile { fileName {
8000: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b  platform ""} } {
8010: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
8020: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
8030: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 8040: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
8050: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
8060: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 8070: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 8080: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
8090: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
80a0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
80b0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
80c0: 64 20 64 65 6c 65 74 69 6e 67 20 62 75 69 6c 64  d deleting build
80d0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 80e0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 80f0: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does 8100: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d not exist\n"]... 8110: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. 8120: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8130: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi 8140: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e le delete$fileN
8150: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
8160: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
8170: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8180: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 81a0: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64 -- deleted build 81b0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
81c0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
81d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
81e0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 81f0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 8200: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 8210: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 "---- failed 8220: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64 to delete build 8230: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
8240: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
8250: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
8260: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73    proc tryCopyAs
8270: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d  sembly { fileNam
8280: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
8290: 7b 70 64 62 20 74 72 75 65 7d 20 7d 20 7b 0d 0a  {pdb true} } {..
82a0: 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69        tryCopyBui
82b0: 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ldFile $fileName 82c0: 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20$platform....
82d0: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68      if {$pdb} th 82e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 en {.. tr 82f0: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b yCopyBuildFile [ 8300: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 8310: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 8320: 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 rootname$fileNa
8330: 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66  me] .pdb] $platf 8340: 6f 72 6d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 orm.. }.. 8350: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 8360: 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 tryDeleteAssemb 8370: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 ly { fileName {p 8380: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 latform ""} {pdb 8390: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 83a0: 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 tryDeleteBinar 83b0: 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 yFile$fileName
83c0: 24 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20  $platform.... 83d0: 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 if {$pdb} the
83e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79  n {..        try
83f0: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
8400: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
8410: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
8420: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65  e rootname $file 8430: 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 Name] .pdb]$pla
8440: 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 7d 0d 0a  tform..      }..
8450: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
8460: 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62  oc tryLoadAssemb
8470: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70  ly { fileName {p
8480: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d  latform ""} } {.
8490: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
84a0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
84b0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 84c0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
84d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
84e0: 7b 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d  {set assembly \.
84f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
8500: 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61  object load -loa
8510: 64 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61  dtype File -alia
8520: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d  s $fileName]}] = 8530: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 8540: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8550: 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 # NOTE: Now, add 8560: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 the necessary t 8570: 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d est constraint.. 8580: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8590: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 85a0: 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 t [file rootname 85b0: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
85c0: 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eName]]....
85d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
85e0: 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 69  NOTE: Grab the i
85f0: 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
8600: 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73  sion from the as
8610: 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a  sembly because..
8620: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
8630: 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 72 65  several tests re
8640: 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20  ly on it having
8650: 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e  a certain value.
8660: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8670: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
8680: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  nt [appendArgs [
8690: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 86a0: 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 ame] _ \.. 86b0: 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 [$assembly
86c0: 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72   ImageRuntimeVer
86d0: 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  sion]]....
86e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
86f0: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the
8700: 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65  full path of the
8710: 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20   loaded file...
8720: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8730: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61    return $fileNa 8740: 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 me.. }.... 8750: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 8760: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 8770: 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61 64 79 oc isSQLiteReady 8780: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 8790: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 87a0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 75 73 is procedure mus 87b0: 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 t return non-zer 87c0: 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 51 o only if the SQ 87d0: 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 Lite native.. 87e0: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 # libra 87f0: 72 79 20 61 6e 64 20 74 68 65 20 53 79 73 74 65 ry and the Syste 8800: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 m.Data.SQLite ma 8810: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 61 naged assembly a 8820: 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 re loaded.. 8830: 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 # and rea 8840: 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 dy for use by th 8850: 65 20 74 65 73 74 20 73 75 69 74 65 2e 20 20 43 e test suite. C 8860: 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 urrently, this p 8870: 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 rocedure.. 8880: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 8890: 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 e called only af 88a0: 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 ter the [tryLoad 88b0: 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 Assembly] proced 88c0: 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20 20 23 ure has.. # 88d0: 20 20 20 20 20 20 20 62 65 65 6e 20 63 61 6c 6c been call 88e0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 ed to probe for 88f0: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. 8900: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 SQLite managed a 8910: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 ssembly.. # 8920: 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 5b and the [ 8930: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 checkForSQLite] 8940: 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 62 65 procedure has be 8950: 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f en called to pro 8960: 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 be for.. # 8970: 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 the SQLite 8980: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 3b native library; 8990: 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 otherwise, this 89a0: 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 procedure will 89b0: 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 simply.. # 89c0: 20 20 20 20 20 20 61 6c 77 61 79 73 20 72 65 74 always ret 89d0: 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 urn zero... 89e0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 89f0: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 [expr {.. 8a00: 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e [haveConstrain 8a10: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t System.Data.SQ 8a20: 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65 43 6f Lite] && [haveCo 8a30: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d nstraint SQLite] 8a40: 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 .. }].. 8a50: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d }..... proc m 8a60: 61 74 63 68 4d 61 63 68 69 6e 65 20 7b 20 70 6c atchMachine { pl 8a70: 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20 20 atform } {.. 8a80: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8a90: 45 3a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 E: An empty stri 8aa0: 6e 67 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 ng for the platf 8ab0: 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61 74 20 74 orm means that t 8ac0: 68 65 20 62 75 69 6c 64 20 69 73 20 6e 6f 74 0d he build is not. 8ad0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ 8ae0: 70 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e 61 74 primarily] a nat 8af0: 69 76 65 20 62 75 69 6c 64 3b 20 74 68 65 72 65 ive build; there 8b00: 66 6f 72 65 2c 20 69 74 20 61 6c 77 61 79 73 20 fore, it always 8b10: 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20 20 20 20 matches... 8b20: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 8b30: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
8b40: 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65  tform] == 0} the
8b50: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
8b60: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
8b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
8b80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73      # NOTE: Does
8b90: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70   the specified p
8ba0: 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 75 70  latform match up
8bb0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current
8bc0: 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 20 20  process?..
8bd0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 6c  #..      if {$pl 8be0: 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63 68 69 atform eq [machi 8bf0: 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a neToPlatform$::
8c00: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63  tcl_platform(mac
8c10: 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  hine)]} then {..
8c20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
8c30: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rue..      }....
8c40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
8c50: 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 63 69   NOTE: The speci
8c60: 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 64 6f  fied platform do
8c70: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 70 20  es not match up
8c80: 77 69 74 68 20 74 68 65 20 70 6c 61 74 66 6f 72  with the platfor
8c90: 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  m..      #
8ca0: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
8cb0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20   process...
8cc0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
8cd0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
8ce0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
8cf0: 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20  ForSQLiteBuilds
8d00: 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63  { channel {selec
8d10: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
8d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
8d30: 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 65  OTE: Check for e
8d40: 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 76 61  very possible va
8d50: 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  lid combination
8d60: 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 77  of values used w
8d70: 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hen..      #
8d80: 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20     locating out
8d90: 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74  the build output
8da0: 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 6f 77   directory, show
8db0: 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c 61 62  ing each availab
8dc0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
8dd0: 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 69 6f    build variatio
8de0: 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e  n along the way.
8df0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8e00: 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 65 20   foreach native
8e10: 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 75 65  [list false true
8e20: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ] {..        for
8e30: 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 42 75  each year [getBu
8e40: 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20  ildYears] {..
8e50: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 63         foreach c
8e60: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65  onfiguration [ge
8e70: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
8e80: 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ions] {..
8e90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8ea0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
8eb0: 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 65 63  re out the effec
8ec0: 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 74 66  tive build platf
8ed0: 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d 0a 20  orm.  This is..
8ee0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
8ef0: 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74     based on whet
8f00: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72  her or not a [pr
8f10: 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 20  imarily] native
8f20: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20  build..
8f30: 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62 65     #       is be
8f40: 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 20 5b  ing used.  For [
8f50: 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e  primarily] non-n
8f60: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a 20  ative builds,..
8f70: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
8f80: 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20     this will be
8f90: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  an empty string.
8fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
8fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
8fc0: 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75   platform [getBu
8fd0: 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74  ildPlatform $nat 8fe0: 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ive].... 8ff0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9000: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
9010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9020: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
9030: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
9040: 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 5c 22  .SQLite build \"
9050: 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 20  " [expr \..
9060: 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74             {$nat 9070: 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 ive ? "native/" 9080: 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 : ""}] [expr {[s 9090: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a tring length \.. 90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 90b0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f$platform] > 0 ?
90c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 6c   [appendArgs $pl 90d0: 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d atform /] : ""}] 90e0: 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 20 20$year \..
90f0: 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 6f 6e            / $con 9100: 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e 2e figuration "\".. 9110: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 . "].... 9120: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 9130: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 9140: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali 9150: 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 fied directory w 9160: 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 here the necessa 9170: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ry.. 9180: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e # componen 9190: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ts for System.Da 91a0: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 ta.SQLite should 91b0: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 be found... 91c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 91d0: 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 set direc 91e0: 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 tory [joinBuildD 91f0: 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 irectory$native
9200: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9210: 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 61 73      [getBuildBas
9220: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 65 61  eDirectory] $yea 9230: 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e r$platform $con 9240: 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 figuration].... 9250: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 9260: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 9270: 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73 73 61 : Do the necessa 9280: 72 79 20 66 69 6c 65 73 20 65 78 69 73 74 3f 20 ry files exist? 9290: 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f Currently, no o 92a0: 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20 20 20 ther steps.. 92b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 92c0: 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 are taken to ver 92d0: 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 ify this build i 92e0: 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c s actually viabl 92f0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 9300: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 #.. i 9310: 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 69 6c f {[isBuildAvail 9320: 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24 64 69 able$native $di 9330: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b rectory]} then { 9340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9350: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 9360: 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e # NOTE: When in 9370: 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 "select" mode, 9380: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se 9390: 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 0d 0a lect the first.. 93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 93b0: 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 available 93c0: 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e build of System. 93d0: 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 Data.SQLite and 93e0: 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 then return.. 93f0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 9400: 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d immediately.. 9410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 9420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9430: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b if {$select && [
9440: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c  matchMachine $pl 9450: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. 9460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 9470: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 9480: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 # NOTE: Manu 9490: 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c ally override al 94a0: 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 l the build dire 94b0: 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d ctory selection. 94c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 94d0: 20 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 64 # related 94e0: 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 69 test settings i 94f0: 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65 n order to force 9500: 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 this build.. 9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 9520: 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 of System.D 9530: 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 ata.SQLite to be 9540: 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 used... 9550: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9560: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 9570: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 9580: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b eter.GetActive [ 9590: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
95a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
95b0: 20 20 20 20 20 20 20 22 41 64 64 52 75 6e 74 69         "AddRunti
95c0: 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d  meOption" : "Rem
95d0: 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  oveRuntimeOption
95e0: 22 7d 5d 20 20 6e 61 74 69 76 65 0d 0a 0d 0a 20  "}]  native....
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9600: 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24  et ::test_year $9610: 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 year.. 9620: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 9630: 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 _platform$platf
9640: 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
9650: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
9660: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63  configuration $c 9670: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a onfiguration.... 9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9690: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
96a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
96c0: 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64    "yes, selected
96d0: 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69   (" [expr {$nati 96e0: 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a ve ? "native/" : 96f0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 ""}] \.. 9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex 9710: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng 9720: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
9730: 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20  0 ? [appendArgs
9740: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9750: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 9760: 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 /] : ""}]$year
9770: 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f   / $configuratio 9780: 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 n ")\n"].... 9790: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 97a0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 rn true.. 97b0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 97c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 97d0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
97e0: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20  yes\n..
97f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
9800: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
9810: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
9820: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 9830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 9840: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 9850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 9860: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 9870: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... 9880: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF 9890: 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 orSQLiteReleases 98a0: 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 { channel {sele 98b0: 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 ct false} } {.. 98c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 98d0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 NOTE: Check for 98e0: 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66 past releases of 98f0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 9900: 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 63 ite in the direc 9910: 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 tory.. # 9920: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e contained in 9930: 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 the "System.Dat 9940: 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f a.SQLite" enviro 9950: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 nment variable, 9960: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 if.. # 9970: 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 present... 9980: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 9990: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e info exists ::en 99a0: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 v(System.Data.SQ 99b0: 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 Lite)] && \.. 99c0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 99d0: 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 ength$::env(Sys
99e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29  tem.Data.SQLite)
99f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
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 42 75 69 6c 64 20    # NOTE: Build
9a20: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
9a30: 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68  ied directory wh
9a40: 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72  ere the necessar
9a50: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
9a60: 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f     components fo
9a70: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
9a80: 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66  Lite should be f
9a90: 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  ound...        #
9aa0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69  ..        set di
9ab0: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61  rectory [file na
9ac0: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
9ad0: 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
9ae0: 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d     $::env(System 9af0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 .Data.SQLite) [g 9b00: 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e etReleaseVersion 9b10: 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 ]]].... t 9b20: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
9b30: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
9b40: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
9b50: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
9b60: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
9b70: 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  elease \"" \..
9b80: 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63            $direc 9b90: 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a tory "\"... "].. 9ba0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 9bb0: 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c sReleaseAvailabl 9bc0: 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c 61 e$directory pla
9bd0: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
9be0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
9bf0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 9c00: 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 atform] == 0} th 9c10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9c20: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 set platform u 9c30: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. 9c40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 9c50: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 if {$select &&
9c60: 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70  [matchMachine $p 9c70: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { 9c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 9c90: 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 t ::build_direct 9ca0: 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a ory$directory..
9cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
9cc0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 9cd0: 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 pendArgs "yes, s 9ce0: 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 elected ("$plat
9cf0: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20  form ")\n"]....
9d00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9d10: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  n true..
9d20: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
9d30: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 9d40: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 9d50: 67 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 gs "yes ("$plat
9d60: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20  form ")\n"]..
9d70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9d80: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
9d90: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 9da0: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 nnel no\n.... 9db0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 foreach p 9dc0: 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 ath [lsort -decr 9dd0: 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 easing [file lis 9de0: 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d t$directory *]]
9df0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
9e00: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
9e10: 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 6c 65   $path] && [file 9e20: 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 70 61 isdirectory$pa
9e30: 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  th]} then {..
9e40: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
9e50: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 9e60: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 9e70: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 9e80: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 9e90: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 9ea0: 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a release \"" \.. 9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9ec0: 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22$path "\"... "
9ed0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
9ee0: 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73     if {[isReleas
9ef0: 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 74 68  eAvailable $path 9f00: 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e platform]} then 9f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 9f20: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 9f30: 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
9f40: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f60: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75    set platform u
9f70: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  nknown..
9f80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
9fa0: 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74  {$select && [mat 9fb0: 63 68 4d 61 63 68 69 6e 65 20 24 70 6c 61 74 66 chMachine$platf
9fc0: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9fe0: 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65  set ::build_dire
9ff0: 63 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20  ctory $path.... a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a010: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
a020: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
a030: 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70  , selected (" $p a040: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a latform ")\n"].. a050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a060: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. a070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . a080: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu a0a0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
a0b0: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20  endArgs "yes ("
a0c0: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d  $platform ")\n"] a0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a0e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. a0f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu a110: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
a120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a130: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a140: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
a150: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
a160: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
a170: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel a180: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. a190: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a1a0: 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 - environment va a1b0: 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e riable \"System. a1c0: 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 Data.SQLite\" is a1d0: 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 not " \.. a1e0: 20 20 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 "set, skip a1f0: 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 ping check for r a200: 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a eleases...\n"].. a210: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... a220: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. a230: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro a240: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 c checkForSQLite a250: 4c 69 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 Library { channe a260: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 l } {.. tpu a270: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
a280: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
a290: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
a2a0: 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ry... "....
a2b0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
a2d0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
a2e0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73  s +NonPublic Sys
a2f0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
a300: 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20  SQLite3 \..
a310: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
a320: 65 72 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d  ersion} version]
a330: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
a340: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a350: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
a360: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned
a370: 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c  version was null
a380: 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69  .  If so, make i
a390: 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20  t easy..
a3a0: 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e  #       to spot.
a3b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
a3c0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
a3d0: 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e   length $version a3e0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. a3f0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 set ve a400: 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 rsion null.. a410: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... a420: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO a430: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 TE: Attempt to q a440: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil a450: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie a460: 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 r for the SQLite a470: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # a480: 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d core library.. a490: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a4a0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { a4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a4c0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke a4d0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli a4e0: 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 c System.Data.SQ a4f0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a Lite.SQLite3 \.. a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a510: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 7d 20 SQLiteSourceId} a520: 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 sourceId]} then a530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. a540: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE a550: 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 : We failed to q a560: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil a570: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie a580: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. a590: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s a5a0: 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d ourceId unknown. a5b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... a5c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. a5d0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i a5e0: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 f the returned F a5f0: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide a600: 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c ntifier was null a610: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 . If.. # a620: 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 so, make a630: 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e it easy to spot. a640: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a650: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string a660: 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
a670: 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
a680: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
a690: 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20  ourceId null..
a6a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
a6b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
a6c0: 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53  NOTE: Yes, the S
a6d0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
a6e0: 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ry appears to be
a6f0: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
a700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a710: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  addConstraint SQ
a720: 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Lite....
a730: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ a740: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 appendArgs "yes a750: 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 ("$version " "
a760: 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d  $sourceId ")\n"] a770: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { a780: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs a790: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
a7a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
a7b0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
a7c0: 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  ForSQLiteInterop
a7d0: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a   { channel } {..
a7e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha a7f0: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b nnel "---- check a800: 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 ing for SQLite i a810: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e nterop assembly. a820: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 .. ".... if a830: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. a840: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object a850: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + a860: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d NonPublic System a870: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL a880: 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 ite3 \.. a890: 20 20 20 20 20 20 49 6e 74 65 72 6f 70 56 65 72 InteropVer a8a0: 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 3d sion} version] = a8b0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. a8c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. a8d0: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if a8e0: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 the returned ve a8f0: 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 rsion was null. a900: 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 If so, make it a910: 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 easy.. # a920: 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a to spot... a930: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a940: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l a950: 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 ength$version]
a960: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
a970: 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73          set vers
a980: 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  ion null..
a990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
a9a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
a9b0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65  : Attempt to que
a9c0: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f  ry the Fossil so
a9d0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
a9e0: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a  for the SQLite..
a9f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
aa00: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library...
aa10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
aa20: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa40: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
aa50: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
aa60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
aa70: 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20  te.SQLite3 \..
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
aa90: 74 65 72 6f 70 53 6f 75 72 63 65 49 64 7d 20 73  teropSourceId} s
aaa0: 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b  ourceId]} then {
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
aac0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
aad0: 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75   We failed to qu
aae0: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
aaf0: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
ab00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
ab10: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
ab20: 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a  urceId unknown..
ab30: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
ab40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ab50: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
ab60: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f   the returned Fo
ab70: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
ab80: 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e  tifier was null.
ab90: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20    If..        #
aba0: 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69        so, make i
abb0: 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d  t easy to spot..
abc0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
abd0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
abe0: 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64  length $sourceId abf0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. ac00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f set so ac10: 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 urceId null.. ac20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ac30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N ac40: 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ ac50: 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass ac60: 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f embly appears to ac70: 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a be available... ac80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ac90: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint aca0: 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a SQLiteInterop.. acb0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs acc0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
acd0: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 76 65  Args "yes (" $ve ace0: 72 73 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 rsion " "$sourc
acf0: 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20  eId ")\n"]..
ad00: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
ad10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann ad20: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d el no\n.. } ad30: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... ad40: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL ad50: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan ad60: 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 t { channel name ad70: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput ad80: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
ad90: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
ada0: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
adb0: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ng for System.Da
adc0: 74 61 2e 53 51 4c 69 74 65 20 64 65 66 69 6e 65  ta.SQLite define
add0: 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24 6e   constant \"" $n ade0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. adf0: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 "\"... "].... ae00: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { ae10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ae20: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f ae30: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic ae40: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi ae50: 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 te.SQLite3 \.. ae60: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 66 69 Defi ae70: 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 64 65 66 neConstants} def ae80: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d ineConstants] == ae90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. aea0: 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 if {[lsearch aeb0: 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 -exact -nocase aec0: 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73$defineConstants
aed0: 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74   $name] != -1} t aee0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. aef0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # af00: 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 NOTE: Yes, this af10: 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 define constant af20: 77 61 73 20 65 6e 61 62 6c 65 64 20 77 68 65 6e was enabled when af30: 20 74 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 the managed.. af40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # af50: 61 73 73 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d assembly was com af60: 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 piled... af70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 #.. a af80: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap af90: 70 65 6e 64 41 72 67 73 20 64 65 66 69 6e 65 43 pendArgs defineC afa0: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 onstant.System.D afb0: 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61 6d ata.SQLite.$nam
afc0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
afd0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y afe0: 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 es\n.. } aff0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. b000: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b010: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d   no\n..        }
b020: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b030: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
b040: 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e  $channel error\n b050: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } b060: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge b070: 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 tDateTimeFormat b080: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. b090: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi b0a0: 73 20 70 72 6f 63 65 64 75 72 65 20 73 69 6d 70 s procedure simp b0b0: 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 20 22 ly returns the " b0c0: 64 65 66 61 75 6c 74 22 20 44 61 74 65 54 69 6d default" DateTim b0d0: 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a 20 e format used.. b0e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 20 # by b0f0: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. b100: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. b110: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists b120: 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d ::datetime_form b130: 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 at] && \.. b140: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng b150: 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 th$::datetime_f
b160: 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e  ormat] > 0} then
b170: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
b180: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
b190: 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75 61 6c  eturn the manual
b1a0: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20 76 61  ly overridden va
b1b0: 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61 74 65  lue for the Date
b1c0: 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 20  Time format...
b1d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b1e0: 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 65 74   return $::datet b1f0: 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 20 ime_format.. b200: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. b210: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # b220: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 61 6e NOTE: Return an b230: 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 69 6d ISO8601 DateTim b240: 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74 69 e format compati b250: 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74 65 2c ble with SQLite, b260: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # b270: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ b280: 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74 61 62 Lite, and suitab b290: 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72 69 le for round-tri b2a0: 70 70 69 6e 67 20 77 69 74 68 20 74 68 65 0d 0a pping with the.. b2b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # b2c0: 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73 20 6f DateTime class o b2d0: 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 2e f the framework. b2e0: 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 If this value b2f0: 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20 20 is changed,.. b300: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var b310: 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79 20 66 ious tests may f b320: 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ail... #. b330: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return b340: 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d "yyyy-MM-dd HH:m b350: 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 0d 0a m:ss.FFFFFFFK".. b360: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. b370: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 6d ... proc enum b380: 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 erableToList { e b390: 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 numerable } {.. b3a0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result b3b0: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... b3c0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng b3d0: 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 th$enumerable]
b3e0: 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61  == 0 || $enumera b3f0: 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 ble eq "null"} t b400: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r b410: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
b420: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
b430: 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d  object foreach -
b440: 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e 75 6d  alias item $enum b450: 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 erable {.. b460: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le b470: 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d ngth$item] > 0}
b480: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b490: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
b4a0: 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 69 6e  t [$item ToStrin b4b0: 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 g].. }.. b4c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b4d0: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
b4e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
b4f0: 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 75 72  oc catchAndRetur
b500: 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 61 63  n { script {stac
b510: 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 7b 73  kTrace false} {s
b520: 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d  trict true} } {.
b530: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
b540: 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65  # NOTE: Evaluate
b550: 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76   the script prov
b560: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
b570: 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74  er in their cont
b580: 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20  ext,..      #
b590: 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 62 6f      capturing bo
b5a0: 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 61 6e  th the result an
b5b0: 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64  d the return cod
b5c0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
b5d0: 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74     set code [cat
b5e0: 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 24 73  ch {uplevel 1 $s b5f0: 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a cript} result].. b600: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b610: 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 # NOTE: Did the b620: 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 script provided b630: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e by our caller N b640: 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f OT raise an erro b650: 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r?.. #.. b660: 20 20 20 69 66 20 7b 24 73 74 72 69 63 74 20 26 if {$strict &
b670: 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20  & $code == 0 || b680: 21 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 !$strict && $cod b690: 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a e != 1} then {.. b6a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. b6b0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 # NOTE: Succe b6c0: 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20 6c 69 ss. Return a li b6d0: 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 st with the retu b6e0: 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 rn code and the b6f0: 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 result... b700: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu b710: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 rn [list$code $b720: 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d result].. } b730: 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63 6b 54 elseif {$stackT
b740: 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  race} then {..
b750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b760: 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65   # NOTE: Failure
b770: 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 77 61  .  Our caller wa
b780: 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 63 6b  nts a full stack
b790: 20 74 72 61 63 65 20 28 69 66 20 61 70 70 6c 69   trace (if appli
b7a0: 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20  cable),..
b7b0: 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20   #       return
b7c0: 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20  a list with the
b7d0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and
b7e0: 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 62 61  the result verba
b7f0: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  tim...        #.
b800: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
b810: 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73  [list $code$res
b820: 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ult]..      } el
b830: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
b840: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
b850: 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63   Failure.  Our c
b860: 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20 77  aller does not w
b870: 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 63 6b  ant a full stack
b880: 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 20 20   trace (if..
b890: 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 6c      #       appl
b8a0: 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 6e 20  icable), return
b8b0: 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20  a list with the
b8c0: 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 68 65  return code, the
b8d0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..
b8e0: 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 6f 72  #       code for
b8f0: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
b900: 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  , and the error
b910: 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 74 68  message up to th
b920: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
b930: 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 20 74     point where t
b940: 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20 73  he stack trace s
b950: 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20  hould start...
b960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b970: 20 73 65 74 20 69 6e 64 65 78 20 5b 73 74 72 69   set index [stri
b980: 6e 67 20 66 69 72 73 74 20 22 20 20 20 61 74 20  ng first "   at
b990: 22 20 24 72 65 73 75 6c 74 5d 3b 20 23 20 48 41  " $result]; # HA b9a0: 43 4b 3a 20 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d CK: Reliable?... b9b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return b9c0: 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 [list$code $::e b9d0: 72 72 6f 72 43 6f 64 65 20 5b 65 78 70 72 20 7b rrorCode [expr { b9e0: 24 69 6e 64 65 78 20 21 3d 20 2d 31 20 3f 20 5c$index != -1 ? \
b9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 73  ..            [s
ba00: 74 72 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69  tring trim [stri
ba10: 6e 67 20 72 61 6e 67 65 20 24 72 65 73 75 6c 74  ng range $result ba20: 20 30 20 24 69 6e 64 65 78 5d 5d 20 3a 20 24 72 0$index]] : $r ba30: 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 esult}]].. ba40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... ba50: 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 proc compileCSh ba60: 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 arpWith {.. ba70: 20 20 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f text memo ba80: 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 ry symbols stric ba90: 74 20 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 t resultsVarName baa0: 20 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 errorsVarName f bab0: 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 ileNames.. bac0: 20 20 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a args } {.. bad0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # bae0: 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20 NOTE: Since we baf0: 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 are going to use bb00: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d this method nam bb10: 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 e a lot, assign bb20: 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 it to a.. # bb30: 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 variable bb40: 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d first... #. bb50: 0a 20 20 20 20 20 20 73 65 74 20 61 64 64 20 52 . set add R bb60: 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c eferencedAssembl bb70: 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 ies.Add.... bb80: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE bb90: 3a 20 43 72 65 61 74 65 20 74 68 65 20 62 61 73 : Create the bas bba0: 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 e command to eva bbb0: 6c 75 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 luate and add th bbc0: 65 20 70 72 6f 70 65 72 74 79 20 73 65 74 74 69 e property setti bbd0: 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ngs.. # bbe0: 20 20 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f that are almo bbf0: 73 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64 st always needed bc00: 20 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73 by our unit tes bc10: 74 73 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73 ts (i.e. the Sys bc20: 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 tem.. # bc30: 20 20 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 and System.Da bc40: 74 61 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 ta assembly refe bc50: 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 rences)... bc60: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d #.. set com bc70: 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 mand [list \.. bc80: 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 43 compileC bc90: 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 6d Sharp$text $mem bca0: 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 ory$symbols $st bcb0: 72 69 63 74 20 72 65 73 75 6c 74 73 20 65 72 72 rict results err bcc0: 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ors \.. bcd0: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c$add System.dll
bce0: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 74   $add System.Dat bcf0: 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 a.dll$add Syste
bd00: 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e 64  m.Transactions.d
bd10: 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ll \..
bd20: 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e  $add System.Xml. bd30: 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d dll].... #. bd40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A bd50: 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69 dd all the provi bd60: 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61 ded file names a bd70: 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 s assembly refer bd80: 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d ences... #. bd90: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 . foreach f bda0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
bdb0: 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61  es {..        la
bdc0: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61  ppend command $a bdd0: 64 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c dd [getBinaryFil bde0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d eName$fileName]
bdf0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
be00: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
be10: 54 45 3a 20 41 64 64 20 74 68 65 20 65 78 74 72  TE: Add the extr
be20: 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20  a arguments, if
be30: 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d  any, to the comm
be40: 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e  and to evaluate.
be50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
be60: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f   eval lappend co
be70: 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20  mmand $args.... be80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # be90: 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20 NOTE: Alias the bea0: 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72 compiler local r beb0: 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72 esults and error bec0: 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 74 s variables to t bed0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # bee0: 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 variable names bef0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our bf00: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... bf10: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 bf20: 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65$resultsVarName
bf30: 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20   results..
bf40: 75 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56  upvar 1 $errorsV bf50: 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d arName errors... bf60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. bf70: 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 # NOTE: Evaluate bf80: 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 the constructed bf90: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d [compileCSharp] bfa0: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 command and ret bfb0: 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 urn the.. # bfc0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a result... bfd0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 #.. e bfe0: 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 val$command..
bff0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
c000: 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69   isMemoryDb { fi
c010: 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20  leName } {..
c020: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
c030: 45 3a 20 49 73 20 74 68 65 20 73 70 65 63 69 66  E: Is the specif
c040: 69 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c  ied database fil
c050: 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e  e name really an
c060: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
c070: 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ase?..      #..
c080: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70       return [exp
c090: 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20  r {$fileName eq c0a0: 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d ":memory:" || \. c0b0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri c0c0: 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 ng range$fileNa
c0d0: 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c  me 0 12] eq "fil
c0e0: 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20  e::memory:"}]..
c0f0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
c100: 63 20 69 73 54 61 62 6c 65 49 6e 44 62 20 7b 20  c isTableInDb {
c110: 6e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62  name {varName db
c120: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
c130: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
c140: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
c150: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
c160: 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
c170: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
c180: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
c190: 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61  aller.  It conta
c1a0: 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ins the database
c1b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
c1c0: 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d  le that will be.
c1d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
c1e0: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74  sed to execute t
c1f0: 68 65 20 71 75 65 72 79 20 75 73 65 64 20 74 6f  he query used to
c200: 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   determine if th
c210: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73  e named table is
c220: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
c230: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20  present in that
c240: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20  database...
c250: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
c260: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d  1 $varName db... c270: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c280: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the c290: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 sqlite_master ta c2a0: 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 ble to determine c2b0: 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 if the named ta c2c0: 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 ble is.. # c2d0: 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e present in c2e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a the database... c2f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s c300: 65 74 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20 20 et sql {.. c310: 20 20 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a SELECT COUNT(* c320: 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 ) FROM sqlite_ma c330: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 20 ster WHERE type c340: 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 = 'table' AND na c350: 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 7d me = ?;.. } c360: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. c370: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur c380: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 n non-zero if th c390: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 e named table is c3a0: 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 present... c3b0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return c3c0: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 [expr {.. c3d0: 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d [sql execute - c3e0: 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 execute scalar$
c3f0: 64 62 20 24 73 71 6c 20 5b 6c 69 73 74 20 70 61  db $sql [list pa c400: 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 6d ram1 String$nam
c410: 65 5d 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20 7d  e]] > 0..      }
c420: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
c430: 20 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20   proc trimSql {
c440: 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72  sql } {..      r
c450: 65 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61  eturn [regsub -a
c460: 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72  ll -- {\s+} [str
c470: 69 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22  ing trim $sql] " c480: 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "].. }..... c490: 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 proc executeS c4a0: 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 ql { sql {execut c4b0: 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 e none} {format c4c0: 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 none} {fileName c4d0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ""} } {.. i c4e0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt c4f0: 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 h$fileName] ==
c500: 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69 6c  0} then {set fil
c510: 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d  eName :memory:}.
c520: 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20 24  .      setupDb $c530: 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 fileName "" "" " c540: 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 66 61 " "" "" false fa c550: 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 lse false false c560: 64 62 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 db true.... c570: 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 try {.. c580: 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 return [uplevel c590: 31 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 1 [list \.. c5a0: 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 sql execu c5b0: 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 65 te -execute$exe
c5c0: 63 75 74 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f  cute -format $fo c5d0: 72 6d 61 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d rmat$db $sql]]. c5e0: 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 . } finally c5f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6c 65 61 {.. clea c600: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 nupDb$fileName
c610: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66  db false false f
c620: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  alse..      }..
c630: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
c640: 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20  c setupDb {..
c650: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
c660: 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74  e {mode ""} {dat
c670: 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20  eTimeFormat ""}
c680: 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22  {dateTimeKind ""
c690: 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20  } {flags ""}..
c6a0: 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61            {extra
c6b0: 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72   ""} {qualify tr
c6c0: 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65  ue} {delete true
c6d0: 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20  } {uri false}..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70             {temp
c6f0: 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72  orary true} {var
c700: 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 74 20  Name db} {quiet
c710: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
c720: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
c730: 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66  E: First, see if
c740: 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20   our caller has
c750: 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d  requested an in-
c760: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e  memory database.
c770: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
c780: 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69   set isMemory [i
c790: 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e  sMemoryDb $fileN c7a0: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ame].... #. c7b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F c7c0: 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 or now, all test c7d0: 20 64 61 74 61 62 61 73 65 73 20 75 73 65 64 20 databases used c7e0: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit c7f0: 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 20 e are placed.. c800: 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f # into c810: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 the database di c820: 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20 64 rectory. Each d c830: 61 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c 61 atabase and rela c840: 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ted files.. c850: 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 # used by c860: 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20 62 a test should b c870: 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79 20 e cleaned up by c880: 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67 20 that test using c890: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # c8a0: 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20 70 "cleanupDb" p c8b0: 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 2e rocedure, below. c8c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. c8d0: 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
c8e0: 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65  && $qualify} the c8f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set c900: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file c910: 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 join [getDatabas c920: 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c eDirectory] [fil c930: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
c940: 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ]]..      }....
c950: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
c960: 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74  NOTE: By default
c970: 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65  , delete any pre
c980: 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  -existing databa
c990: 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  se with the same
c9a0: 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20 20   file..      #
c9b0: 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74 20       name if it
c9c0: 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74 73  currently exists
c9d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
c9e0: 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79    if {!$isMemory c9f0: 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b &&$delete && [
ca00: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil ca10: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. ca20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ca30: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem ca40: 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 pt to delete any ca50: 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 pre-existing da ca60: 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 tabase with the ca70: 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 same file.. ca80: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e # name. ca90: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. caa0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch cab0: 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
cac0: 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20  leName} error]}
cad0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
cae0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
caf0: 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
cb00: 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  w failed to dele
cb10: 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70  te the file, rep
cb20: 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
cb30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
cb40: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th cb50: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. cb60: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
cb70: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
cb80: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
cb90: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
cba0: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
cbb0: 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20  delete database
cbc0: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa cbd0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. cbe0: 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 "\" during cbf0: 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 setup, error: " cc00: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
cc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
cc20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
cc30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
cc40: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
cc50: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
cc60: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
cc70: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
cc80: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
cc90: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
cca0: 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
ccb0: 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64   to the opened d
ccc0: 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20  atabase will be
ccd0: 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
cce0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
ccf0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d cd00: 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. cd10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 # NOTE: Star cd20: 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 t building the c cd30: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string cd40: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 . The only requ cd50: 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 ired portion.. cd60: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t cd70: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st cd80: 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 ring is the data cd90: 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 source, which c cda0: 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 ontains the.. cdb0: 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab cdc0: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 ase file name it cdd0: 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 self. If our ca cde0: 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 ller wants to us cdf0: 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 e a URI as.. ce00: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 # the da ce10: 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 ta source, use t ce20: 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 he FullUri conne ce30: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f ction string pro ce40: 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 perty to.. ce50: 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 # prevent ce60: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 the data source ce70: 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e string from bein ce80: 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 g mangled... ce90: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
cea0: 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  uri} then {..
ceb0: 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
cec0: 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66  ion {FullUri=${f ced0: 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 ileName}}.. cee0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. cef0: 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f set connectio cf00: 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 n {Data Source=$
cf10: 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
cf20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
cf30: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
cf40: 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64  ince this proced
cf50: 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69  ure has no speci
cf60: 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20  al knowledge of
cf70: 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  what the default
cf80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
cf90: 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74  setting is for t
cfa0: 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f  he ToFullPath co
cfb0: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
cfc0: 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d  propery, always.
cfd0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
cfe0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20  dd the value we
cff0: 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68  know about to th
d000: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
d010: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
d020: 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
d030: 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50  ection {;ToFullP
d040: 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d  ath=${qualify}}. d050: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d060: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our d070: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie d080: 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 d a journal mode d090: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess d0a0: 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. d0b0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th d0c0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str d0d0: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... d0e0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st d0f0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 ring length$mod
d100: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
d110: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
d120: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72  onnection {;Jour
d130: 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d  nal Mode=${mode} d140: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... d150: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N d160: 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c OTE: If our call d170: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 er specified a D d180: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 ateTime format, d190: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar d1a0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # d1b0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 portion of the d1c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin d1d0: 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. d1e0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri d1f0: 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
d200: 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20  imeFormat] > 0}
d210: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d220: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
d230: 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d  n {;DateTimeForm
d240: 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72  at=${dateTimeFor d250: 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a mat}}.. }.. d260: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. d270: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our d280: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified d290: 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c a DateTimeKind, d2a0: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa d2b0: 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. d2c0: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the d2d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri d2e0: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # d2f0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str d300: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
d310: 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74  TimeKind] > 0} t
d320: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
d330: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
d340: 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d   {;DateTimeKind=
d350: 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d  ${dateTimeKind}} d360: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... d370: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO d380: 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 TE: If there are d390: 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 any global (per d3a0: 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 test run) conne d3b0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 ction flags curr d3c0: 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 ently.. # d3d0: 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 set, use th d3e0: 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 em now (i.e. by d3f0: 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 combining them w d400: 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 ith the ones for d410: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 this.. # d420: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 connection) d430: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d440: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis d450: 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f ts ::connection_ d460: 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 flags] && \.. d470: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l d480: 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 ength$::connect
d490: 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20  ion_flags] > 0}
d4a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d4b0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
d4c0: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
d4d0: 29 20 74 68 61 74 20 74 68 65 20 6c 6f 63 61 6c  ) that the local
d4e0: 20 61 6e 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e   and global conn
d4f0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20  ection flags...
d500: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
d510: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t d520: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. d530: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
d540: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
d550: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
d560: 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 6c 20      "---- local
d570: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
d580: 20 61 72 65 3a 20 22 20 24 66 6c 61 67 73 20 5c   are: " $flags \ d590: 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n].... d5a0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
d5b0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
d5c0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
d5d0: 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20     "---- global
d5e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
d5f0: 20 64 65 74 65 63 74 65 64 3a 20 22 20 24 3a 3a   detected: " $:: d600: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags d610: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. d620: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d630: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co d640: 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 mbine and/or rep d650: 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 lace the connect d660: 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 ion flags and th d670: 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 en show the.. d680: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 # new d690: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 value... d6a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set d6b0: 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c flags [combineFl d6c0: 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f ags$flags $::co d6d0: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d nnection_flags]. d6e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d6f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh d700: 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 ow (and log) the d710: 20 6e 65 77 20 65 66 66 65 63 74 69 76 65 20 63 new effective c d720: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e onnection flags. d730: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. d740: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
d750: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
d760: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes d770: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen d780: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. d790: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d "---- com d7a0: 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e bined connection d7b0: 20 66 6c 61 67 73 20 61 72 65 3a 20 22 20 24 66 flags are: "$f
d7c0: 6c 61 67 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  lags \n]..
d7d0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
d7e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d7f0: 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61   NOTE: If our ca
d800: 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 73  ller specified s
d810: 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ome SQLiteConnec
d820: 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74  tionFlags, add t
d830: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
d840: 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74    necessary port
d850: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65  ion of the conne
d860: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
d870: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
d880: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
d890: 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30  ngth $flags] > 0 d8a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. d8b0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect d8c0: 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c ion {;Flags=${fl
d8d0: 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ags}}..      }..
d8e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d8f0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
d900: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
d910: 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61   an extra payloa
d920: 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  d to the connect
d930: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
d940: 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 6e     string, appen
d950: 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  d it now...
d960: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
d970: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78  tring length $ex d980: 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b tra] > 0} then { d990: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append d9a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 connection \;$
d9b0: 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a  extra..      }..
d9c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d9d0: 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68   # NOTE: Open th
d9e0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
d9f0: 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69  ction now, placi
da00: 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61  ng the opaque ha
da10: 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20  ndle value..
da20: 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74    #       into t
da30: 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63  he variable spec
da40: 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c  ified by our cal
da50: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
da60: 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c       set db [sql
da70: 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69   open -type SQLi
da80: 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65  te [subst $conne da90: 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 ction]].... daa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE dab0: 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 : Configure the dac0: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct dad0: 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c ory for the newl dae0: 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 y opened databas daf0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # db00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 connection now db10: 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 unless our calle db20: 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 r forbids it... db30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if db40: 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 {$temporary &&
db50: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
db60: 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44  no(setTemporaryD
db70: 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e  irectory)]} then
db80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql
db90: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app dba0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. dbb0: 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 "PRAGMA t dbc0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 emp_store_direct dbd0: 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 ory = \"" [getTe dbe0: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory dbf0: 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d ] \"\;].. } dc00: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. dc10: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 # NOTE: Alway dc20: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e s return the con dc30: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 nection handle u dc40: 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 pon success... dc50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret dc60: 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a urn$db..    }..
dc70: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44  ...    proc getD
dc80: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76  bConnection { {v
dc90: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
dca0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
dcb0: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
dcc0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
dcd0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
dce0: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
dcf0: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
dd00: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
dd10: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
dd20: 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76  he database prev
dd30: 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
dd40: 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  a the..      #
dd50: 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70       [setupDb] p
dd60: 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20  rocedure should
dd70: 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
dd80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
dd90: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam dda0: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. ddb0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T ddc0: 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 his returns the ddd0: 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 ADO.NET IDbConne dde0: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 ction object ins ddf0: 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 tance for the.. de00: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65 # spe de10: 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68 cified databse h de20: 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 andle. Since ge de30: 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 tting this objec de40: 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 t relies upon.. de50: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag de60: 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 le internals, gr de70: 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20 eat care should de80: 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 be taken to avoi de90: 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a d disposing of.. dea0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th deb0: 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 is object or oth dec0: 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69 erwise putting i ded0: 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 t into an invali dee0: 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 d state... def0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in df00: 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 fo exists db]} t df10: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i df20: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a obj df40: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag df50: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 s +NonPublic -ob df60: 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 jectflags +NoDis df70: 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 pose \.. df80: 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49 -alias I df90: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 nterpreter.GetAc dfa0: 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 tive.connections dfb0: 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d 0a 20 20 Item$db} \..
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
dfd0: 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
dfe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
dff0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
e000: 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75  E: Success, retu
e010: 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62  rn the opaque ob
e020: 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  ject handle...
e030: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
e040: 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res e050: 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 ult.. } e e060: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. e070: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # e080: 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 NOTE: Failure, r e090: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... e0a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. e0b0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
e0c0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
e0d0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
e0e0: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
e0f0: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
e100: 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  et connection ha
e110: 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  ndle for databas
e120: 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
e130: 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20         $db "\", e140: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
e150: 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
e160: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
e170: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
e180: 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69  c freeDbConnecti
e190: 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f  on { {varName co
e1a0: 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20  nnection} } {..
e1b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
e1c0: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
e1d0: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
e1e0: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e  iable (e.g. "con
e1f0: 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65  nection") in the
e200: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e210: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63  context of our c
e220: 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71  aller.  The opaq
e230: 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65  ue object handle
e240: 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d   for an ADO.NET.
e250: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
e260: 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f  onnection previo
e270: 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79  usly returned by
e280: 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f   [getDbConnectio
e290: 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20  n] should be..
e2a0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72      #       stor
e2b0: 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20  ed there...
e2c0: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
e2d0: 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65  1 $varName conne e2e0: 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 ction.... # e2f0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e300: 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 Attempt to remov e310: 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a e the opaque obj e320: 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 ect handle from e330: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d the interpreter. e340: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e . # n e350: 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 ow. This [objec e360: 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 t dispose] call e370: 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c will not actuall e380: 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 y dispose of the e390: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # e3a0: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 underlying objec e3b0: 74 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e t because the +N e3c0: 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61 oDispose flag wa e3d0: 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 s set on it.. e3e0: 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e # durin e3f0: 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 g creation of th e400: 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 e opaque object e410: 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 handle... # e420: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf e430: 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 o exists connect e440: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ion] && \.. e450: 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a [catch {obj e460: 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e ect dispose$con
e470: 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d  nection} error]}
e480: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e490: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
e4a0: 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66  TE: We somehow f
e4b0: 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20  ailed to remove
e4c0: 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f  the handle, repo
e4d0: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
e4e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
e4f0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe e500: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. e510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d . "== e520: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail e530: 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e ed to remove con e540: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c nection handle \ e550: 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c ""$connection \
e560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
e570: 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  ", error: " \n\t
e580: 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. e590: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... e5a0: 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f proc addDbCo e5b0: 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 nnection { conne e5c0: 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 ction {varName d e5d0: 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d b} } {.. #. e5e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R e5f0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec e600: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( e610: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th e620: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our e630: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # e640: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 caller... # e650: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 e660: 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20$varName db....
e670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
e680: 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63  NOTE: Create a c
e690: 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74  orrectly formatt
e6a0: 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ed name for the
e6b0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e6c0: 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20  ion to..      #
e6d0: 20 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74        be added t
e6e0: 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67  o the list manag
e6f0: 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20  ed by the Eagle
e700: 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
e710: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
e720: 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   db [object invo
e730: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
e740: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
e750: 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65    Eagle._Compone
e760: 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d  nts.Private.Form
e770: 61 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62  atOps DatabaseOb
e780: 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63  jectName $connec e790: 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 tion \.. e7a0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 SQLiteConnecti e7b0: 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b on [object invok e7c0: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 e Interpreter.Ge e7d0: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d tActive NextId]] e7e0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. e7f0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 # NOTE: Add t e800: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e he database conn e810: 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 ection provided e820: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f by our caller to e830: 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 the list.. e840: 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73 # of thos e850: 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 e known to the E e860: 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 agle interpreter e870: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e880: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke e890: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli e8a0: 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 c Interpreter.Ge e8b0: 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 tActive.connecti e8c0: 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 ons Add \.. e8d0: 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63$db $connec e8e0: 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a tion.. }..... e8f0: 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 proc cleanup e900: 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 Db { fileName {v e910: 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c arName db} {coll e920: 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c 69 ect true} {quali e930: 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 20 fy true}.. e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b { e950: 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20 7b delete true} } { e960: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. e970: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt e980: 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 to force all pe e990: 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 nding "garbage" e9a0: 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f objects to be co e9b0: 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 llected,.. e9c0: 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e # includin e9d0: 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 g SQLite stateme e9e0: 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f nts and backup o e9f0: 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f bjects; this sho ea00: 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 uld allow.. ea10: 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 # the und ea20: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 erlying database ea30: 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 file to be dele ea40: 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ted... #.. ea50: 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 if {$collec
ea60: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
ea70: 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67     collectGarbag
ea80: 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  e $::test_channe ea90: 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 l.. }.... eaa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N eab0: 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th eac0: 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari ead0: 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 able (e.g. "db") eae0: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context eaf0: 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 of our.. # eb00: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 caller. T eb10: 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 he handle to the eb20: 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f database previo eb30: 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20 usly opened via eb40: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # eb50: 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f [setupDb] pro eb60: 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65 cedure should be eb70: 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a stored there... eb80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 #.. u eb90: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
eba0: 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  db....      #..
ebb0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f       # NOTE: Clo
ebc0: 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  se the connectio
ebd0: 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  n to the databas
ebe0: 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 6f  e now.  This sho
ebf0: 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20  uld allow us..
ec00: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 64      #       to d
ec10: 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 6c  elete the underl
ec20: 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ying database fi
ec30: 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  le...      #..
ec40: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
ec50: 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61 74  ists db] && [cat
ec60: 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64  ch {sql close $d ec70: 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 b} error]} then ec80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. ec90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We eca0: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed ecb0: 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74 to close the dat ecc0: 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77 68 abase, report wh ecd0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. ece0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
ecf0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
ed00: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
ed10: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
ed20: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
ed30: 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 20   close database
ed40: 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72 72  \"" $db "\", err ed50: 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. ed60: 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 \n\t$error
ed70: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d   \n]..      }...
ed80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
ed90: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73  # NOTE: First, s
eda0: 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72  ee if our caller
edb0: 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61   has requested a
edc0: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  n in-memory data
edd0: 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  base...      #..
ede0: 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f        set isMemo
edf0: 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24  ry [isMemoryDb $ee00: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... ee10: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO ee20: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 TE: Build the fu ee30: 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20 64 ll path to the d ee40: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d atabase file nam ee50: 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c e. For now, all ee60: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 test.. # ee70: 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 database fi ee80: 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 les are stored i ee90: 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 n the temporary eea0: 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 directory... eeb0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! eec0: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75$isMemory && $qu eed0: 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 alify} then {.. eee0: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN eef0: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ ef00: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 getDatabaseDirec ef10: 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c tory] [file tail ef20: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20$fileName]]..
ef30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
ef40: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
ef50: 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c  Check if the fil
ef60: 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d  e still exists..
ef70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
ef80: 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26  if {!$isMemory & ef90: 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 &$delete && [fi
efa0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN efb0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. efc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. efd0: 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 # NOTE: Skip de efe0: 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 leting database eff0: 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 files if somebod f000: 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 y sets the globa f010: 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 l.. # f020: 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 20 70 variable to p f030: 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 revent it... f040: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i f050: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists f060: 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46 ::no(cleanupDbF f070: 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ile)]} then {.. f080: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f090: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At f0a0: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 tempt to delete f0b0: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas f0c0: 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 e file now... f0d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f0e0: 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 if {[set cod f0f0: 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 e [catch {file d f100: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
f110: 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b   error]]} then {
f120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
f130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
f140: 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
f150: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
f160: 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72   the file, repor
f170: 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
f180: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
f190: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test f1a0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append f1b0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. f1c0: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA f1d0: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to f1e0: 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 delete database f1f0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
f200: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
f210: 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
f220: 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72  g cleanup, error
f230: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error f240: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } f250: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else f260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. f270: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT f280: 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20 E: Show that we f290: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting f2a0: 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 the file... f2b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f2c0: 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d set code 0... f2d0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs f2e0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
f2f0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
f310: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69  === WARNING: ski
f320: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61  pped deleting da
f330: 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20  tabase file \""
f340: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. f350: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 "\" d f360: 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 uring cleanup\n" f370: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. f380: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. f390: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f3a0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c # NOTE: The fil f3b0: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 e does not exist f3c0: 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 , success!.. f3d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s f3e0: 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 et code 0.. f3f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu f400: 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d rn$code..    }.
f410: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74  ....    proc set
f420: 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c  upDbInterruptCal
f430: 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20  lback { channel
f440: 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  log } {..      t
f450: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- f460: 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 --- setting up d f470: 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 ebugger interrup f480: 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d t callback... ". f490: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca f4a0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 tch {.. # f4b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE f4c0: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 : Make sure the f4d0: 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 20 script debugger f4e0: 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64 and the isolated f4f0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 72 65 interpreter are f500: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # f510: 20 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64 setup and read f520: 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 y for use... f530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 #.. d f540: 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 20 ebug setup true f550: 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 true.... f560: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT f570: 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 E: Load the nece f580: 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69 ssary packages i f590: 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 nto the isolated f5a0: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... f5b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f5c0: 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b 0d 0a debug eval {.. f5d0: 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 packag f5e0: 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d e require Eagle. f5f0: 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 . packa f600: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 ge require Eagle f610: 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 .Library.. f620: 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 package requ f630: 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a ire Eagle.Test.. f640: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... f650: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f660: 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 # NOTE: Copy the f670: 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61 necessary varia f680: 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 bles into the is f690: 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret f6a0: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a er... #.. f6b0: 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e debug in f6c0: 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73 voke 0 set ::tes f6d0: 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e 6e t_channel$chann
f6e0: 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20  el; # NOTE: For
f6f0: 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20 20  [tputs]...
f700: 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30    debug invoke 0
f710: 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20   set ::test_log
f720: 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f  $log; # NOTE: Fo f730: 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 r [tlog]..... f740: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f750: 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 # NOTE: Install f760: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 the callback scr f770: 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61 ipt to be evalua f780: 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 ted in the isola f790: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ted.. # f7a0: 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 72 interpreter f7b0: 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72 when this inter f7c0: 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 72 preter is interr f7d0: 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 0d upted by script. f7e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # f7f0: 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 cancellation, e f800: 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a tc... #.. f810: 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 61 debug ca f820: 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73 llback apply {{s f830: 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20 ender e} {.. f840: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f850: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check f860: 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62 61 63 if this callbac f870: 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 k is one that we f880: 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 care about... f890: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f8a0: 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 65 6c if {"Cancel f8b0: 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b 24 ed" in [split [$
f8c0: 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 65 5d  e InterruptType]
f8d0: 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a   ", "]} then {..
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
f8f0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
f900: 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f 75  E: Iterate throu
f910: 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  gh all database
f920: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77  connections know
f930: 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  n to the..
f940: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61        #       pa
f950: 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72  rent interpreter
f960: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
f970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
f980: 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
f990: 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20 20 20  ias pair \..
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a              [obj
f9b0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
f9c0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 65 20  s +NonPublic $e f9d0: 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e Interpreter.conn f9e0: 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 ections] {.. f9f0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. fa00: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT fa10: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 E: Attempt to ca fa20: 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 ncel any SQL que fa30: 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 ries in progress fa40: 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 on this.. fa50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # fa60: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect fa70: 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ion... fa80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. fa90: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch faa0: 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 6e {$pair Value.Can
fab0: 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  cel} error]} the
fac0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
fad0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te fae0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe faf0: 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 ndArgs \n \.. fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fb10: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: fb20: 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 65 6c failed to cancel fb30: 20 71 75 65 72 79 20 66 6f 72 20 63 6f 6e 6e 65 query for conne fb40: 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 ction \"" \.. fb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fb60: 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 [$pair Key] "\"
fb70: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
fb80: 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. fb90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. fba0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. fbb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. fbc0: 20 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 }}.. } err fbd0: 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b or] == 0} then { fbe0: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon fbf0: 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70 straint interrup fc00: 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65 tCallback.sqlite fc10: 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 3.... tpu fc20: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c ts$channel yes\
fc30: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  n..      } else
fc40: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
fc50: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen fc60: 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72 dArgs "no, error fc70: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
fc80: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
fc90: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
fca0: 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66   cleanupFile { f
fcb0: 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74  ileName {collect
fcc0: 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61   true} {force fa
fcd0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
fce0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
fcf0: 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63   Attempt to forc
fd00: 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67  e all pending "g
fd10: 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20  arbage" objects
fd20: 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c  to be collected,
fd30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
fd40: 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65  including SQLite
fd50: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and
fd60: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20  backup objects;
fd70: 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f  this should allo
fd80: 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  w..      #
fd90: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying
fda0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
fdb0: 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20   be deleted...
fdc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
fdd0: 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20  {$collect} then fde0: 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 {.. colle fdf0: 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 ctGarbage$::tes
fe00: 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20  t_channel..
fe10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
fe20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
fe30: 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73  ck if the file s
fe40: 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20  till exists...
fe50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
fe60: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f fe70: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { fe80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. fe90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski fea0: 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 p deleting test feb0: 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 files if somebod fec0: 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 y sets the globa fed0: 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 l variable.. fee0: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 70 # to p fef0: 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 revent it... ff00: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i ff10: 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 f {$force || ![i
ff20: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
ff30: 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74  cleanupFile)]} t
ff40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
ff50: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
ff60: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
ff70: 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74   delete the test
ff80: 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20   file now...
ff90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ffa0: 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65     if {[set code
ffb0: 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65   [catch {file de
ffc0: 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20  lete $fileName} ffd0: 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d error]]} then {. ffe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. fff0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 10000 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 10010 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete 10020 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 the file, report 10030 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 why... 10040 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 10050 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
10060 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
10070 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
10080 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
10090 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
100a0 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65  delete test file
100b0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 100c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 100d0 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 100e0 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c anup, error: " \ 100f0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
10100 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
10110 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
10120 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
10130 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
10140 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70  ow that we skipp
10150 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20  ed deleting the
10160 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...
10170 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
10180 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20  t code 0....
10190 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 101a0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 101b0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 101c0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 101d0 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 ARNING: skipped 101e0 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 deleting test fi 101f0 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
10200 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10210 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65    "\" during cle
10220 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  anup\n"]..
10230 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
10240 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
10250 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10260 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f  The file does no
10270 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73  t exist, success
10280 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  !..        #..
10290 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30        set code 0
102a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
102b0 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d     return $code. 102c0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 102d0 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 roc collectGarba 102e0 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 ge { channel {mi 102f0 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30 7d lliseconds 1000} 10300 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d 20 {quiet true} } 10310 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 {.. if {[ca 10320 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo 10330 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 ke GC GetTotalMe 10340 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75 mory false} resu 10350 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 10360 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
10370 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
10380 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $10390 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 103a0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 103b0 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 "---- memor 103c0 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 y in use by the 103d0 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 CLR before colle 103e0 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 ction... " \.. 103f0 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73$res
10400 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ult " bytes\n"].
10410 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
10420 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10430 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 10440 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 10450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d .. "= 10460 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 10470 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d led to get CLR m 10480 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 emory usage, err 10490 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 104a0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
104b0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  t \n]..      }..
104c0 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 23 23  ..      ########
104d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10510 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  #....      #..
10520 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65      # NOTE: Repe
10530 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74  atedly attempt t
10540 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67  o collect garbag
10550 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f  e until the allo
10560 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20  tted number..
10570 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69     #       of mi
10580 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65  lliseconds has e
10590 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20  lapsed.  Always
105a0 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65  attempt to colle
105b0 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20  ct garbage..
105c0 20 20 23 20 20 20 20 20 20 20 61 74 20 6c 65 61    #       at lea
105d0 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20  st once...
105e0 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74 61  #..      set sta
105f0 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64  rt [clock second
10600 73 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74  s]..      set st
10610 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74  op [expr {$start 10620 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 + ($millisecond
10630 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20  s / 1000)}]....
10640 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20       do {..
10650 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
10660 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
10670 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61   force a full ga
10680 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  rbage collection
10690 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e   now.  Report an
106a0 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
106b0 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 73     error that is
106c0 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20   encountered if
106d0 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20  we fail...
106e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
106f0 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
10700 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
10710 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d 20 65  alMemory true} e
10720 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
10730 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $10740 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 10750 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 10760 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 10770 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 NG: failed full 10780 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 garbage collecti 10790 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a on, error: " \.. 107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e \n 107b0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
107c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
107d0 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f      set now [clo
107e0 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20  ck seconds]..
107f0 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61     } while {$sta 10800 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e rt <=$now && $n 10810 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d 0a 20 ow <$stop}....
10820 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23       ###########
10830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
10870 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
10880 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
10890 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d  e GC GetTotalMem
108a0 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75 6c  ory false} resul
108b0 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
108c0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 108d0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 108e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
108f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
10900 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
10910 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79      "---- memory
10920 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43   in use by the C
10930 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 63 74  LR after collect
10940 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  ion... " \..
10950 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c            $resul 10960 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 t " bytes\n"].. 10970 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10980 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 10990 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
109a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
109b0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
109c0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
109d0 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d  d to get CLR mem
109e0 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72  ory usage, error
109f0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
10a00 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20     \n\t $result 10a10 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 10a20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 10a30 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 getSQLiteHandle 10a40 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c Counts { channel 10a50 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 10a60 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 {.. set re 10a70 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 sult [list].... 10a80 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f if {[haveCo 10a90 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 nstraint \.. 10aa0 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 define 10ab0 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e Constant.System. 10ac0 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e Data.SQLite.COUN 10ad0 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 T_HANDLE]} then 10ae0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 10af0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 10b00 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 d each critical 10b10 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 handle count to 10b20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 the resulting li 10b30 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a st... #.. 10b40 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 10b50 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 name [list conne 10b60 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 ctionCount state 10b70 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 mentCount backup 10b80 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 Count] {.. 10b90 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f set value [o 10ba0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 10bb0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 10bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10bd0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 10be0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM 10bf0 65 74 68 6f 64 73 20 24 6e 61 6d 65 5d 0d 0a 0d ethods$name]...
10c00 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
10c10 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 10c20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10c30 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10c40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
10c50 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
10c60 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
10c70 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20  count \"" $name 10c80 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 20 "\" is "$value
10c90 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
10ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61  ....          la
10cb0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61  ppend result $va 10cc0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a lue.. }.. 10cd0 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 10ce0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
10cf0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
10d00 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
10d10 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f  actual handle co
10d20 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 76 61  unts are not ava
10d30 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66 6f 72  ilable; therefor
10d40 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 20  e, just..
10d50 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20   #       return
10d60 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a  an empty list...
10d70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10d80 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 10d90 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c l "---- critical 10da0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 handle counts u 10db0 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 navailable\n".. 10dc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10dd0 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
10de0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
10df0 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74  oc shutdownSQLit
10e00 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72  e { channel {for
10e10 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69 65 74  ce false} {quiet
10e20 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
10e30 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
10e40 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68  TE: Make sure th
10e50 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  at SQLite core l
10e60 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65  ibrary is comple
10e70 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e 20 20  tely shutdown.
10e80 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  This..      #
10e90 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 74      is used by t
10ea0 65 73 74 73 20 74 68 61 74 20 63 68 61 6e 67 65  ests that change
10eb0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
10ec0 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68  ptions and/or th
10ed0 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ose..      #
10ee0 20 20 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20     that need to
10ef0 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67 69 6e  make sure loggin
10f00 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  g is initialized
10f10 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63   (i.e. just in c
10f20 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ase..      #
10f30 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f     the SQLite co
10f40 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 69  re library was i
10f50 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68  nitialized in th
10f60 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f 72 20  e process prior
10f70 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
10f80 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f 67 20    the SQLiteLog
10f90 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62 6c 65  class being able
10fa0 20 74 6f 20 73 65 74 75 70 20 69 74 73 20 6c 6f   to setup its lo
10fb0 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e  gging callback).
10fc0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
10fd0 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73  Normally, this s
10fe0 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65  hould only be pe
10ff0 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74  rformed if SQLit
11000 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d  e is loaded and.
11010 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72  .      #       r
11020 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
11030 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
11040 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
11050 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69  if {$force || [i 11060 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 sSQLiteReady]} t 11070 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 11080 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 .. # BUGF 11090 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 IX: Before calli 110a0 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 ng the native sh 110b0 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c utdown function, 110c0 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d make sure both. 110d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 110e0 20 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 of the PRAGMA 110f0 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f related directo 11100 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 ry names are fre 11110 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 11120 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 11130 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 11140 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d s$channel true.
11150 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
11160 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e  catch {object in
11170 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
11180 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
11190 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
111a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
111b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
111c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
111d0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74      sqlite3_shut
111e0 64 6f 77 6e 7d 20 72 65 73 75 6c 74 5d 20 3d 3d  down} result] ==
111f0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
11200 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 11210 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 11220 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
11230 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
11240 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
11250 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
11260 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
11270 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73  ()... ok: " $res 11280 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 11290 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 112a0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 112b0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
112c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
112d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 112e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 112f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11300 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 11310 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e te3_shutdown().. 11320 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 11330 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
11340 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11350 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
11360 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
11370 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73   reportSQLiteRes
11380 6f 75 72 63 65 73 20 7b 20 63 68 61 6e 6e 65 6c  ources { channel
11390 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7b   {quiet false} {
113a0 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20  collect true} }
113b0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
113c0 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61    # NOTE: Skip a
113d0 6c 6c 20 6f 75 74 70 75 74 20 69 66 20 77 65 20  ll output if we
113e0 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22  are running in "
113f0 71 75 69 65 74 22 20 6d 6f 64 65 2e 0d 0a 20 20  quiet" mode...
11400 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
11410 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  {[haveConstraint
11420 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11430 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74    defineConstant
11440 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
11450 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
11460 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d  UAL_TABLE] && \.
11470 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65  .          [have
11480 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20  Constraint \..
11490 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69              defi
114a0 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
114b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 52  m.Data.SQLite.TR
114c0 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53  ACK_MEMORY_BYTES
114d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
114e0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 114f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11500 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
11510 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d   "---- current m
11520 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
11530 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20  SQLiteMemory...
11540 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  "..        }....
11550 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
11560 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
11570 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
11580 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
11590 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
115a0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
115b0 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  Memory \..
115c0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73 41            bytesA
115d0 6c 6c 6f 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79  llocated} memory
115e0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
115f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$11600 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 11610 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 11620 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
11630 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 11640 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 11650 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 11660 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 11670 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 11680 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 11690 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
116a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
116b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 116c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 116d0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
116e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
116f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
11700 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 11710 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 11720 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
11730 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72  -- maximum memor
11740 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69  y in use by SQLi
11750 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20  teMemory... "..
11760 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
11770 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
11780 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
11790 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
117a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
117b0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
117c0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f  QLite.SQLiteMemo
117d0 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry \..
117e0 20 20 20 20 20 20 6d 61 78 69 6d 75 6d 42 79 74        maximumByt
117f0 65 73 41 6c 6c 6f 63 61 74 65 64 7d 20 6d 65 6d  esAllocated} mem
11800 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
11810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
11820 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 11840 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
11850 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 11860 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 11870 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 11880 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 11890 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 118a0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 118b0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
118c0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
118d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 118e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 118f0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
11900 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
11910 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
11920 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71  ...      if {!$q 11930 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 11940 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
11950 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65  nnel "---- curre
11960 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65  nt memory in use
11970 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d   by SQLite... ".
11980 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
11990 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62    if {[catch {ob
119a0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
119b0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
119c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
119d0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
119e0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
119f0 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
11a00 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d         sqlite3_m
11a10 65 6d 6f 72 79 5f 75 73 65 64 7d 20 6d 65 6d 6f  emory_used} memo
11a20 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
11a30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$11a40 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 11a50 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
11a60 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
11a70 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79  rgs $memory " by 11a80 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 11a90 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 11aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 11ab0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d # NOTE: M 11ac0 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 aybe the SQLite 11ad0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 core library is 11ae0 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 unavailable?.. 11af0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11b00 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e set memory unkn 11b10 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 own.... i 11b20 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
11b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
11b40 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 11b50 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
11b60 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
11b70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
11b80 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65    set result $me 11b90 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 mory; # NOTE: Re 11ba0 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 turn memory in-u 11bb0 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 se to our caller 11bc0 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ..... if {! 11bd0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
11be0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 11bf0 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 hannel "---- max 11c00 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 imum memory in u 11c10 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 se by SQLite... 11c20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 11c30 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 11c40 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 11c50 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 11c60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11c70 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 11c80 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 ite.UnsafeNative 11c90 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 Methods \.. 11ca0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 sqlite3 11cb0 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 _memory_highwate 11cc0 72 20 30 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 r 0} memory] == 11cd0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 11ce0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11cf0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11d00 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 11d10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
11d20 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d  mory " bytes\n"]
11d30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
11d40 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
11d50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11d60 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68  # NOTE: Maybe th
11d70 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
11d80 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c  brary is unavail
11d90 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23  able?..        #
11da0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65  ..        set me
11db0 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a  mory unknown....
11dc0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 11dd0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 11de0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
11df0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
11e00 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 11e10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 11e20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 }.... if {$
11e30 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d  collect} then {.
11e40 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74  .        collect
11e50 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c  Garbage $channel 11e60 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 11e70 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11e80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11e90 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " 11ea0 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d ---- current mem 11eb0 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 ory in use by th 11ec0 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 e CLR... ".. 11ed0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 11ee0 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object 11ef0 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 11f00 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 alMemory false} 11f10 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 11f20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 11f30 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 {[string is int 11f40 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d 65 eger -strict$me
11f50 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mory]} then {..
11f60 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 11f70 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 11f80 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 11f90 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
11fa0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62  Args $memory " b 11fb0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 11fc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 11fd0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 11fe0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e set memory in 11ff0 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 valid.... 12000 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
12010 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12020 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 12030 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
12040 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
12050 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
12060 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
12070 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
12080 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
12090 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$120a0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 120b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
120c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
120d0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 120e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 120f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 12100 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
12110 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
12120 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
12130 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e  rectories { chan
12140 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 65  nel {reset false
12150 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
12160 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
12170 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74  eck if the sqlit
12180 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
12190 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20  ectory function
121a0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  is available...
121b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70       #..      tp
121c0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a  uts $channel \.. 121d0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 121e0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e checking for fun 121f0 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 ction sqlite3_wi 12200 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 12210 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 12220 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 12230 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 This call to th 12240 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f e sqlite3_win32_ 12250 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 set_directory fu 12260 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 0d nction uses the. 12270 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 12280 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20 66 nvalid value 0 f 12290 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72 67 or the first arg 122a0 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 ument. This cod 122b0 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 e is designed.. 122c0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 122d0 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 check if calling 122e0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 the function wi 122f0 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63 65 ll raise an exce 12300 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 ption (i.e... 12310 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 61 # the a 12320 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 ctual result of 12330 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 the function doe 12340 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 20 s not matter as 12350 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 long as no.. 12360 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 12370 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29 2e ory is changed). 12380 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12390 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a obj 123b0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 123c0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 123e0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 123f0 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 12400 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 hods \.. 12410 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 sqlite3_wi 12420 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 12430 79 20 30 20 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d y 0 null}] == 0} 12440 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12450 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 12460 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 TE: Calling the 12470 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 12480 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 12490 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 tion does not.. 124a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 124b0 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f ause an exceptio 124c0 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 n; therefore, it 124d0 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 must be availab 124e0 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 le (i.e... 124f0 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 # even t 12500 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 hough it should 12510 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 return a failure 12520 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 return code in 12530 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 12540 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 case)... 12550 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12560 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 addConstraint s 12570 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 12580 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 _directory.... 12590 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
125a0 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20  nnel yes\n....
125b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
125c0 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
125d0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
125e0 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
125f0 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20  tories?..
12600 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
12610 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $reset} then {.. 12620 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 12630 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 12640 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 ow make sure the 12650 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 database and te 12660 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 mporary director 12670 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 ies are.. 12680 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 # reset 12690 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 their default v 126a0 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f alues, which sho 126b0 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 uld be null for 126c0 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 both... 126d0 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 # Since t 126e0 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 126f0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 12700 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c unction is avail 12710 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 able,.. 12720 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 2e # use it. 12730 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 12740 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 for {se 12750 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 t index 1} {$ind
12760 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e  ex < 3} {incr in
12770 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  dex} {..
12780 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
12790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
127a0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
127b0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
127c0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
127e0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
127f0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12800 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
12810 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
12820 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
12830 65 63 74 6f 72 79 20 24 69 6e 64 65 78 20 6e 75  ectory $index nu 12840 6c 6c 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ll} \.. 12850 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c resul 12860 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 12870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 12880 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
12890 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
128b0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65  ---- call sqlite
128c0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
128d0 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c  ctory(" $index \ 128e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 128f0 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 ", null)... 12900 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e ok: "$result \n
12910 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
12920 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
12930 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 12940 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 12950 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 12960 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 12970 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f l sqlite3_win32_ 12980 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 set_directory(" 12990 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20$index \..
129a0 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e              ", n
129b0 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22  ull)... error: "
129c0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 129d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 129e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 129f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 12a00 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 12a10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
12a20 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20   no\n....
12a30 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
12a40 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c  TE: Does our cal
12a50 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65  ler want to rese
12a60 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65  t the directorie
12a70 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c  s?  This can onl
12a80 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
12a90 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20     be performed
12aa0 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61  if SQLite is loa
12ab0 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f  ded and ready fo
12ac0 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73  r use by the tes
12ad0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
12ae0 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20     suite...
12af0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
12b00 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73 53   {$reset && [isS 12b10 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 QLiteReady]} the 12b20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 12b30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 12b40 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 TE: Now make sur 12b50 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 e the database a 12b60 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 nd temporary dir 12b70 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 ectories are.. 12b80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 12b90 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61 reset their defa 12ba0 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 ult values, whic 12bb0 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c h should be null 12bc0 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 for both... 12bd0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69 # Si 12be0 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f nce the sqlite3_ 12bf0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 12c00 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 ory function doe 12c10 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 s not.. 12c20 20 23 20 20 20 20 20 20 20 61 70 70 65 61 72 20 # appear 12c30 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c to be available, 12c40 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 69 61 use the associa 12c50 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 ted PRAGMA comma 12c60 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23 nds.. # 12c70 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 2e 0d instead.. 12c80 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 12c90 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 12ca0 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 directory [list 12cb0 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 data_store_direc 12cc0 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f tory temp_store_ 12cd0 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 directory] {.. 12ce0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 set sq 12cf0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 l [appendArgs "P 12d00 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f RAGMA "$directo
12d10 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a  ry " = \"\";"]..
12d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
12d30 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74   {[catch {execut
12d40 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c  eSql $sql} resul 12d50 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 12d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 12d70 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$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 20 20 20 20 22                 "
12da0 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41  ---- execute PRA
12db0 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79  GMA " $directory 12dc0 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d "... ok: \"" \. 12dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 12de0 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d$result \"\n]
12df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
12e00 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
12e10 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 12e20 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 12e30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12e40 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 "---- exec 12e50 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 ute PRAGMA "$di
12e60 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72  rectory "... err
12e70 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
12e80 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
12e90 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 12ea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 12eb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 12ec0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 12ed0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 12ee0 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 NOTE: Finally, s 12ef0 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 how the current 12f00 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 value of the dat 12f10 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 abase and tempor 12f20 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ary.. # 12f30 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 directories. 12f40 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 This can only b 12f50 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 e performed if S 12f60 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d QLite is loaded. 12f70 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 12f80 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 nd ready for use 12f90 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 by the test sui 12fa0 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. 12fb0 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 if {[isSQLit 12fc0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d eReady]} then {. 12fd0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 12fe0 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 directory [list 12ff0 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 data_store_dire 13000 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 ctory temp_store 13010 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 _directory] {.. 13020 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
13030 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
13040 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  rgs "---- checki
13050 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  ng " $directory 13060 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 "... "].... 13070 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 set sql [ap 13080 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 pendArgs "PRAGMA 13090 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b "$directory \;
130a0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
130b0 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75  f {[catch {execu
130c0 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61  teSql $sql scala 130d0 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d r} result] == 0} 130e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 130f0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
13100 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
13110 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74  "ok: \"" $result 13120 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 13130 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 13140 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
13150 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
13160 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  gs "error: " \n\
13170 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 13180 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 13190 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 131a0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 131b0 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 oc loadSQLiteTes 131c0 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e tSettings { chan 131d0 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20 nel {suffix ""} 131e0 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } 131f0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 13200 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c # NOTE: Skip l 13210 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 74 69 oading the setti 13220 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 73 61 ngs if their usa 13230 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 ge has been disa 13240 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a bled... #.. 13250 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 13260 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c exists ::no(sql 13270 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 29 iteTestSettings) 13280 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 13290 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 132a0 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f NOTE: Load custo 132b0 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f m per-user and/o 132c0 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 r per-host test 132d0 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 settings now... 132e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 132f0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 13300 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 ts ::tcl_platfor 13310 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b m(user)]} then { 13320 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 13330 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 13340 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 Name [file join 13350 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 [getCommonDirect 13360 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ory] \.. 13370 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 13380 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 s settings$suff
13390 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  ix . $::tcl_plat 133a0 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c form(user) .eagl 133b0 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e]].... 133c0 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 133d0 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 s$userSettingsF
133e0 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
133f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
13400 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 13410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 13420 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
13430 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13450 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70   "---- loading p
13460 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74  er-user test set
13470 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c  tings file \"" \
13480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13490 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67      $userSetting 134a0 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c sFileName \"...\ 134b0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 134c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 134d0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 70 6c if {[catch {upl 134e0 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 evel 1 [list sou 134f0 72 63 65 20 24 75 73 65 72 53 65 74 74 69 6e 67 rce$userSetting
13500 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20  sFileName]} \..
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13520 20 20 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20     error]} then
13530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
13540 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 13550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13560 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
13570 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
13580 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13590 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
135a0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
135b0 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 20 73   load per-user s
135c0 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
135d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
135e0 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74          $userSet 135f0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c tingsFileName "\ 13600 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 13610 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
13620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
13630 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
13640 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
13650 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
13660 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 13670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13680 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
13690 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
136b0 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f  "---- skipped lo
136c0 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74  ading per-user t
136d0 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c  est settings fil
136e0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
136f0 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72             $user 13700 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 13710 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no 13720 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 t exist\n"].. 13730 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 13740 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 13750 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 }.... ## 13760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 137a0 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 #####.... 137b0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 137c0 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d s ::tcl_platform 137d0 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d (host)]} then {. 137e0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 68 . set h 137f0 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 13800 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ 13810 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f getCommonDirecto 13820 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ry] \.. 13830 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 [appendArgs 13840 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 settings$suffi
13850 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  x . $::tcl_platf 13860 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c 65 orm(host) .eagle 13870 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ]].... 13880 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 if {[file exists 13890 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69$hostSettingsFi
138a0 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
138b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
138c0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 138d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 138e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
138f0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13910 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65  "---- loading pe
13920 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74  r-host test sett
13930 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d  ings file \"" \.
13940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
13950 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73     $hostSettings 13960 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e FileName \"...\n 13970 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 13980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 13990 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65 if {[catch {uple 139a0 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 vel 1 [list sour 139b0 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 ce$hostSettings
139c0 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20  FileName]} \..
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
139e0 20 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b    error]} then {
139f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13a00 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 13a10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 13a20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
13a30 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
13a40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
13a50 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
13a60 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
13a70 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65  load per-host se
13a80 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
13a90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
13aa0 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74         $hostSett 13ab0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 ingsFileName "\" 13ac0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 13ad0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
13ae0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
13af0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
13b00 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
13b10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
13b20 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 13b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 13b40 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
13b50 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13b70 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61  ---- skipped loa
13b80 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65  ding per-host te
13b90 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  st settings file
13ba0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
13bb0 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53            $hostS 13bc0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 13bd0 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not 13be0 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. 13bf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13c00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 13c10 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. 13c20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 13c30 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c unSQLiteTestProl 13c40 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ogue {} {.. 13c50 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 13c60 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f : Skip running o 13c70 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 ur custom prolog 13c80 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f ue if the main o 13c90 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 ne has been.. 13ca0 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 # skipp 13cb0 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 13cc0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 13cd0 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f xists ::no(prolo 13ce0 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 gue.eagle)]} the 13cf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 13d00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 13d10 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 65 Load the "before 13d20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 -constraints" cu 13d30 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e stom per-user an 13d40 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 d/or per-host.. 13d50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 13d60 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 est settings now 13d70 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 13d80 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 13d90 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 [list loadSQLite 13da0 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a TestSettings$::
13db0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65  test_channel .be
13dc0 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  fore]....
13dd0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
13de0 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68  TE: Determine th
13df0 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e  e names of the n
13e00 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61  ative platform a
13e10 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e  nd architecture.
13e20 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
13e30 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
13e40 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  m [getBuildPlatf
13e50 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20  orm true]..
13e60 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74     set architect
13e70 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72  ure [architectur
13e80 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c  eForPlatform $pl 13e90 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... 13ea0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 13eb0 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 NOTE: Show the p 13ec0 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 latform and arch 13ed0 69 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f itecture used to 13ee0 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 help locate the 13ef0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 13f00 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 native build f 13f10 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 iles... # 13f20 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 13f30 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
13f40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
13f50 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
13f60 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f   platform for lo
13f70 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75  cating native bu
13f80 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22  ild files is \""
13f90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13fa0 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d  $platform \"\n]. 13fb0 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 13fc0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
13fd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
13ff0 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66  - architecture f
14000 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69  or locating nati
14010 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69  ve build files i
14020 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  s \"" \..
14030 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 14040 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 re \"\n].... 14050 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 14060 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c NOTE: Build a l 14070 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 ist of configura 14080 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 tion files that 14090 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 we handle... 140a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 140b0 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d et configFileNam 140c0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 140d0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 140e0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 ata.SQLite.dll.c 140f0 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 onfig].... 14100 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 14110 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 OTE: Build a lis 14120 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d t of auxiliary M 14130 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 anaged Debugging 14140 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 Assistants (MDA 14150 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ).. # 14160 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e configuration 14170 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 files that we h 14180 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... 14190 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d #.. set m 141a0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 daConfigFileName 141b0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 141c0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 Installer 141d0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 .exe.mda.config 141e0 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e test.exe.mda.con 141f0 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 fig \.. 14200 20 20 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e testlinq.exe. 14210 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 mda.config].... 14220 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 14230 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 14240 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 the list of nati 14250 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 ve assembly file 14260 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 14270 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 . The.. 14280 23 20 20 20 20 20 20 20 72 65 61 73 6f 6e 20 74 # reason t 14290 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e he "System.Data. 142a0 53 51 4c 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65 SQLite.dll" file 142b0 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65 72 is included her 142c0 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 e is.. # 142d0 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74 because it 142e0 20 63 6f 75 6c 64 20 62 65 20 74 68 65 20 6d 69 could be the mi 142f0 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 14300 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. 14310 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 set nativ 14320 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 eFileNames [list 14330 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14340 73 71 6c 69 74 65 33 2e 64 6c 6c 20 53 51 4c 69 sqlite3.dll SQLi 14350 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 53 te.Interop.dll S 14360 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 14370 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 e.dll].... 14380 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 14390 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c OTE: Build the l 143a0 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 ist of managed a 143b0 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 ssembly files th 143c0 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 at we handle... 143d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 143e0 20 20 73 65 74 20 6d 61 6e 61 67 65 64 46 69 6c set managedFil 143f0 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a eNames [list \.. 14400 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 14410 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 14420 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ll System.Data.S 14430 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d QLite.Linq.dll]. 14440 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14450 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 14460 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f move any test co 14470 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 20 72 nstraints that r 14480 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 efer to the nati 14490 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 ve and/or.. 144a0 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 # manag 144b0 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 ed assembly file 144c0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 144d0 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65 unless forbidde 144e0 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 n from.. 144f0 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f # doing so 14500 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14510 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 14520 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c exists ::no(sql 14530 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 iteRemoveConstra 14540 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ints)]} then {.. 14550 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 14560 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 h fileName$conf
14570 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
14580 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
14590 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
145a0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66  endArgs file_ $f 145b0 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. 145c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 145d0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 145e0 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 ame$mdaConfigFi
145f0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
14600 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e         removeCon
14610 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
14620 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e  rgs file_ $fileN 14630 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ame].. 14640 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 }.... f 14650 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 14660 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
14670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
14680 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  removeConstraint
14690 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
146a0 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  e_ $fileName].. 146b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 146c0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 146d0 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 fileName$manage
146e0 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
146f0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
14700 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
14710 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69  ndArgs file_ $fi 14720 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 leName].. 14730 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 14740 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14750 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 14760 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 ip all System.Da 14770 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 ta.SQLite relate 14780 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 d file handling 14790 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 (deleting,.. 147a0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 # copy 147b0 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 ing, and loading 147c0 29 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e ) if instructed. 147d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 147e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 147f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 exists ::no(sqli 14800 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 teFiles)]} then 14810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 14820 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 14830 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f : Skip trying to 14840 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c 65 delete any file 14850 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e s if instructed. 14860 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 14870 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 14880 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 14890 64 65 6c 65 74 65 53 71 6c 69 74 65 46 69 6c 65 deleteSqliteFile 148a0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 148b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 148c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 148d0 64 65 6c 65 74 65 53 71 6c 69 74 65 43 6f 6e 66 deleteSqliteConf 148e0 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 igFiles)]} then 148f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14900 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 14910 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d e$configFileNam
14920 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
14930 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42        tryDeleteB
14940 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e  inaryFile $fileN 14950 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 14960 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 14970 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 14980 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 14990 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 149a0 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 SqliteNativeFile 149b0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 149c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 149d0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 149e0 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d o(deleteSqliteIm 149f0 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 14a00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14a10 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 14a20 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
14a30 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14a50 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
14a60 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 14a70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 14a80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 14a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 14aa0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 14ab0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 14ac0 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 tePlatformFiles) 14ad0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 14ae0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 14af0 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
14b00 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
14b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14b20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
14b30 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 14b40 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 14b50 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 14b60 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
14b70 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20  ame $platform.. 14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 14b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14ba0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 14bb0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 14bc0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 14bd0 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 SqliteArchitectu 14be0 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a reFiles)] && \.. 14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14c00 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 14c10 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
14c20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
14c40 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 14c50 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 14c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14c70 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 14c80 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
14c90 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20  $architecture.. 14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 14cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14cc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 14cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 14ce0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 14cf0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c s ::no(deleteSql 14d00 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 iteManagedFiles) 14d10 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 14d20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 14d30 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 fileName$manag
14d40 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  edFileNames {..
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14d60 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
14d70 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 14d80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 14d90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 14da0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 14db0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14dc0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 14dd0 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c for the "autoSel 14de0 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ect" runtime opt 14df0 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 ion. If present 14e00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ,.. # 14e10 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 attempt to 14e20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se 14e30 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 lect the first a 14e40 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. 14e50 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 14e60 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 d (or "release") 14e70 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 of SQLite and S 14e80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 14e90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 14ea0 20 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 for use wit 14eb0 68 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 h the test suite 14ec0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 14ed0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 if {[h 14ee0 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 14ef0 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 autoSelect]} the 14f00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 14f10 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 if {![checkForS 14f20 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
14f30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
14f40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
14f50 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
14f60 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20  rSQLiteReleases
14f70 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 14f80 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. 14f90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 14fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 14fb0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 14fc0 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 14fd0 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 o verify the bui 14fe0 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 ld directory if 14ff0 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 instructed;.. 15000 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f # o 15010 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 therwise, make s 15020 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 ure it actually 15030 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 exists or halt t 15040 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 he entire.. 15050 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 # tes 15060 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 ting process if 15070 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 15080 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d t... #. 15090 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 150a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 150b0 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 o(verifyBuildDir 150c0 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b ectory)]} then { 150d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 150e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 150f0 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 OTE: At this poi 15100 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 nt, the build di 15110 72 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 rectory MUST exi 15120 73 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 st as a.. 15130 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c # val 15140 69 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 id directory for 15150 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 15160 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 cess to continue 15170 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 15180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 15190 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get 151a0 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 0d BuildDirectory]. 151b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 151c0 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists 151d0 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20$directory] ||
151e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
151f0 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65     ![file isdire
15200 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79  ctory $directory 15210 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 15220 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 15230 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 15240 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f 20 : Just prior to 15250 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67 actually halting 15260 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 15270 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 cess,.. 15280 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64 # add 15290 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 an error to the 152a0 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d test log file.. 152b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 152c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 152d0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
152e0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
152f0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
15300 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75         "---- cou
15310 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75  ld not verify bu
15320 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22  ild directory \"
15330 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a  " $directory \.. 15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15350 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 "\", all testi 15360 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d ng halted\n"]... 15370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 15380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15390 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 # NOTE: Raising 153a0 61 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 66 a script error f 153b0 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73 rom this point s 153c0 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 hould halt.. 153d0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 153e0 20 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 the testing pr 153f0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 ocess... 15400 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15410 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 error [ap 15420 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 "c 15440 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 ould not verify 15450 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 15460 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c \""$directory \
15470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15480 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73      "\", all tes
15490 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20  ting halted"]..
154a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
154b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
154c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
154d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
154e0 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20   trying to copy
154f0 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73  any files if ins
15500 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20  tructed...
15510 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
15520 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
15530 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
15540 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
15550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
15560 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
15570 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
15580 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74  ConfigFiles)]} t
15590 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
155a0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
155b0 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c  eName $configFil 155c0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 155d0 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 155e0 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 yBuildFile$file
155f0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
15600 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
15610 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
15620 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
15630 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
15640 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73  qliteNativeFiles
15650 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
15660 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
15670 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
15680 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69  (copySqliteImpli
15690 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
156a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
156b0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
156c0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 156d0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 156e0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 156f0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
15700 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
15710 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
15720 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
15730 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
15740 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
15750 28 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 74 66  (copySqlitePlatf
15760 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ormFiles)] && \.
15770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
15780 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
15790 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 157a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 157b0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 157c0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
157d0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
157f0 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
15800 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
15810 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..
15820 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
15830 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
15840 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
15850 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
15860 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69  (copySqliteArchi
15870 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
15880 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
15890 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
158a0 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74  ength $architect 158b0 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ure] > 0} then { 158c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 158d0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 158e0 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
158f0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
15900 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
15910 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 15920 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 me$architecture
15930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15940 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
15950 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
15960 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
15970 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
15980 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71  ists ::no(copySq
15990 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73  liteManagedFiles
159a0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
159b0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
159c0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61  h fileName $mana 159d0 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a gedFileNames {.. 159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 159f0 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 15a00 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
15a10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
15a20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
15a30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
15a40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
15a50 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72   # NOTE: Skip tr
15a60 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79  ying to load any
15a70 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75   files if instru
15a80 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
15a90 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
15aa0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
15ab0 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46  ::no(loadSqliteF
15ac0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
15ae0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
15af0 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70  no(loadSqliteImp
15b00 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68  licitFiles)]} th
15b10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
15b20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
15b30 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
15b40 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20  SQLite.dll..
15b50 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61            tryLoa
15b60 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d  dAssembly System
15b70 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
15b80 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  q.dll..
15b90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
15ba0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
15bb0 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53  xists ::no(loadS
15bc0 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c  qlitePlatformFil
15bd0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
15be0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
15bf0 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66  ng length $platf 15c00 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b orm] > 0} then { 15c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15c20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 15c30 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 15c40 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d te.dll$platform
15c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
15c70 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
15c80 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
15c90 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65  ArchitectureFile
15ca0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
15cb0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
15cc0 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 15cd0 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 15ce0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 15cf0 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 15d00 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 15d10 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 QLite.dll$archi
15d20 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  tecture..
15d30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
15d40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
15d50 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
15d60 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e  NOTE: Skip tryin
15d70 67 20 74 6f 20 64 65 6c 65 74 65 20 65 78 74 65  g to delete exte
15d80 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 69 6e  rnal files if in
15d90 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
15da0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15db0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
15dc0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
15dd0 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c  qliteExternalFil
15de0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
15df0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
15e00 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43  h fileName $mdaC 15e10 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 15e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15e30 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 15e40 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 le$fileName..
15e50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
15e60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
15e70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15e80 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
15e90 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 65  trying to copy e
15ea0 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66  xternal files if
15eb0 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
15ec0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15ed0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
15ee0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
15ef0 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69  SqliteExternalFi
15f00 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
15f10 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
15f20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
15f30 3a 20 43 6f 70 79 20 74 68 65 20 4d 61 6e 61 67  : Copy the Manag
15f40 65 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73  ed Debugging Ass
15f50 69 73 74 61 6e 74 73 20 28 4d 44 41 29 20 63 6f  istants (MDA) co
15f60 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..
15f70 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
15f80 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61   file for the Ea
15f90 67 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65  gle shell to the
15fa0 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69   build output di
15fb0 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..
15fc0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68        #       wh
15fd0 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 6f  ile using each o
15fe0 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  f the names of t
15ff0 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 63  he various legac
16000 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  y test..
16010 20 20 20 20 23 20 20 20 20 20 20 20 65 78 65 63      #       exec
16020 75 74 61 62 6c 65 73 2e 20 20 54 68 69 73 20 77  utables.  This w
16030 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65  ill help to make
16040 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74   sure that all t
16050 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..
16060 23 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 74  #       legacy t
16070 65 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 78  ests run with ex
16080 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73  actly the same s
16090 65 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20  et of Managed..
160a0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
160b0 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73     Debugging Ass
160c0 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72  istants configur
160d0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...
160e0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
160f0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
16100 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e   $mdaConfigFileN 16110 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 16120 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e tryCopyBin 16130 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 aryFile EagleShe 16140 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 ll.exe.mda.confi 16150 67 20 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a g ""$fileName..
16160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
16170 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
16180 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
16190 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
161a0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 161b0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 161c0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 161d0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 161e0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 73 e version of \"s 161f0 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 qlite3.dll\"... 16200 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 16210 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 16220 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 16230 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d ame sqlite3.dll] 16240 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d ] \n].. } 16250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 16260 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 16270 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
16280 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
16290 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
162a0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
162b0 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65  sion of \"SQLite
162c0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e  .Interop.dll\"..
162d0 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  . " \..
162e0 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69       [file versi
162f0 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  on [getBinaryFil
16300 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74  eName SQLite.Int
16310 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a  erop.dll]] \n]..
16320 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
16330 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
16340 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 16350 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 16360 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 16370 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 16380 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 16390 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \"System.Data.S 163a0 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 QLite.dll\"... " 163b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 163c0 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 [file version 163d0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 163e0 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 me System.Data.S 163f0 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d QLite.dll]] \n]. 16400 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 16410 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 16420 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
16430 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
16440 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
16450 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
16460 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
16470 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  f \"System.Data.
16480 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c  SQLite.Linq.dll\
16490 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20  "... " \..
164a0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65          [file ve
164b0 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79  rsion [getBinary
164c0 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e  FileName System.
164d0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
164e0 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  .dll]] \n]..
164f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
16500 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
16510 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > 16520 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 16530 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 16540 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 16550 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
16560 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16580 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
16590 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66  on of \"" $platf 165a0 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 orm \.. 165b0 20 20 20 20 20 20 20 22 2f 73 71 6c 69 74 65 33 "/sqlite3 165c0 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c .dll\"... " [fil 165d0 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 e version \.. 165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 165f0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 16600 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 70 6c 61 sqlite3.dll$pla
16610 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  tform]] \n]..
16620 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
16630 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
16640 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
16650 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 16660 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16680 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 16690 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 on of \""$platf
166a0 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  orm \..
166b0 20 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e         "/SQLite.
166c0 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e  Interop.dll\"...
166d0 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e   " [file version
166e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
166f0 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69      [getBinaryFi
16700 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e  leName SQLite.In
16710 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c 61 74 66  terop.dll $platf 16720 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 orm]] \n].. 16730 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16740 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 16750 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
16760 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
16770 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
16790 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
167a0 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72   of \"" $platfor 167b0 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 m \.. 167c0 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 "/System.Da 167d0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 167e0 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 .. " [file versi 167f0 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 16800 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 [getBinary 16810 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e FileName System. 16820 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 Data.SQLite.dll 16830 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d$platform]] \n].
16840 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
16850 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16860 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
16870 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74  ength $architect 16880 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ure] > 0} then { 16890 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 168a0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 168b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
168c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
168d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
168e0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
168f0 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
16900 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d  $architecture \. 16910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16920 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 "/sqlite3.dll\" 16930 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 ... " [file vers 16940 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 16950 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 16960 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 yFileName sqlite 16970 33 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 3.dll$architect
16980 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  ure]] \n]..
16990 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
169a0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
169b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $169c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 169d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 169f0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 16a00 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 of \""$archite
16a10 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20  cture \..
16a20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69 74           "/SQLit
16a30 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e  e.Interop.dll\".
16a40 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69  .. " [file versi
16a50 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  on \..
16a60 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79        [getBinary
16a70 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e  FileName SQLite.
16a80 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 61 72 63  Interop.dll $arc 16a90 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d hitecture]] \n]. 16aa0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 16ab0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 16ac0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 16ad0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
16ae0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
16af0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16b00 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
16b10 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61  ersion of \"" $a 16b20 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 rchitecture \.. 16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 16b40 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c /System.Data.SQL 16b50 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b ite.dll\"... " [ 16b60 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16b80 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 16b90 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 me System.Data.S 16ba0 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 QLite.dll$archi
16bb0 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20  tecture]] \n]..
16bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
16bd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
16be0 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 20   set assemblies
16bf0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41  [object invoke A
16c00 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74  ppDomain.Current
16c10 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62  Domain GetAssemb
16c20 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  lies]....
16c30 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
16c40 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62  assembly $assemb 16c50 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 lies {.. 16c60 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 16c70 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 tch \{System.Dat 16c80 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d a.SQLite*$assem
16c90 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bly]} then {..
16ca0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
16cb0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 16cc0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 16ce0 2d 2d 2d 2d 20 66 6f 75 6e 64 20 61 73 73 65 6d ---- found assem 16cf0 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 bly: "$assembly
16d00 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
16d10 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
16d20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
16d30 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
16d40 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 16d50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16d60 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63 "---- define c 16d70 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 53 onstants for \"S 16d80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 16d90 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 e\"... ".... 16da0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 16db0 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 {object invoke 16dc0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 16dd0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 16de0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 16df0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 16e00 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 3 DefineConstant 16e10 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 s} \.. 16e20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f defineCo 16e30 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 nstants] == 0} t 16e40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 16e50 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
16e60 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
16e70 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74  Args [formatList
16e80 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20   [lsort \..
16e90 20 20 20 20 20 20 20 20 20 20 20 24 64 65 66 69             $defi 16ea0 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f neConstants] <no 16eb0 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ne>] \n].. 16ec0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 16ed0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 16ee0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
16ef0 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20  unknown\n..
16f00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
16f10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
16f20 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
16f30 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 16f40 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 16f50 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 "---- sou 16f60 72 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c rce version of \ 16f70 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 16f80 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a ite.dll\"... ".. 16f90 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 16fa0 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 [catch {object i 16fb0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 16fc0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 16fe0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 16ff0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 17000 20 50 72 6f 76 69 64 65 72 56 65 72 73 69 6f 6e ProviderVersion 17010 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } \.. 17020 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 5d 20 version] 17030 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 17040 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 17050 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
17060 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
17070 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
17080 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e     set version n
17090 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..
170a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
170b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 170c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 170d0 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a s$version \n]..
170e0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
170f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
17100 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 17110 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 17120 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 17130 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17140 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 17150 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
17160 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
17180 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f  -- source checko
17190 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44  ut of \"System.D
171a0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22  ata.SQLite.dll\"
171b0 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
171c0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
171d0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
171e0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
171f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17200 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
17210 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
17220 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72  nection Provider
17230 53 6f 75 72 63 65 49 64 7d 20 5c 0d 0a 20 20 20  SourceId} \..
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
17250 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
17260 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
17270 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
17280 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d  ength $sourceId] 17290 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 172b0 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a sourceId null.. 172c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 172d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 172e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
172f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 6f   [appendArgs $so 17300 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 urceId \n].. 17310 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 17320 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 17330 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
17340 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
17350 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
17360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
17370 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
17380 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 69  : Check the avai
17390 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 6e  lable builds (an
173a0 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f 66  d "releases") of
173b0 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20   SQLite and..
173c0 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73       #       Sys
173d0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
173e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
173f0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
17400 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 17410 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 17420 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 17430 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 eReleases$::tes
17440 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
17450 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17460 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20  # NOTE: Now, we
17470 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20  need to know if
17480 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
17490 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c  library is avail
174a0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
174b0 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61        (i.e. beca
174c0 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d  use the managed-
174d0 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  only System.Data
174e0 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79  .SQLite assembly
174f0 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20   can..        #
17500 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f        load witho
17510 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20  ut it; however,
17520 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79  it cannot do any
17530 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74  thing useful wit
17540 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20  hout..        #
17550 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77        it).  If w
17560 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20  e are using the
17570 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
17580 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61  bly and we alrea
17590 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  dy..        #
175a0 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62      found it (ab
175b0 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c  ove), this shoul
175c0 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64  d always succeed
175d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
175e0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
175f0 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a 74  LiteLibrary $::t 17600 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 17610 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 17620 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 17630 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e if the SQLite in 17640 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 terop assembly i 17650 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 s available... 17660 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17670 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 checkForSQLiteI 17680 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 nterop$::test_c
17690 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
176a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
176b0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 53  OTE: Check the S
176c0 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61  QLite database a
176d0 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
176e0 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20  ectories...
176f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
17700 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
17710 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f  ctories $::test_ 17720 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 17730 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 17740 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 17750 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 61 determine if va 17760 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 rious compile-ti 17770 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 me options neede 17780 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 d for.. # 17790 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 73 test cons 177a0 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e 61 traints were ena 177b0 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e bled for the man 177c0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 aged assembly. 177d0 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23 There.. # 177e0 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 20 are some 177f0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 compile-time opt 17800 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 61 ions that must a 17810 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 6e lso have been en 17820 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 23 abled.. # 17830 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 69 for the i 17840 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 17850 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 65 in order to be e 17860 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 74 ffective. For t 17870 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 hose.. # 17880 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 options, i 17890 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 t will be assume 178a0 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65 6e d that it was en 178b0 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e abled for the in 178c0 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 terop.. # 178d0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 assembly 178e0 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 if it was enable 178f0 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 d for the manage 17900 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 d assembly... 17910 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17920 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f foreach defineCo 17930 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a nstant [list \.. 17940 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43 CHEC 17950 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 K_STATE COUNT_HA 17960 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 52 NDLE DEBUG INTER 17970 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 OP_CODEC INTEROP 17980 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 _DEBUG \.. 17990 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 INTEROP_EX 179a0 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e TENSION_FUNCTION 179b0 53 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 S INTEROP_LEGACY 179c0 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c _CLOSE INTEROP_L 179d0 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 OG \.. 179e0 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 INTEROP_TEST_E 179f0 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 XTENSION INTEROP 17a00 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 4e _VIRTUAL_TABLE N 17a10 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d 0a ET_20 NET_35 \.. 17a20 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f NET_ 17a30 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 40 NET_45 NET_45 17a40 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 1 NET_COMPACT_20 17a50 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 PLATFORM_COMPAC 17a60 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 TFRAMEWORK \.. 17a70 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f 41 PRELOA 17a80 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 D_NATIVE_LIBRARY 17a90 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53 51 RETARGETABLE SQ 17aa0 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d LITE_STANDARD \. 17ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48 52 . THR 17ac0 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 OW_ON_DISPOSED T 17ad0 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 RACE TRACE_CONNE 17ae0 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e 44 CTION TRACE_HAND 17af0 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 LE \.. 17b00 20 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 TRACE_PRELOAD 17b10 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52 41 TRACE_SHARED TRA 17b20 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 52 41 CE_STATEMENT TRA 17b30 43 45 5f 57 41 52 4e 49 4e 47 20 5c 0d 0a 20 20 CE_WARNING \.. 17b40 20 20 20 20 20 20 20 20 20 20 54 52 41 43 4b 5f TRACK_ 17b50 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 45 MEMORY_BYTES USE 17b60 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 _INTEROP_DLL USE 17b70 5f 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 _PREPARE_V2 WIND 17b80 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 OWS] {.. 17b90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 17ba0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 17bb0 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 the compile-time 17bc0 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 option is liste 17bd0 64 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 d in the list of 17be0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 17bf0 20 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 "define cons 17c00 74 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 tants" kept trac 17c10 6b 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 k of by the mana 17c20 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 ged assembly... 17c30 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 17c40 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 17c50 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta 17c60 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e nt$::test_chann
17c70 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61  el $defineConsta 17c80 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d nt.. }... 17c90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 17ca0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 17cb0 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 k the current bu 17cc0 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73 69 63 ild year. Basic 17cd0 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 63 ally, this indic 17ce0 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 ates.. # 17cf0 20 20 20 20 20 20 77 68 69 63 68 20 76 65 72 73 which vers 17d00 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 ion of MSBuild a 17d10 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 nd/or Visual Stu 17d20 64 69 6f 20 77 61 73 20 75 73 65 64 20 74 6f 0d dio was used to. 17d30 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 17d40 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 73 compile the ass 17d50 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 embly binaries u 17d60 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 nder test... 17d70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 17d80 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
17d90 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
17da0 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
17db0 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ng for System.Da
17dc0 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20  ta.SQLite build
17dd0 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  year... "....
17de0 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b 67       set year [g
17df0 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20  etBuildYear]..
17e00 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
17e10 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
17e20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61 72  buildYear. $year 17e30 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ].. tputs 17e40 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
17e50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20   [appendArgs \"
17e60 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20  $year \"\n].... 17e70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 17e80 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 17e90 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c the current buil 17ea0 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 17eb0 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f This should no 17ec0 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 rmally.. 17ed0 23 20 20 20 20 20 20 20 62 65 20 65 69 74 68 65 # be eithe 17ee0 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 r "Debug" or "Re 17ef0 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 lease"... 17f00 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 17f10 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
17f20 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
17f30 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
17f40 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
17f50 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e  SQLite build con
17f60 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d  figuration... ".
17f70 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  ...        set c
17f80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65  onfiguration [ge
17f90 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
17fa0 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 64  ion]..        ad
17fb0 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
17fc0 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e  endArgs buildCon
17fd0 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e  figuration. $con 17fe0 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 17ff0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
18000 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
18010 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69  ndArgs \" $confi 18020 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a guration \"\n].. 18030 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 18040 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 # NOTE: Try 18050 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74 to setup an int 18060 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 errupt callback 18070 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70 74 using the script 18080 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20 debugger.. 18090 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that 180a0 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 will cancel all 180b0 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 SQL queries in p 180c0 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 rogress for all 180d0 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 database.. 180e0 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 # connec 180f0 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 tions known to t 18100 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e his interpreter. 18110 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 18120 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 18130 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 exists ::no(sqli 18140 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 teInterruptCallb 18150 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ack)]} then {.. 18160 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44 62 setupDb 18170 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 InterruptCallbac 18180 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 k$::test_channe
18190 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20  l $::test_log.. 181a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 181b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 181c0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for 181d0 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74 the native runt 181e0 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 ime option, whic 181f0 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 h would mean we 18200 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # 18210 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d using the m 18220 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 ixed-mode assemb 18230 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ly... #.. 18240 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 18250 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a RuntimeOption$:
18260 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61  :test_channel na
18270 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tive....
18280 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
18290 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
182a0 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c  test suite shoul
182b0 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62  d count the numb
182c0 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  er of connection
182d0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
182e0 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20     "opened" and
182f0 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68  "closed" from th
18300 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65  e pool when dete
18310 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73  rmining if a tes
18320 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
18330 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 61     passed.  Disa
18340 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 76  bling this behav
18350 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  ior is sometimes
18360 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e   necessary (e.g.
18370 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
18380 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c    during the rel
18390 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f  ease testing pro
183a0 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 68  cess) because th
183b0 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d  ere are several.
183c0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
183d0 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c 79   tests that rely
183e0 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20   on the "opened
183f0 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74  from pool" count
18400 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a   being greater..
18410 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
18420 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73  than zero.  Thes
18430 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c  e tests may fail
18440 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d   due to the non-
18450 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20  deterministic..
18460 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
18470 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43  ehavior of the C
18480 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e  LR GC, even when
18490 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67   there is no bug
184a0 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20   in the code..
184b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
184c0 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20  ing tested...
184d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
184e0 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f  checkForRuntimeO
184f0 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68  ption $::test_ch 18500 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e annel noPoolCoun 18510 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ts.... #. 18520 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 18530 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f Report the reso 18540 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 urce usage prior 18550 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 to running any 18560 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 tests... 18570 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 #.. repor 18580 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 tSQLiteResources 18590 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
185a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
185b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
185c0 68 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 74  how the active t
185d0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  est constraints.
185e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
185f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 18600 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 18610 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e ndArgs "---- con 18620 73 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 straints: " \.. 18630 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d [form 18640 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 atList [lsort [g 18650 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 etConstraints]] 18660 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 <none>] \n].... 18670 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18680 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 # NOTE: Save t 18690 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 he test constrai 186a0 6e 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 nts for use by t 186b0 68 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69 hreads created i 186c0 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 n this.. 186d0 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 # applicat 186e0 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 ion domain. Thi 186f0 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 s is necessary b 18700 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 ecause all the E 18710 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 agle.. # 18720 20 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 "test cont 18730 65 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e ext" information 18740 20 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d is per-thread.. 18750 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 18760 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 18770 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e xists ::test_con 18780 73 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 straints]} then 18790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 187a0 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 ::test_constrai 187b0 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 nts$::eagle_tes
187c0 74 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d  ts(constraints).
187d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
187e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
187f0 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68   # NOTE: Load th
18800 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61  e "after-constra
18810 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72  ints" custom per
18820 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
18830 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23  -host..        #
18840 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74         test sett
18850 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
18860 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
18870 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
18880 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
18890 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 188a0 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a nnel .after].... 188b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 188c0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 188d0 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 when our tests a 188e0 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e ctually began (n 188f0 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ow)... #. 18900 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
18910 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
18920 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
18930 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
18940 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
18950 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61  te tests began a
18960 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
18970 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     [clock format
18980 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
18990 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ] \n]..      }..
189a0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
189b0 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74  oc runSQLiteTest
189c0 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20  Epilogue {} {..
189d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
189e0 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69  NOTE: Skip runni
189f0 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70  ng our custom ep
18a00 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61  ilogue if the ma
18a10 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d  in one has been.
18a20 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
18a30 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23  kipped...      #
18a40 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
18a50 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
18a60 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d  pilogue.eagle)]}
18a70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18a80 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
18a90 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75  TE: Show when ou
18aa0 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79  r tests actually
18ab0 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20   ended (now)...
18ac0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18ad0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 18ae0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 18af0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 18b00 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e "---- System. 18b10 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 Data.SQLite test 18b20 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a s ended at " \.. 18b30 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f [clo 18b40 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b ck format [clock 18b50 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a seconds]] \n].. 18b60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 18b70 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 # BUGFIX: B 18b80 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 efore checking t 18b90 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 he final resourc 18ba0 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c es in use by SQL 18bb0 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 ite, make.. 18bc0 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75 72 # sur 18bd0 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 e both of the PR 18be0 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 AGMA related dir 18bf0 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 ectory names are 18c00 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 freed... 18c10 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 #.. chec 18c20 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect 18c30 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 ories$::test_ch
18c40 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20  annel true....
18c50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18c60 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65   # NOTE: Also re
18c70 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63  port the resourc
18c80 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72 75  e usage after ru
18c90 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e  nning the tests.
18ca0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18cb0 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74       reportSQLit
18cc0 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65  eResources $::te 18cd0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 18ce0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18cf0 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 # NOTE: Report 18d00 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e the critical han 18d10 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 dle counts after 18d20 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 running the tes 18d30 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 18d40 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 getSQLit 18d50 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a eHandleCounts$:
18d60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20  :test_channel..
18d70 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
18d80 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
18d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18dd0 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
18de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18df0 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f  #### END Eagle O
18e00 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
18e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e20 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
18e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e70 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  ###..  }....  #.
18e80 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20  .  # NOTE: Save
18e90 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the
18ea0 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
18eb0 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d  ning this file..
18ec0 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e  .  #..  if {![in
18ed0 66 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e  fo exists common
18ee0 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  _directory]} the
18ef0 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d  n {..    set com
18f00 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66  mon_directory [f
18f10 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66  ile dirname [inf
18f20 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d  o script]]..  }.
18f30 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
18f40 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79  : Provide the Sy
18f50 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
18f60 20 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f   test package to
18f70 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
18f80 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67  ...  #..  packag
18f90 65 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d  e provide System
18fa0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73  .Data.SQLite.Tes
18fb0 74 20 31 2e 30 0d 0a 7d 0d 0a                    t 1.0..}..