System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact a599371f839d0699dd9c5f65c61c0a2b806b892b:

• File Tests/common.eagle — part of check-in [aef2b03cf4] at 2014-01-04 01:36:57 on branch trunk — More work on connection flags handling in the test suite infrastructure. (user: mistachkin size: 102567)

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 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46  c getConnectionF
c650: 6c 61 67 73 20 7b 20 66 6c 61 67 73 20 7b 71 75  lags { flags {qu
c660: 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
c670: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
c680: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20   NOTE: If there
c690: 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28  are any global (
c6a0: 70 65 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f  per test run) co
c6b0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63  nnection flags c
c6c0: 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20  urrently..
c6d0: 23 20 20 20 20 20 20 20 73 65 74 2c 20 75 73 65  #       set, use
c6e0: 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20   them now (i.e.
c6f0: 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65  by combining the
c700: 6d 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20  m with the ones
c710: 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20  for this..
c720: 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  #       connecti
c730: 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  on)...      #..
c740: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
c750: 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69  xists ::connecti
c760: 6f 6e 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a  on_flags] && \..
c770: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
c780: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e  g length $::conn c790: 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 ection_flags] > c7a0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. c7b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # c7c0: 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 NOTE: Show (and c7d0: 6c 6f 67 29 20 74 68 61 74 20 74 68 65 20 6c 6f log) that the lo c7e0: 63 61 6c 20 61 6e 64 20 67 6c 6f 62 61 6c 20 63 cal and global c c7f0: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e onnection flags. c800: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. c810: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
c820: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
c830: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes c840: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen c850: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. c860: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 "---- loc c870: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c al connection fl c880: 61 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 67 ags are: "$flag
c890: 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
c8a0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test c8b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append c8c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. c8d0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 "---- glob c8e0: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c al connection fl c8f0: 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 20 ags detected: " c900: 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c$::connection_fl
c910: 61 67 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ags \n]..
c920: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
c930: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
c940: 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20   Combine and/or
c950: 72 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e  replace the conn
c960: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64  ection flags and
c970: 20 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a   then show the..
c980: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
c990: 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  new value...
c9a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
c9b0: 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e  et flags [combin
c9c0: 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a  eFlags $flags$:
c9d0: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
c9e0: 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  s]....        #.
c9f0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
ca00: 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
ca10: 74 68 65 20 6e 65 77 20 65 66 66 65 63 74 69 76  the new effectiv
ca20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
ca30: 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  gs...        #..
ca40: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu ca50: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. ca60: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
ca70: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
ca80: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
ca90: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
caa0: 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74  combined connect
cab0: 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a 20 22  ion flags are: "
cac0: 20 24 66 6c 61 67 73 20 5c 6e 5d 0d 0a 20 20 20   $flags \n].. cad0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. cae0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return caf0: 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c$flags..    }...
cb00: 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70  ..    proc setup
cb10: 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  Db {..
cb20: 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65    fileName {mode
cb30: 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f   ""} {dateTimeFo
cb40: 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69  rmat ""} {dateTi
cb50: 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67  meKind ""} {flag
cb60: 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20  s ""}..
cb70: 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71     {extra ""} {q
cb80: 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65  ualify true} {de
cb90: 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20  lete true} {uri
cba0: 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20  false}..
cbb0: 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74      {temporary t
cbc0: 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62  rue} {varName db
cbd0: 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  } {quiet false}
cbe0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
cbf0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73      # NOTE: Firs
cc00: 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61  t, see if our ca
cc10: 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74  ller has request
cc20: 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  ed an in-memory
cc30: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20  database...
cc40: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73   #..      set is
cc50: 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79  Memory [isMemory
cc60: 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  Db $fileName]... cc70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. cc80: 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c # NOTE: For now, cc90: 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61 all test databa cca0: 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 ses used by the ccb0: 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20 70 test suite are p ccc0: 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20 laced.. # ccd0: 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61 into the da cce0: 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 tabase directory ccf0: 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73 65 . Each database cd00: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c and related fil cd10: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # cd20: 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73 74 used by a test cd30: 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e should be clean cd40: 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74 65 ed up by that te cd50: 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 st using the.. cd60: 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c 65 # "cle cd70: 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 72 anupDb" procedur cd80: 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 e, below... cd90: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
cda0: 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61  isMemory && $qua cdb0: 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lify} then {.. cdc0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa cdd0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 me [file join [g cde0: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 etDatabaseDirect cdf0: 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 ory] [file tail ce00: 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20$fileName]]..
ce10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
ce20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
ce30: 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74  y default, delet
ce40: 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69  e any pre-existi
ce50: 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68  ng database with
ce60: 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a   the same file..
ce70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
ce80: 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e 74  me if it current
ce90: 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20  ly exists...
cea0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
ceb0: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65  $isMemory &&$de
cec0: 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78  lete && [file ex
ced0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} cee0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. cef0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO cf00: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d cf10: 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 elete any pre-ex cf20: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 isting database cf30: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 with the same fi cf40: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # cf50: 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 name... cf60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if cf70: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d cf80: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
cf90: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
cfa0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
cfb0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
cfc0: 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
cfd0: 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  d to delete the
cfe0: 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79  file, report why
cff0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
d000: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$d010: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. d020: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs d030: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
d040: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d060: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
d070: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
d080: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
d090: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " d0b0: 5c 22 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c \" during setup, d0c0: 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
d0d0: 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
d0e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
d0f0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
d100: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
d110: 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
d120: 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
d130: 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
d140: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
d150: 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
d160: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54        caller.  T
d170: 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65  he handle to the
d180: 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65   opened database
d190: 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored
d1a0: 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
d1b0: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $d1c0: 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... d1d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N d1e0: 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 OTE: Start build d1f0: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti d200: 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 on string. The d210: 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f only required po d220: 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 rtion.. # d230: 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e of the conn d240: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 ection string is d250: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 the data source d260: 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 , which contains d270: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # d280: 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c database fil d290: 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 e name itself. d2a0: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 If our caller wa d2b0: 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 nts to use a URI d2c0: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 as.. # d2d0: 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 the data sour d2e0: 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c ce, use the Full d2f0: 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 Uri connection s d300: 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 tring property t d310: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 o.. # d320: 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 prevent the dat d330: 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 a source string d340: 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c from being mangl d350: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. d360: 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 if {$uri} th
d370: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
d380: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75  t connection {Fu
d390: 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65  llUri=${fileName d3a0: 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }}.. } else d3b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set d3c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 connection {Data d3d0: 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 Source=${fileNa
d3e0: 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  me}}..      }...
d3f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d400: 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68  # NOTE: Since th
d410: 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73  is procedure has
d420: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77   no special know
d430: 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68  ledge of what th
d440: 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20  e default..
d450: 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67   #       setting
d460: 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75   is for the ToFu
d470: 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f  llPath connectio
d480: 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79  n string propery
d490: 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  , always..
d4a0: 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20  #       add the
d4b0: 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62  value we know ab
d4c0: 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  out to the conne
d4d0: 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20  ction string...
d4e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70       #..      ap
d4f0: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
d500: 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71  {;ToFullPath=${q d510: 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 ualify}}.... d520: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d530: 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller d540: 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 specified a jou d550: 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 rnal mode, add t d560: 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 he necessary por d570: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # d580: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 of the conne d590: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 ction string now d5a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d5b0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le d5c0: 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d ngth$mode] > 0}
d5d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d5e0: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
d5f0: 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64  on {;Journal Mod
d600: 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20  e=${mode}}.. d610: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. d620: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If d630: 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 our caller spec d640: 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 ified a DateTime d650: 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 format, add the d660: 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 necessary.. d670: 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f # portio d680: 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 n of the connect d690: 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d ion string now.. d6a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d6b0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng d6c0: 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d th$dateTimeForm
d6d0: 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  at] > 0} then {.
d6e0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
d6f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74  connection {;Dat
d700: 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61  eTimeFormat=${da d710: 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a teTimeFormat}}.. d720: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... d730: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE d740: 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 : If our caller d750: 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 specified a Date d760: 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 TimeKind, add th d770: 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 e necessary port d780: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # d790: 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 of the connec d7a0: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e tion string now. d7b0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. d7c0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len d7d0: 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e gth$dateTimeKin
d7e0: 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  d] > 0} then {..
d7f0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
d800: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65  onnection {;Date
d810: 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54  TimeKind=${dateT d820: 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 imeKind}}.. d830: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. d840: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 # NOTE: Fig d850: 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 ure out what the d860: 20 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 final flags for d870: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e this connection d880: 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 need to be... d890: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set d8a0: 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 flags [getConne d8b0: 63 74 69 6f 6e 46 6c 61 67 73 20 24 66 6c 61 67 ctionFlags$flag
d8c0: 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20  s $quiet].... d8d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO d8e0: 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 TE: If our calle d8f0: 72 20 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65 r specified some d900: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f SQLiteConnectio d910: 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d nFlags, add the. d920: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e . # n d930: 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e ecessary portion d940: 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 of the connecti d950: 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a on string now... d960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i d970: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt d980: 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 h$flags] > 0} t
d990: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
d9a0: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
d9b0: 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73   {;Flags=${flags d9c0: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... d9d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # d9e0: 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c NOTE: If our cal d9f0: 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 6e ler specified an da00: 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74 extra payload t da10: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e o the connection da20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # da30: 73 74 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 string, append i da40: 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d t now... #. da50: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri da60: 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61 ng length$extra
da70: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
da80: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
da90: 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74  nnection \; $ext daa0: 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ra.. }.... dab0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # dac0: 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 NOTE: Open the d dad0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti dae0: 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 on now, placing daf0: 74 68 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c the opaque handl db00: 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 e value.. # db10: 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 into the db20: 76 61 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 variable specifi db30: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller db40: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. db50: 20 20 73 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 set db [sql op db60: 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 74 65 20 en -type SQLite db70: 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 [subst$connecti
db80: 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  on]]....      #.
db90: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
dba0: 6f 6e 66 69 67 75 72 65 20 74 68 65 20 74 65 6d  onfigure the tem
dbb0: 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79  porary directory
dbc0: 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f   for the newly o
dbd0: 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 0d 0a  pened database..
dbe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
dbf0: 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c  nnection now unl
dc00: 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66  ess our caller f
dc10: 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20  orbids it...
dc20: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$dc30: 74 65 6d 70 6f 72 61 72 79 20 26 26 20 21 5b 69 temporary && ![i dc40: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( dc50: 73 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 setTemporaryDire dc60: 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d ctory)]} then {. dc70: 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 . sql exe dc80: 63 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 cute$db [append
dc90: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
dca0: 20 20 20 20 22 50 52 41 47 4d 41 20 74 65 6d 70      "PRAGMA temp
dcb0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
dcc0: 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f   = \"" [getTempo
dcd0: 72 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5c  raryDirectory] \
dce0: 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  "\;]..      }...
dcf0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
dd00: 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 72  # NOTE: Always r
dd10: 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63  eturn the connec
dd20: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e  tion handle upon
dd30: 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20   success...
dd40: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
dd50: 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a   $db.. }..... dd60: 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 43 6f proc getDbCo dd70: 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e nnection { {varN dd80: 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 ame db} } {.. dd90: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO dda0: 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the ddb0: 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia ddc0: 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") ddd0: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o dde0: 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # ddf0: 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 caller. Th de00: 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 e handle to the de10: 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 database previou de20: 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 sly opened via t de30: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # de40: 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 [setupDb] proc de50: 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 edure should be de60: 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 stored there... de70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 #.. up de80: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 var 1$varName d
de90: 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  b....      #..
dea0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
deb0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 41 44 4f   returns the ADO
dec0: 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63 74 69  .NET IDbConnecti
ded0: 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  on object instan
dee0: 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ce for the..
def0: 20 20 23 20 20 20 20 20 20 20 73 70 65 63 69 66    #       specif
df00: 69 65 64 20 64 61 74 61 62 73 65 20 68 61 6e 64  ied databse hand
df10: 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 74 74 69  le.  Since getti
df20: 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 74 20 72  ng this object r
df30: 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20  elies upon..
df40: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 20    #       Eagle
df50: 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65 61 74  internals, great
df60: 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20   care should be
df70: 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64 20 64  taken to avoid d
df80: 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20  isposing of..
df90: 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20     #       this
dfa0: 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 65 72 77  object or otherw
dfb0: 69 73 65 20 70 75 74 74 69 6e 67 20 69 74 20 69  ise putting it i
dfc0: 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64 20 73  nto an invalid s
dfd0: 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  tate...      #..
dfe0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
dff0: 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e  exists db]} then
e000: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
e010: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
e020: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
e030: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
e040: 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63  NonPublic -objec
e050: 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73  tflags +NoDispos
e060: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
e070: 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 74 65       -alias Inte
e080: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
e090: 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74  e.connections It
e0a0: 65 6d 20 24 64 62 7d 20 5c 0d 0a 20 20 20 20 20  em $db} \.. e0b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c resul e0c0: 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. e0d0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. e0e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: e0f0: 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e 20 Success, return e100: 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 the opaque objec e110: 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 t handle... e120: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e130: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
e140: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
e150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
e160: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
e170: 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70 6f  E: Failure, repo
e180: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
e190: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e1a0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch e1b0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg e1c0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. e1d0: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING e1e0: 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 : failed to get e1f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl e200: 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 5c e for database \ e210: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. e220: 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72 72$db "\", err
e230: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75  or: " \n\t $resu e240: 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. e250: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. e260: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 }..... proc f e270: 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 reeDbConnection e280: 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 { {varName conne e290: 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 ction} } {.. e2a0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT e2b0: 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the e2c0: 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab e2d0: 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 le (e.g. "connec e2e0: 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 tion") in the.. e2f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con e300: 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c text of our call e310: 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20 er. The opaque e320: 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f object handle fo e330: 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 r an ADO.NET.. e340: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e # conn e350: 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c ection previousl e360: 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 y returned by [g e370: 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 etDbConnection] e380: 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 should be.. e390: 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 64 20 # stored e3a0: 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d there... #. e3b0: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
e3c0: 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69  varName connecti
e3d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  on....      #..
e3e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
e3f0: 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74  empt to remove t
e400: 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  he opaque object
e410: 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65   handle from the
e420: 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20   interpreter..
e430: 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e      #       now.
e440: 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64    This [object d
e450: 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c  ispose] call wil
e460: 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64  l not actually d
e470: 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20  ispose of the..
e480: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 64       #       und
e490: 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62  erlying object b
e4a0: 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69  ecause the +NoDi
e4b0: 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73  spose flag was s
e4c0: 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20  et on it..
e4d0: 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 63  #       during c
e4e0: 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  reation of the o
e4f0: 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
e500: 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  dle...      #..
e510: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
e520: 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e  xists connection
e530: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
e540: 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74    [catch {object
e550: 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63   dispose $connec e560: 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 tion} error]} th e570: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. e580: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: e590: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail e5a0: 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 ed to remove the e5b0: 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 handle, report e5c0: 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d why... #. e5d0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
e5e0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
e5f0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
e600: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
e610: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
e620: 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63  to remove connec
e630: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20  tion handle \""
e640: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20  $connection \.. e650: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", e660: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
e670: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
e680: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
e690: 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65   proc addDbConne
e6a0: 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69  ction { connecti
e6b0: 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20  on {varName db}
e6c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
e6d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
e6e0: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
e6f0: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
e700: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
e710: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
e720: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
e730: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
e740: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va e750: 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... e760: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT e770: 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 E: Create a corr e780: 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 ectly formatted e790: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 name for the dat e7a0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e abase connection e7b0: 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 to.. # e7c0: 20 20 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 be added to t e7d0: 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 he list managed e7e0: 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 by the Eagle int e7f0: 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... e800: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 #.. set db e810: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke e820: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli e830: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45 c \.. E e840: 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 agle._Components e850: 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f .Private.FormatO e860: 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63 ps DatabaseObjec e870: 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f tName$connectio
e880: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53  n \..          S
e890: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection
e8a0: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
e8b0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
e8c0: 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d  tive NextId]]...
e8d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
e8e0: 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  # NOTE: Add the
e8f0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e900: 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20  ion provided by
e910: 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68  our caller to th
e920: 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20  e list..      #
e930: 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b        of those k
e940: 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c  nown to the Eagl
e950: 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
e960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f        #..      o
e970: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
e980: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49  ags +NonPublic I
e990: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
e9a0: 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  tive.connections
e9b0: 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20   Add \..
e9c0: 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f    $db$connectio
e9d0: 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  n..    }.....
e9e0: 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20   proc cleanupDb
e9f0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e  { fileName {varN
ea00: 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74  ame db} {collect
ea10: 20 74 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20   true} {qualify
ea20: 74 72 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20  true}..
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c              {del
ea40: 65 74 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ete true} } {..
ea50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
ea60: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
ea70: 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69   force all pendi
ea80: 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a  ng "garbage" obj
ea90: 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65  ects to be colle
eaa0: 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20  cted,..      #
eab0: 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53       including S
eac0: 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  QLite statements
ead0: 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65   and backup obje
eae0: 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64  cts; this should
eaf0: 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20   allow..      #
eb00: 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c        the underl
eb10: 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ying database fi
eb20: 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  le to be deleted
eb30: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
eb40: 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20    if {$collect} eb50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. eb60: 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 collectGarbage$
eb70: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
eb80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
eb90: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
eba0: 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
ebb0: 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
ebc0: 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
ebd0: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
ebe0: 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
ebf0: 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20     caller.  The
ec00: 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61  handle to the da
ec10: 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c  tabase previousl
ec20: 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  y opened via the
ec30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
ec40: 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64  [setupDb] proced
ec50: 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74  ure should be st
ec60: 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
ec70: 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
ec80: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d  r 1 $varName db. ec90: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. eca0: 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 # NOTE: Close ecb0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 the connection t ecc0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e o the database n ecd0: 6f 77 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 ow. This should ece0: 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 allow us.. ecf0: 20 23 20 20 20 20 20 20 20 74 6f 20 64 65 6c 65 # to dele ed00: 74 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e te the underlyin ed10: 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e g database file. ed20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ed30: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist ed40: 73 20 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 s db] && [catch ed50: 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 {sql close$db}
ed60: 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
ed70: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
ed80: 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
ed90: 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
eda0: 63 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61  close the databa
edb0: 73 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d  se, report why..
edc0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
edd0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes ede0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen edf0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. ee00: 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI ee10: 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c NG: failed to cl ee20: 6f 73 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 ose database \"" ee30: 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a$db "\", error:
ee40: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
ee50: 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e    \n\t $error \n ee60: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... ee70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N ee80: 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see ee90: 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 if our caller ha eea0: 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i eeb0: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas eec0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. eed0: 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory eee0: 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
eef0: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
ef00: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
ef10: 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20   Build the full
ef20: 70 61 74 68 20 74 6f 20 74 68 65 20 64 61 74 61  path to the data
ef30: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20  base file name.
ef40: 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
ef50: 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  st..      #
ef60: 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73    database files
ef70: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
ef80: 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  he temporary dir
ef90: 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23  ectory...      #
efa0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73  ..      if {!$is efb0: 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 Memory &&$quali
efc0: 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  fy} then {..
efd0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
efe0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
eff0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
f000: 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  y] [file tail $f f010: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 ileName]].. f020: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. f030: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che f040: 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 ck if the file s f050: 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 till exists... f060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if f070: 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 {!$isMemory && $f080: 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 delete && [file f090: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
f0a0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
f0b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
f0c0: 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74  NOTE: Skip delet
f0d0: 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c  ing database fil
f0e0: 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73  es if somebody s
f0f0: 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ets the global..
f100: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
f110: 76 61 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76  variable to prev
f120: 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  ent it...
f130: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
f140: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
f150: 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65  no(cleanupDbFile
f160: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
f170: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f180: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
f190: 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  pt to delete the
f1a0: 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20 66   test database f
f1b0: 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ile now...
f1c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
f1d0: 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b   if {[set code [
f1e0: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
f1f0: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72  te $fileName} er f200: 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ror]]} then {.. f210: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. f220: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE f230: 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai f240: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 led to delete th f250: 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 e file, report w f260: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 hy... f270: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. f280: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
f290: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
f2a0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
f2b0: 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
f2c0: 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65  NG: failed to de
f2d0: 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69  lete database fi
f2e0: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName f2f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f300: 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c f310: 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 leanup, error: " f320: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
f330: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
f340: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
f350: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
f360: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
f370: 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69  Show that we ski
f380: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68  pped deleting th
f390: 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  e file...
f3a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f3b0: 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20  set code 0....
f3c0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: f3d0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a f3e0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. f3f0: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== f400: 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 WARNING: skippe f410: 64 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 d deleting datab f420: 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ase file \""$fi
f430: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
f440: 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
f450: 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a  ng cleanup\n"]..
f460: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
f470: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
f480: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
f490: 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64  NOTE: The file d
f4a0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73  oes not exist, s
f4b0: 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20  uccess!..
f4c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
f4d0: 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d  code 0..      }.
f4e0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
f4f0: 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  $code.. }.... f500: 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 . proc setupD f510: 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 bInterruptCallba f520: 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 ck { channel log f530: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput f540: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
f550: 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 62 75   setting up debu
f560: 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 20 63  gger interrupt c
f570: 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a  allback... "....
f580: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
f590: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
f5a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
f5b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 72  ake sure the scr
f5c0: 69 70 74 20 64 65 62 75 67 67 65 72 20 61 6e 64  ipt debugger and
f5d0: 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
f5e0: 74 65 72 70 72 65 74 65 72 20 61 72 65 0d 0a 20  terpreter are..
f5f0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
f600: 65 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 66  etup and ready f
f610: 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  or use...
f620: 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75   #..        debu
f630: 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75  g setup true tru
f640: 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e....        #..
f650: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
f660: 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 73 73 61  Load the necessa
f670: 72 79 20 70 61 63 6b 61 67 65 73 20 69 6e 74 6f  ry packages into
f680: 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
f690: 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
f6a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64      #..        d
f6b0: 65 62 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20  ebug eval {..
f6c0: 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72         package r
f6d0: 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20  equire Eagle..
f6e0: 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20          package
f6f0: 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c 69  require Eagle.Li
f700: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20  brary..
f710: 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65   package require
f720: 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20   Eagle.Test..
f730: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
f740: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
f750: 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 6e 65  OTE: Copy the ne
f760: 63 65 73 73 61 72 79 20 76 61 72 69 61 62 6c 65  cessary variable
f770: 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61  s into the isola
f780: 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e  ted interpreter.
f790: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f7a0: 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b       debug invok
f7b0: 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63  e 0 set ::test_c
f7c0: 68 61 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b  hannel $channel; f7d0: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 # NOTE: For [tp f7e0: 75 74 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 64 uts]... d f7f0: 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 ebug invoke 0 se f800: 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f t ::test_log$lo
f810: 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b  g; # NOTE: For [
f820: 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20  tlog].....
f830: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
f840: 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65  OTE: Install the
f850: 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74   callback script
f860: 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64   to be evaluated
f870: 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64   in the isolated
f880: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
f890: 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68    interpreter wh
f8a0: 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  en this interpre
f8b0: 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74  ter is interrupt
f8c0: 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20  ed by script..
f8d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
f8e0: 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e  ncellation, etc.
f8f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f900: 20 20 20 20 20 64 65 62 75 67 20 63 61 6c 6c 62       debug callb
f910: 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64  ack apply {{send
f920: 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20  er e} {..
f930: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f940: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
f950: 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 69   this callback i
f960: 73 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61  s one that we ca
f970: 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20  re about...
f980: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f990: 20 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22    if {"Canceled"
f9a0: 20 69 6e 20 5b 73 70 6c 69 74 20 5b 24 65 20 49   in [split [$e I f9b0: 6e 74 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c nterruptType] ", f9c0: 20 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 "]} then {.. f9d0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f9e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: f9f0: 49 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 Iterate through fa00: 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e all database con fa10: 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 nections known t fa20: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 o the.. fa30: 20 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e # paren fa40: 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a t interpreter... fa50: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. fa60: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec fa70: 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias fa80: 20 70 61 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 pair \.. fa90: 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 [object faa0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + fab0: 4e 6f 6e 50 75 62 6c 69 63 20 24 65 20 49 6e 74 NonPublic$e Int
fac0: 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74  erpreter.connect
fad0: 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ions] {..
fae0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
faf0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
fb00: 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e 63 65  Attempt to cance
fb10: 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72 69 65  l any SQL querie
fb20: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 6f 6e  s in progress on
fb30: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20   this..
fb40: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
fb50: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
fb60: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
fb70: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
fb80: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70    if {[catch {$p fb90: 61 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c air Value.Cancel fba0: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { fbb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. fbc0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
fbd0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
fbe0: 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20  rgs \n \..
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
fc00: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
fc10: 6c 65 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 75  led to cancel qu
fc20: 65 72 79 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69  ery for connecti
fc30: 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  on \"" \..
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24                [$fc50: 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 pair Key] "\", e fc60: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
fc70: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
fc80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
fc90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
fca0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 7d     }..        }}
fcb0: 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d  ..      } error]
fcc0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
fcd0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
fce0: 61 69 6e 74 20 69 6e 74 65 72 72 75 70 74 43 61  aint interruptCa
fcf0: 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65 33 0d 0a  llback.sqlite3..
fd00: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
fd10: 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. fd20: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. fd30: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
fd40: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
fd50: 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 22  gs "no, error: "
fd60: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] fd70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } fd80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c ..... proc cl fd90: 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 69 6c 65 eanupFile { file fda0: 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 20 74 72 Name {collect tr fdb0: 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 ue} {force false fdc0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. fdd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At fde0: 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 tempt to force a fdf0: 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 ll pending "garb fe00: 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 age" objects to fe10: 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 be collected,.. fe20: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 # inc fe30: 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 luding SQLite st fe40: 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 atements and bac fe50: 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 kup objects; thi fe60: 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a s should allow.. fe70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th fe80: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 e underlying dat fe90: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 abase file to be fea0: 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 deleted... feb0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 #.. if {$c
fec0: 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a  ollect} then {..
fed0: 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47          collectG
fee0: 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63  arbage $::test_c fef0: 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d hannel.. }. ff00: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ff10: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check ff20: 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c if the file stil ff30: 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 l exists... ff40: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 #.. if {[f ff50: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
ff60: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
ff70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
ff80: 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64    # NOTE: Skip d
ff90: 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c  eleting test fil
ffa0: 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73  es if somebody s
ffb0: 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  ets the global v
ffc0: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ariable..
ffd0: 20 23 20 20 20 20 20 20 20 74 6f 20 70 72 65 76   #       to prev
ffe0: 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  ent it...
fff0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
10000 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f  $force || ![info 10010 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 exists ::no(cle 10020 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68 65 6e anupFile)]} then 10030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 10040 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 10050 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de 10060 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 66 69 lete the test fi 10070 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 le now... 10080 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 10090 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 if {[set code [c 100a0 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 100b0 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 e$fileName} err
100c0 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  or]]} then {..
100d0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
100e0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
100f0 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
10100 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  ed to delete the
10110 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68   file, report wh
10120 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y...
10130 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  #..            t
10140 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 10150 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10160 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10170 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 10180 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c G: failed to del 10190 65 74 65 20 74 65 73 74 20 66 69 6c 65 20 5c 22 ete test file \" 101a0 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
101c0 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75  \" during cleanu
101d0 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  p, error: " \n\t
101e0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 101f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10200 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 10210 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10220 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 10230 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 that we skipped 10240 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c deleting the fil 10250 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d e... #. 10260 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 . set c 10270 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 ode 0.... 10280 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
10290 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
102a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
102b0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
102c0 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c  ING: skipped del
102d0 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 20  eting test file
102e0 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. 102f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 10300 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 \" during cleanu 10310 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d p\n"].. } 10320 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 10330 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10340 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The 10350 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 file does not e 10360 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a xist, success!.. 10370 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10380 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 set code 0.. 10390 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 103a0 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 return$code..
103b0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
103c0 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20   collectGarbage
103d0 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69  { channel {milli
103e0 73 65 63 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71  seconds 1000} {q
103f0 75 69 65 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a  uiet true} } {..
10400 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
10410 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
10420 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
10430 79 20 66 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d  y false} result]
10440 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
10450 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 10460 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 10470 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
10480 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
10490 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
104a0 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69    "---- memory i
104b0 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52  n use by the CLR
104c0 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69   before collecti
104d0 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20  on... " \..
104e0 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74           $result 104f0 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 10500 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 10510 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10520 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10530 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
10540 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
10550 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
10560 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f   to get CLR memo
10570 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a  ry usage, error:
10580 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
10590 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c    \n\t $result \ 105a0 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 n].. }.... 105b0 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 ########### 105c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 105d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 105e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 105f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a ##############.. 10600 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 10610 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 # NOTE: Repeate 10620 64 6c 79 20 61 74 74 65 6d 70 74 20 74 6f 20 63 dly attempt to c 10630 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 20 75 ollect garbage u 10640 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 ntil the allotte 10650 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 d number.. 10660 23 20 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 # of milli 10670 73 65 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 seconds has elap 10680 73 65 64 2e 20 20 41 6c 77 61 79 73 20 61 74 74 sed. Always att 10690 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 empt to collect 106a0 67 61 72 62 61 67 65 0d 0a 20 20 20 20 20 20 23 garbage.. # 106b0 20 20 20 20 20 20 20 61 74 20 6c 65 61 73 74 20 at least 106c0 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a once... #.. 106d0 20 20 20 20 20 20 73 65 74 20 73 74 61 72 74 20 set start 106e0 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d [clock seconds]. 106f0 0a 20 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 . set stop 10700 5b 65 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 [expr {$start +
10710 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f  ($milliseconds / 10720 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 1000)}].... 10730 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 do {.. 10740 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10750 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 10760 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 rce a full garba 10770 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f ge collection no 10780 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a w. Report any.. 10790 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 107a0 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65 6e error that is en 107b0 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65 20 countered if we 107c0 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 fail... # 107d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 107e0 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 atch {object inv 107f0 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM 10800 65 6d 6f 72 79 20 74 72 75 65 7d 20 65 72 72 6f emory true} erro 10810 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 10820 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
10830 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
10840 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10850 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
10860 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72   failed full gar
10870 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c  bage collection,
10880 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
10890 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
108a0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 108b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 108c0 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 set now [clock 108d0 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 seconds].. 108e0 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74 20 } while {$start
108f0 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 20  <= $now &&$now
10900 3c 20 24 73 74 6f 70 7d 0d 0a 0d 0a 20 20 20 20  < $stop}.... 10910 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 10920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10950 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 ###########.... 10960 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 10970 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 {object invoke G 10980 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 C GetTotalMemory 10990 20 66 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 false} result] 109a0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 109b0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
109c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
109d0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 109e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 109f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10a00 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e "---- memory in 10a10 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 use by the CLR 10a20 61 66 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e after collection 10a30 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ... " \.. 10a40 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22$result "
10a50 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
10a60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
10a70 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
10a80 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 10a90 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 10aa0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 10ab0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 10ac0 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 o get CLR memory 10ad0 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 usage, error: " 10ae0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10af0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
10b00 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
10b10 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
10b20 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75  tSQLiteHandleCou
10b30 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71  nts { channel {q
10b40 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
10b50 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
10b60 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20  t [list]....
10b70 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74    if {[haveConst
10b80 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20  raint \..
10b90 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e         defineCon
10ba0 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
10bb0 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e 54 5f 48  a.SQLite.COUNT_H
10bc0 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ANDLE]} then {..
10bd0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10be0 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65     # NOTE: Add e
10bf0 61 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 6e  ach critical han
10c00 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 65  dle count to the
10c10 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e   resulting list.
10c20 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10c30 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d       foreach nam
10c40 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 63 74 69  e [list connecti
10c50 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e  onCount statemen
10c60 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75  tCount backupCou
10c70 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  nt] {..
10c80 20 73 65 74 20 76 61 6c 75 65 20 5b 6f 62 6a 65   set value [obje
10c90 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
10ca0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
10cc0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
10cd0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10ce0 6f 64 73 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20  ods $name].... 10cf0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
10d00 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
10d10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $10d20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 10d30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 10d40 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 "---- cri 10d50 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 10d60 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 nt \""$name "\"
10d70 20 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d   is " $value \n] 10d80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 10d90 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 . lappe 10da0 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c 75 65 nd result$value
10db0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
10dc0 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71     } elseif {!$q 10dd0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 10de0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10df0 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 # NOTE: The act 10e00 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 ual handle count 10e10 73 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 s are not availa 10e20 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 ble; therefore, 10e30 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 just.. # 10e40 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 return an 10e50 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 empty list... 10e60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10e70 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
10e80 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61  ---- critical ha
10e90 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76  ndle counts unav
10ea0 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20  ailable\n"..
10eb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
10ec0 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 10ed0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 10ee0 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b shutdownSQLite { 10ef0 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 channel {force 10f00 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 false} {quiet fa 10f10 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 10f20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 10f30 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 Make sure that 10f40 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 10f50 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c ary is completel 10f60 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 y shutdown. Thi 10f70 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 10f80 20 69 73 20 75 73 65 64 20 62 79 20 74 65 73 74 is used by test 10f90 73 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f s that change co 10fa0 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 nfiguration opti 10fb0 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 ons and/or those 10fc0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 10fd0 74 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b that need to mak 10fe0 65 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 e sure logging i 10ff0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 s initialized (i 11000 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 .e. just in case 11010 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11020 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core 11030 6c 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 library was init 11040 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 ialized in the p 11050 72 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d rocess prior to. 11060 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 11070 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 he SQLiteLog cla 11080 73 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f ss being able to 11090 20 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 setup its loggi 110a0 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 ng callback)... 110b0 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 # Nor 110c0 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 mally, this shou 110d0 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f ld only be perfo 110e0 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 rmed if SQLite i 110f0 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 s loaded and.. 11100 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61 64 # read 11110 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 y for use by the 11120 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 11130 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 11140 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 {$force || [isSQ
11150 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e  LiteReady]} then
11160 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
11170 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a         # BUGFIX:
11180 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20   Before calling
11190 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 64  the native shutd
111a0 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61  own function, ma
111b0 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20  ke sure both..
111c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
111d0 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65  of the PRAGMA re
111e0 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20  lated directory
111f0 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e  names are freed.
11200 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
11210 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
11220 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24  iteDirectories $11230 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a channel true.... 11240 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 11250 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok 11260 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 11270 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 11280 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 11290 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 112a0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d NativeMethods \. 112b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 112c0 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 112d0 6e 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d n} result] == 0} 112e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 112f0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11300 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11310 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 11320 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 11330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 11340 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c "---- call sql 11350 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e ite3_shutdown(). 11360 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 .. ok: "$result
11370 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
11380 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
11390 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  e {..          i
113a0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 113b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 113c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
113d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
113f0 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  --- call sqlite3
11400 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65  _shutdown()... e
11410 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 11420 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 11430 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 11440 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 11450 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 ..... proc re 11460 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 portSQLiteResour 11470 63 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 ces { channel {q 11480 75 69 65 74 20 66 61 6c 73 65 7d 20 7b 63 6f 6c uiet false} {col 11490 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a lect true} } {.. 114a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 114b0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 NOTE: Skip all 114c0 6f 75 74 70 75 74 20 69 66 20 77 65 20 61 72 65 output if we are 114d0 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 71 75 69 running in "qui 114e0 65 74 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 et" mode... 114f0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 #.. if {[h 11500 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d aveConstraint \. 11510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 . d 11520 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 efineConstant.Sy 11530 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 11540 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c .INTEROP_VIRTUAL 11550 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 _TABLE] && \.. 11560 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e [haveCon 11570 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 straint \.. 11580 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 defineC 11590 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 onstant.System.D 115a0 61 74 61 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b ata.SQLite.TRACK 115b0 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 _MEMORY_BYTES]} 115c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 115d0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
115e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
115f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 11600 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f --- current memo 11610 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c ry in use by SQL 11620 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a iteMemory... ".. 11630 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 11640 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 11650 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d {object invoke - 11660 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 11670 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11680 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 11690 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d SQLite.SQLiteMem 116a0 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 116b0 20 20 20 20 20 20 20 62 79 74 65 73 41 6c 6c 6f bytesAllo 116c0 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d cated} memory] = 116d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 116e0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
116f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
11700 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 11710 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 11720 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
11730 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
11740 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
11750 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
11760 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
11770 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  own....
11780 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 11790 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 117a0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
117b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 117c0 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 117d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 117e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 117f0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
11800 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
11810 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 11820 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 maximum memory i 11830 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d n use by SQLiteM 11840 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 emory... ".. 11850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 11860 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj 11870 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 11880 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 118a0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 118b0 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 te.SQLiteMemory 118c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 118d0 20 20 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 maximumBytesA 118e0 6c 6c 6f 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 llocated} memory 118f0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 11900 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
11910 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
11920 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
11930 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 11940 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 dArgs$memory "
11950 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  bytes\n"]..
11960 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
11970 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
11980 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75      set memory u
11990 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20  nknown....
119a0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 119b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 119c0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
119d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
119e0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 119f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 11a00 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 11a10 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
11a20 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
11a30 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11a40 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 l "---- current 11a50 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 memory in use by 11a60 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 SQLite... ".. 11a70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 11a80 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 11a90 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 11aa0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 11ab0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 11ac0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 11ad0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 11ae0 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ds \.. 11af0 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f sqlite3_memo 11b00 72 79 5f 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d ry_used} memory] 11b10 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 11b20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
11b30 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
11b40 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 11b50 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 11b60 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
11b70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
11b80 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
11b90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
11ba0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62      # NOTE: Mayb
11bb0 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  e the SQLite cor
11bc0 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61  e library is una
11bd0 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20  vailable?..
11be0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
11bf0 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
11c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
11c10 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 11c20 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 11c30 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
11c40 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 11c50 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 11c60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 }.... s 11c70 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 et result$memor
11c80 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72  y; # NOTE: Retur
11c90 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20  n memory in-use
11ca0 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  to our caller...
11cb0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 11cc0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 11cd0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
11ce0 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75  nel "---- maximu
11cf0 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  m memory in use
11d00 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a  by SQLite... "..
11d10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
11d20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a   if {[catch {obj
11d30 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
11d40 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
11d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
11d60 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
11d70 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
11d80 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..
11d90 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65        sqlite3_me
11da0 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30  mory_highwater 0
11db0 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20  } memory] == 0}
11dc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11dd0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 11de0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 11df0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
11e00 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 11e10 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 y " bytes\n"].. 11e20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 11e30 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 11e40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 11e50 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 OTE: Maybe the S 11e60 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 11e70 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c ry is unavailabl 11e80 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e?.. #.. 11e90 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 11ea0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 11eb0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
11ec0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11ed0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 11ee0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
11ef0 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
11f00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
11f10 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c  ..      if {$col 11f20 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lect} then {.. 11f30 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 collectGar 11f40 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 bage$channel..
11f50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
11f60 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 11f70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 11f80 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
11f90 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79  - current memory
11fa0 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43   in use by the C
11fb0 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d  LR... "..      }
11fc0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
11fd0 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76  atch {object inv
11fe0 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d  oke GC GetTotalM
11ff0 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d  emory false} mem
12000 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
12010 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
12020 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65  string is intege
12030 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72  r -strict $memor 12040 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 12050 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
12060 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
12070 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 12080 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 12090 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
120a0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
120b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
120c0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
120d0 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c  set memory inval
120e0 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  id....
120f0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 12100 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 12110 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
12120 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 12130 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 12140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 12150 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 12160 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d . set mem 12170 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 12180 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
12190 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
121a0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 121b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 121c0 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
121d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
121e0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
121f0 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 12200 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che 12210 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 12220 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c tories { channel 12230 20 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d {reset false} } 12240 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 12250 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 12260 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f if the sqlite3_ 12270 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 12280 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 ory function is 12290 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... 122a0 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 122b0 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20$channel \..
122c0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
122d0 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69  cking for functi
122e0 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  on sqlite3_win32
122f0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e  _set_directory..
12300 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  . "....      #..
12310 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
12320 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73  is call to the s
12330 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
12340 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
12350 69 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20  ion uses the..
12360 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61      #       inva
12370 6c 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20  lid value 0 for
12380 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
12390 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69  nt.  This code i
123a0 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20  s designed..
123b0 20 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65    #       to che
123c0 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68  ck if calling th
123d0 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  e function will
123e0 72 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69  raise an excepti
123f0 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20  on (i.e...
12400 23 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75  #       the actu
12410 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  al result of the
12420 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e   function does n
12430 6f 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e  ot matter as lon
12440 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23  g as no..      #
12450 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
12460 20 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20   is changed)...
12470 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
12480 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
12490 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
124a0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
124b0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
124c0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
124d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
124e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
124f0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
12500 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32     sqlite3_win32
12510 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30  _set_directory 0
12520 20 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68   null}] == 0} th
12530 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
12540 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
12550 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c   Calling the sql
12560 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
12570 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
12580 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20  n does not..
12590 20 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73      #       caus
125a0 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20  e an exception;
125b0 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75  therefore, it mu
125c0 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20  st be available
125d0 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  (i.e...        #
125e0 20 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75         even thou
125f0 67 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74  gh it should ret
12600 75 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65  urn a failure re
12610 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69  turn code in thi
12620 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
12630 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20     case)...
12640 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
12650 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69  dConstraint sqli
12660 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
12670 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20  rectory....
12680 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 12690 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 l yes\n.... 126a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 126b0 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 NOTE: Does our c 126c0 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 aller want to re 126d0 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 set the director 126e0 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d ies?.. #. 126f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 . if {$re
12700 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  set} then {..
12710 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12720 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20      # NOTE: Now
12730 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  make sure the da
12740 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
12750 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73  rary directories
12760 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20   are..
12770 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68  #       reset th
12780 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
12790 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64  es, which should
127a0 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74   be null for bot
127b0 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  h...          #
127c0 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20        Since the
127d0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
127e0 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63  t_directory func
127f0 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
12800 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  e,..          #
12810 20 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20        use it...
12820 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
12830 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
12840 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20  ndex 1} {$index 12850 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 < 3} {incr index 12860 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {.. 12870 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 12890 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 128a0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 128b0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 128c0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 128d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 128e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 128f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12900 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f sqlite3_ 12910 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 12920 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d ory$index null}
12930 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12940 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20          result]
12950 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
12960 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
12970 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 12980 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 12990 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 129a0 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 - call sqlite3_w 129b0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 129c0 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 ry("$index \..
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
129e0 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a   ", null)... ok:
129f0 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a   " $result \n].. 12a00 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 12a10 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 12a20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
12a30 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
12a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12a50 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
12a60 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
12a70 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e  _directory(" $in 12a80 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 dex \.. 12a90 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c ", null 12aa0 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e )... error: " \n 12ab0 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
12ad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
12ae0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
12af0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
12b00 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no 12b10 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d \n.... #. 12b20 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 12b30 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 Does our caller 12b40 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 want to reset t 12b50 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 he directories? 12b60 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a This can only.. 12b70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 12b80 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 be performed if 12b90 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 SQLite is loaded 12ba0 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 12bb0 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a se by the test.. 12bc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 12bd0 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 12be0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
12bf0 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69  reset && [isSQLi
12c00 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b  teReady]} then {
12c10 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
12c20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
12c30 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74   Now make sure t
12c40 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and
12c50 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
12c60 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20  ories are..
12c70 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73       #       res
12c80 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74  et their default
12c90 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73   values, which s
12ca0 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f  hould be null fo
12cb0 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20  r both...
12cc0 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65     #       Since
12cd0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e   the sqlite3_win
12ce0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
12cf0 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e   function does n
12d00 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ot..          #
12d10 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20        appear to
12d20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73  be available, us
12d30 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  e the associated
12d40 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73   PRAGMA commands
12d50 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
12d60 20 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20      instead...
12d70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12d80 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72       foreach dir
12d90 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74  ectory [list dat
12da0 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
12db0 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  y temp_store_dir
12dc0 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20  ectory] {..
12dd0 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b         set sql [
12de0 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47  appendArgs "PRAG
12df0 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  MA " $directory 12e00 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 " = \"\";"].... 12e10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 12e20 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 catch {executeSq 12e30 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 l$sql} result]
12e40 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
12e50 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
12e60 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 12e70 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 12e80 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 12e90 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 - execute PRAGMA 12ea0 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e "$directory ".
12eb0 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20  .. ok: \"" \..
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ed0 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20  $result \"\n].. 12ee0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 12ef0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 12f00 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
12f10 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
12f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
12f30 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65     "---- execute
12f40 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63   PRAGMA " $direc 12f50 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a tory "... error: 12f60 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 12f70 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 \n\t$re
12f80 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
12f90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
12fa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
12fb0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12fc0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
12fd0 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77  E: Finally, show
12fe0 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
12ff0 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
13000 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
13010 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
13020 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68  directories.  Th
13030 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70  is can only be p
13040 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69  erformed if SQLi
13050 74 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20  te is loaded..
13060 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20      #       and
13070 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79  ready for use by
13080 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
13090 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
130a0 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65   if {[isSQLiteRe
130b0 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ady]} then {..
130c0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69        foreach di
130d0 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61  rectory [list da
130e0 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
130f0 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  ry temp_store_di
13100 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20  rectory] {..
13110 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 13120 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 13130 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 13140 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e "$directory "..
13150 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . "]....
13160 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e    set sql [appen
13170 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20  dArgs "PRAGMA "
13180 24 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a  $directory \;].. 13190 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 131a0 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 [catch {executeS 131b0 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 ql$sql scalar}
131c0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
131d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
131e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 131f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b [appendArgs "ok 13200 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 : \""$result \"
13210 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
13220 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
13230 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 13240 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 13250 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 "error: " \n\t$
13260 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
13270 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
13280 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
13290 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
132a0 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65  loadSQLiteTestSe
132b0 74 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c  ttings { channel
132c0 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75   {suffix ""} {qu
132d0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
132e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
132f0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64   NOTE: Skip load
13300 69 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73  ing the settings
13310 20 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20   if their usage
13320 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65  has been disable
13330 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
13340 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
13350 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65  ists ::no(sqlite
13360 54 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20  TestSettings)]}
13370 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13380 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
13390 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70  E: Load custom p
133a0 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70  er-user and/or p
133b0 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74  er-host test set
133c0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20  tings now...
133d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
133e0 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
133f0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75  ::tcl_platform(u
13400 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ser)]} then {..
13410 20 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65           set use
13420 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  rSettingsFileNam
13430 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
13440 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79  tCommonDirectory
13450 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
13460 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73     [appendArgs s
13470 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20  ettings $suffix 13480 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 .$::tcl_platfor
13490 6d 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d  m(user) .eagle]]
134a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
134b0 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $134c0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 134d0 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 134e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 134f0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
13510 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 13520 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 13540 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d --- loading per- 13550 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e user test settin 13560 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 gs file \"" \.. 13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13580 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69$userSettingsFi
13590 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d  leName \"...\n].
135a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
135b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
135c0 20 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65   {[catch {upleve
135d0 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65  l 1 [list source
135e0 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69   $userSettingsFi 135f0 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 leName]} \.. 13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13610 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 13630 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
13640 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
13650 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 13660 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 13670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 13680 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 13690 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f NG: failed to lo 136a0 61 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 ad per-user sett 136b0 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 136c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 136d0 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e$userSettin
136e0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20  gsFileName "\",
136f0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 13700 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 13710 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13720 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13730 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 13740 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
13750 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
13770 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 13780 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 13790 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 137a0 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 -- skipped loadi 137b0 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 ng per-user test 137c0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 137d0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 137e0 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74$userSet
137f0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c  tingsFileName "\
13800 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
13810 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  xist\n"]..
13820 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
13830 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
13840 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23  ...        #####
13850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13890 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ##....        if
138a0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
138b0 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f  :tcl_platform(ho
138c0 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  st)]} then {..
138d0 20 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74          set host
138e0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
138f0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
13900 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d  CommonDirectory]
13910 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13920 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65    [appendArgs se
13930 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e  ttings $suffix . 13940 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
13950 28 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d  (host) .eagle]].
13960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
13970 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68  {[file exists $h 13980 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 13990 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 139a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
139b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
139d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 139e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 13a00 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 -- loading per-h 13a10 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 ost test setting 13a20 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13a40 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c$hostSettingsFil
13a50 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  eName \"...\n]..
13a60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
13a80 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c  {[catch {uplevel
13a90 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source
13aa0 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c  $hostSettingsFil 13ab0 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 eName]} \.. 13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e 13ad0 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. 13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 13af0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
13b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13b10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 13b20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13b40 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 13b50 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 G: failed to loa 13b60 64 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 d per-host setti 13b70 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13b90 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67$hostSetting
13ba0 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65  sFileName "\", e
13bb0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 13bc0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 13bd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 13bf0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 13c00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
13c10 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
13c20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
13c30 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 13c40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 13c50 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 13c60 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e - skipped loadin 13c70 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 g per-host test 13c80 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 settings file \" 13c90 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 13ca0 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74$hostSett
13cb0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22  ingsFileName "\"
13cc0 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  , it does not ex
13cd0 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ist\n"]..
13ce0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
13cf0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
13d00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
13d10 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53  ...    proc runS
13d20 51 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75  QLiteTestPrologu
13d30 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e {} {..      #.
13d40 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
13d50 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20  kip running our
13d60 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20  custom prologue
13d70 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20  if the main one
13d80 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20  has been..
13d90 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e  #       skipped.
13da0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13db0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
13dc0 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65  ts ::no(prologue
13dd0 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b  .eagle)]} then {
13de0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
13df0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61       # NOTE: Loa
13e00 64 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f  d the "before-co
13e10 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f  nstraints" custo
13e20 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f  m per-user and/o
13e30 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20  r per-host..
13e40 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74      #       test
13e50 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a   settings now...
13e60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13e70 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
13e80 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73  st loadSQLiteTes
13e90 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73  tSettings $::tes 13ea0 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 t_channel .befor 13eb0 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d e].... #. 13ec0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 13ed0 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e Determine the n 13ee0 61 6d 65 73 20 6f 66 20 74 68 65 20 6e 61 74 69 ames of the nati 13ef0 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 ve platform and 13f00 61 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 architecture... 13f10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13f20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b set platform [ 13f30 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d getBuildPlatform 13f40 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 true].. 13f50 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 set architecture 13f60 20 5b 61 72 63 68 69 74 65 63 74 75 72 65 46 6f [architectureFo 13f70 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 rPlatform$platf
13f80 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  orm]....
13f90 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
13fa0 45 3a 20 53 68 6f 77 20 74 68 65 20 70 6c 61 74  E: Show the plat
13fb0 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65  form and archite
13fc0 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 68 65  cture used to he
13fd0 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20  lp locate the..
13fe0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e         #       n
13ff0 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65  ative build file
14000 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
14010 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 14020 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 14030 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 14040 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c "---- pl 14050 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 atform for locat 14060 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 ing native build 14070 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d files is \"" \. 14080 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c .$pl
14090 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a  atform \"\n]....
140a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 140b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 140c0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 140d0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 "---- a 140e0 72 63 68 69 74 65 63 74 75 72 65 20 66 6f 72 20 rchitecture for 140f0 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 locating native 14100 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c build files is \ 14110 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 14120 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20$architecture
14130 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
14140 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
14150 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74  TE: Build a list
14160 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   of configuratio
14170 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  n files that we
14180 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20  handle...
14190 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
141a0 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  configFileNames
141b0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
141c0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
141d0 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66  .SQLite.dll.conf
141e0 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ig]....        #
141f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
14200 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f  : Build a list o
14210 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61 6e 61  f auxiliary Mana
14220 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41 73  ged Debugging As
14230 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a  sistants (MDA)..
14240 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14250 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
14260 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
14270 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
14280 20 20 20 20 20 20 20 20 73 65 74 20 6d 64 61 43          set mdaC
14290 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b  onfigFileNames [
142a0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
142b0 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78      Installer.ex
142c0 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73  e.mda.config tes
142d0 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  t.exe.mda.config
142e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
142f0 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61  testlinq.exe.mda
14300 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20  .config]....
14310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
14320 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
14330 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20   list of native
14340 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74  assembly files t
14350 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20  hat we handle.
14360 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  The..        #
14370 20 20 20 20 20 72 65 61 73 6f 6e 20 74 68 65 20       reason the
14380 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
14390 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65 20 69 73  ite.dll" file is
143a0 20 69 6e 63 6c 75 64 65 64 20 68 65 72 65 20 69   included here i
143b0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
143c0 20 20 20 62 65 63 61 75 73 65 20 69 74 20 63 6f     because it co
143d0 75 6c 64 20 62 65 20 74 68 65 20 6d 69 78 65 64  uld be the mixed
143e0 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d  -mode assembly..
143f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
14400 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 46 69      set nativeFi
14410 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
14420 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
14430 69 74 65 33 2e 64 6c 6c 20 53 51 4c 69 74 65 2e  ite3.dll SQLite.
14440 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 53 79 73 74  Interop.dll Syst
14450 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
14460 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ll]....        #
14470 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
14480 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74  : Build the list
14490 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65   of managed asse
144a0 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20  mbly files that
144b0 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
144c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
144d0 65 74 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  et managedFileNa
144e0 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
144f0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
14500 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll
14510 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
14520 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a  te.Linq.dll]....
14530 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14540 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76     # NOTE: Remov
14550 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74  e any test const
14560 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 65  raints that refe
14570 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20  r to the native
14580 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20  and/or..
14590 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20  #       managed
145a0 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74  assembly files t
145b0 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e  hat we handle un
145c0 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66  less forbidden f
145d0 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20  rom..        #
145e0 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a       doing so...
145f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14600 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
14610 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65  ists ::no(sqlite
14620 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  RemoveConstraint
14630 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
14640 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
14650 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46  ileName $configF 14660 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 14670 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f removeCo 14680 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 14690 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 Args file_$file
146a0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  Name]..
146b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
146c0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
146d0 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e   $mdaConfigFileN 146e0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 146f0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 14700 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 14710 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 file_$fileName
14720 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
14730 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
14740 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 14750 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 14760 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 14770 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 14780 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 14790 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
147a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
147b0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
147c0 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69  eName $managedFi 147d0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 147e0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 147f0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 14800 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e rgs file_$fileN
14810 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
14820 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
14830 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14840 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
14850 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  all System.Data.
14860 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66  SQLite related f
14870 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65  ile handling (de
14880 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  leting,..
14890 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67   #       copying
148a0 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69  , and loading) i
148b0 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
148c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
148d0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
148e0 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46  sts ::no(sqliteF
148f0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
14900 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
14910 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
14920 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65  kip trying to de
14930 6c 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69  lete any files i
14940 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
14950 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
14960 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
14970 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
14980 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d  eteSqliteFiles)]
14990 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
149a0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
149b0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
149c0 65 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46  eteSqliteConfigF
149d0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
149f0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $14a00 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 configFileNames 14a10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14a20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 tryDeleteBina 14a30 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ryFile$fileName
14a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14a50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
14a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
14a70 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
14a80 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
14a90 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d  iteNativeFiles)]
14aa0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14ab0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
14ac0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
14ad0 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c 69  eleteSqliteImpli
14ae0 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
14af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
14b00 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
14b10 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 14b20 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 14b30 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 14b40 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 leteAssembly$fi
14b50 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
14b60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
14b70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
14b80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
14b90 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
14ba0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50  no(deleteSqliteP
14bb0 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26  latformFiles)] &
14bc0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
14bd0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
14be0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] 14bf0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 14c10 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
14c20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
14c30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
14c40 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
14c50 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 14c60 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20$platform..
14c70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14ca0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
14cb0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
14cc0 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
14cd0 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
14cf0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61  string length $a 14d00 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 rchitecture] > 0 14d10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14d20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 14d30 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
14d40 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
14d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d60 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
14d70 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72  ly $fileName$ar
14d80 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
14d90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14db0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
14dd0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
14de0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
14df0 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20  ManagedFiles)]}
14e00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14e10 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
14e20 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46  leName $managedF 14e30 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 14e40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 14e50 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 eleteAssembly$f
14e60 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
14e70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
14e80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
14e90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
14ea0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
14eb0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
14ec0 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63 74   the "autoSelect
14ed0 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
14ee0 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a  .  If present,..
14ef0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
14f00 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75 74    attempt to aut
14f10 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63  omatically selec
14f20 74 20 74 68 65 20 66 69 72 73 74 20 61 76 61 69  t the first avai
14f30 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  lable..
14f40 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 28   #       build (
14f50 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f 66  or "release") of
14f60 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73 74   SQLite and Syst
14f70 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a  em.Data.SQLite..
14f80 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
14f90 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74    for use with t
14fa0 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
14fb0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
14fc0 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52         if {[hasR
14fd0 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74  untimeOption aut
14fe0 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b  oSelect]} then {
14ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
15000 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69   {![checkForSQLi
15010 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74  teBuilds $::test 15020 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 _channel true]} 15030 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 15040 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 15050 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a LiteReleases$::
15060 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75  test_channel tru
15070 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
15080 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
15090 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
150a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
150b0 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 76  Skip trying to v
150c0 65 72 69 66 79 20 74 68 65 20 62 75 69 6c 64 20  erify the build
150d0 64 69 72 65 63 74 6f 72 79 20 69 66 20 69 6e 73  directory if ins
150e0 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 20 20  tructed;..
150f0 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65      #       othe
15100 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65  rwise, make sure
15110 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78 69   it actually exi
15120 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68 65 20  sts or halt the
15130 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 20 20  entire..
15140 20 20 23 20 20 20 20 20 20 20 74 65 73 74 69 6e    #       testin
15150 67 20 70 72 6f 63 65 73 73 20 69 66 20 69 74 20  g process if it
15160 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d  does not exist..
15170 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
15180 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
15190 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76  fo exists ::no(v
151a0 65 72 69 66 79 42 75 69 6c 64 44 69 72 65 63 74  erifyBuildDirect
151b0 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ory)]} then {..
151c0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
151d0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
151e0 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c  : At this point,
151f0 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
15200 74 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74 20  tory MUST exist
15210 61 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20  as a..
15220 20 20 23 20 20 20 20 20 20 20 76 61 6c 69 64 20    #       valid
15230 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
15240 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
15250 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a  s to continue...
15260 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
15270 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64             set d
15280 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69  irectory [getBui
15290 6c 64 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a  ldDirectory]....
152a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
152b0 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 64  ![file exists $d 152c0 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a irectory] || \.. 152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 152e0 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f ![file isdirecto 152f0 72 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 ry$directory]}
15300 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
15310 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15320 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a         # NOTE: J
15330 75 73 74 20 70 72 69 6f 72 20 74 6f 20 61 63 74  ust prior to act
15340 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20 74 68  ually halting th
15350 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
15360 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..
15370 20 20 23 20 20 20 20 20 20 20 61 64 64 20 61 6e    #       add an
15380 20 65 72 72 6f 72 20 74 6f 20 74 68 65 20 74 65   error to the te
15390 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20  st log file...
153a0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
153c0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 153d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 153e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 153f0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 "---- could 15400 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 not verify build 15410 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 directory \""$
15420 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20  directory \..
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15440 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20  \", all testing
15450 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20  halted\n"]....
15460 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
15480 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73  OTE: Raising a s
15490 63 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d  cript error from
154a0 20 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75   this point shou
154b0 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20  ld halt..
154c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
154d0 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
154e0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...
154f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
15500 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e      error [appen
15510 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
15520 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
15530 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69  d not verify bui
15540 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22  ld directory \""
15550 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15570 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e "\", all testin 15580 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 g halted"].. 15590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 155a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 155b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 155c0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 # NOTE: Skip tr 155d0 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 ying to copy any 155e0 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 files if instru 155f0 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 15600 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 15610 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 15620 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 ::no(copySqliteF 15630 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 15640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 15650 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 15660 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e no(copySqliteCon 15670 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e figFiles)]} then 15680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15690 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 156a0 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 me$configFileNa
156b0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
156c0 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75         tryCopyBu
156d0 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  ildFile $fileNam 156e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 156f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 15700 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 15710 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 15720 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 15730 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d teNativeFiles)]} 15740 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15750 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 15760 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 15770 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 pySqliteImplicit 15780 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 15790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 157a0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 157b0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d e$nativeFileNam
157c0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
157d0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41          tryCopyA
157e0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 157f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 15800 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 15810 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 15820 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 15830 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 15840 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d pySqlitePlatform 15850 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15870 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
15880 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74  platform] > 0} t
15890 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
158a0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
158b0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46  ileName $nativeF 158c0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 158e0 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 yCopyAssembly$f
158f0 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 15900 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m.. 15910 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 15920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 15930 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 15940 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 15950 70 79 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 pySqliteArchitec 15960 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 15970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15980 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 15990 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
159a0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
159c0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
159d0 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 159e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 159f0 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 tryCopyAss 15a00 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
15a10 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20  $architecture.. 15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 15a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15a40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 15a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 15a60 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 15a70 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 15a80 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d eManagedFiles)]} 15a90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15aa0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 15ab0 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 ileName$managed
15ac0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
15ae0 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 15af0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 15b00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 15b10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 15b20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 15b30 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 15b40 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 15b50 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 g to load any fi 15b60 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 les if instructe 15b70 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 15b80 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 15b90 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 15ba0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 o(loadSqliteFile 15bb0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 15bc0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 15bd0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 15be0 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 loadSqliteImplic 15bf0 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 itFiles)]} then 15c00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15c10 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 tryLoadAssembly 15c20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 15c30 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 ite.dll.. 15c40 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 tryLoadAs 15c50 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 sembly System.Da 15c60 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 ta.SQLite.Linq.d 15c70 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 15c80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 15c90 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 15ca0 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 15cb0 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 tePlatformFiles) 15cc0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 15cd0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 15ce0 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
15cf0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
15d10 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73  LoadAssembly Sys
15d20 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
15d30 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20  dll $platform.. 15d40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 15d50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 15d60 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 15d70 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 no(loadSqliteArc 15d80 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d hitectureFiles)] 15d90 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 15da0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 15db0 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 ength$architect
15dc0 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ure] > 0} then {
15dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15de0 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20  tryLoadAssembly
15df0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
15e00 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63  te.dll $architec 15e10 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ture.. 15e20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 15e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 15e40 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 15e50 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 15e60 6f 20 64 65 6c 65 74 65 20 65 78 74 65 72 6e 61 o delete externa 15e70 6c 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 l files if instr 15e80 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 15e90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 15ea0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 15eb0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 15ec0 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 teExternalFiles) 15ed0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 15ee0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 15ef0 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 ileName$mdaConf
15f00 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
15f20 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20  DeleteBuildFile
15f30 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 15f40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 15f50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 15f60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 15f70 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 15f80 69 6e 67 20 74 6f 20 63 6f 70 79 20 65 78 74 65 ing to copy exte 15f90 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 69 6e rnal files if in 15fa0 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 15fb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 15fc0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 15fd0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 15fe0 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 iteExternalFiles 15ff0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 16000 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16010 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 16020 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 opy the Managed 16030 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 16040 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 ants (MDA) confi 16050 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 16060 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 # fi 16070 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c 65 le for the Eagle 16080 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 shell to the bu 16090 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 ild output direc 160a0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 tory,.. 160b0 20 20 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 # while 160c0 20 75 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 using each of t 160d0 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 he names of the 160e0 76 61 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 various legacy t 160f0 65 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 est.. 16100 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 # executa 16110 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c bles. This will 16120 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 help to make su 16130 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d re that all the. 16140 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # 16150 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 legacy test 16160 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 s run with exact 16170 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 ly the same set 16180 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 of Managed.. 16190 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 161a0 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 161b0 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e ants configured. 161c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 161d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 . for 161e0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
161f0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  daConfigFileName
16200 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
16210 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79     tryCopyBinary
16220 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e  File EagleShell.
16230 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 22  exe.mda.config "
16240 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  " $fileName.. 16250 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 16260 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16270 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 16280 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 16290 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
162a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
162b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
162c0 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
162d0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69  ersion of \"sqli
162e0 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c  te3.dll\"... " \
162f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16300 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
16310 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
16320 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c   sqlite3.dll]] \
16330 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  n]..        }...
16340 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
16350 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
16360 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 16370 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 16390 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 163a0 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e n of \"SQLite.In 163b0 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 terop.dll\"... " 163c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 163d0 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 [file version 163e0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 163f0 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f me SQLite.Intero 16400 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 p.dll]] \n].. 16410 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16420 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 16430 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
16440 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
16450 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16460 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
16470 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
16480 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16490 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  te.dll\"... " \.
164a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
164b0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
164c0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
164d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
164e0 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20  te.dll]] \n]..
164f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16500 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
16510 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 16520 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 16530 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 16540 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 16550 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 16560 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 16570 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e ite.Linq.dll\".. 16580 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 . " \.. 16590 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 [file versi 165a0 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 165b0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 165c0 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c a.SQLite.Linq.dl 165d0 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 l]] \n].. 165e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 165f0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 16600 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
16610 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16620 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
16630 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 16640 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 16650 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 16660 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 16670 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 16680 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d of \""$platform
16690 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
166a0 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c      "/sqlite3.dl
166b0 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76  l\"... " [file v
166c0 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
166d0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
166e0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c  naryFileName sql
166f0 69 74 65 33 2e 64 6c 6c 20 24 70 6c 61 74 66 6f  ite3.dll $platfo 16700 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rm]] \n].. 16710 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 16720 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 16730 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
16740 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
16750 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
16770 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
16780 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d  of \"" $platform 16790 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 167a0 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 "/SQLite.Int 167b0 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 erop.dll\"... " 167c0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d [file version \. 167d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 167e0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 167f0 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 ame SQLite.Inter 16800 6f 70 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d op.dll$platform
16810 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
16820 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
16830 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
16840 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 16850 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 16860 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 16870 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 16880 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 16890 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c \""$platform \
168a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
168b0 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e    "/System.Data.
168c0 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20  SQLite.dll\"...
168d0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  " [file version
168e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
168f0 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c     [getBinaryFil
16900 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
16910 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c  a.SQLite.dll $pl 16920 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 atform]] \n].. 16930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 16940 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 16950 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 16960 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
16970 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
16980 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
16990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
169a0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 169b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 169c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 169d0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 169e0 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 rsion of \""$ar
169f0 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20  chitecture \..
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f                "/
16a10 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e  sqlite3.dll\"...
16a20 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e   " [file version
16a30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16a40 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69      [getBinaryFi
16a50 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64  leName sqlite3.d
16a60 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65  ll $architecture 16a70 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 16a80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 16a90 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 16aa0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
16ab0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
16ac0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
16ad0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
16ae0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
16af0 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75   \"" $architectu 16b00 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 re \.. 16b10 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 "/SQLite.I 16b20 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 nterop.dll\"... 16b30 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 " [file version 16b40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16b50 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c [getBinaryFil 16b60 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 eName SQLite.Int 16b70 65 72 6f 70 2e 64 6c 6c 20 24 61 72 63 68 69 74 erop.dll$archit
16b80 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20  ecture]] \n]..
16b90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
16ba0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
16bc0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 16bd0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16bf0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 16c00 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 ion of \""$arch
16c10 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20  itecture \..
16c20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79              "/Sy
16c30 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
16c40 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c  .dll\"... " [fil
16c50 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
16c70 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
16c80 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16c90 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63  te.dll $architec 16ca0 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 ture]] \n].. 16cb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16cc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 }.... se 16cd0 74 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 t assemblies [ob 16ce0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 ject invoke AppD 16cf0 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d omain.CurrentDom 16d00 61 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 ain GetAssemblie 16d10 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 s].... ob 16d20 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 ject foreach ass 16d30 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 embly$assemblie
16d40 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  s {..          i
16d50 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  f {[string match
16d60 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \{System.Data.S
16d70 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79  QLite* $assembly 16d80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 16d90 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
16da0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
16db0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
16dd0 2d 20 66 6f 75 6e 64 20 61 73 73 65 6d 62 6c 79  - found assembly
16de0 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e  : " $assembly \n 16df0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 16e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 16e10 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 16e20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
16e30 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
16e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
16e50 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73  ---- define cons
16e60 74 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74  tants for \"Syst
16e70 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22  em.Data.SQLite\"
16e80 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
16e90 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
16ea0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
16eb0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
16ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16ed0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
16ee0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44  SQLite.SQLite3 D
16ef0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20  efineConstants}
16f00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16f10 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74       defineConst
16f20 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ants] == 0} then
16f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16f40 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 16f50 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 16f60 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c s [formatList [l 16f70 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 sort \.. 16f80 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43$defineC
16f90 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e  onstants] <none>
16fa0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
16fb0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
16fc0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 16fd0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b test_channel unk 16fe0 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 nown\n.. 16ff0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 17000 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 17010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 17020 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
17030 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
17040 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65      "---- source
17050 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79   version of \"Sy
17060 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
17070 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20  .dll\"... "....
17080 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
17090 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
170a0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
170b0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
170c0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
170d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
170e0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72  iteConnection Pr
170f0 6f 76 69 64 65 72 56 65 72 73 69 6f 6e 7d 20 5c  oviderVersion} \
17100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17110 20 20 20 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20      version] ==
17120 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
17130 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
17140 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69  ng length $versi 17150 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { 17160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17170 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c set version null 17180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 17190 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 171a0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
171b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $171c0 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 version \n].. 171d0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 171e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 171f0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
17200 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
17210 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
17220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
17230 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
17240 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 17250 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 17260 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 17270 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20 source checkout 17280 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 of \"System.Data 17290 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e .SQLite.dll\"... 172a0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ".... 172b0 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje 172c0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 172d0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 172f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 17300 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ite.SQLiteConnec 17310 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 tion ProviderSou 17320 72 63 65 49 64 7d 20 5c 0d 0a 20 20 20 20 20 20 rceId} \.. 17330 20 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 sour 17340 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then 17350 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17360 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 17370 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d th$sourceId] ==
17380 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
17390 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
173a0 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20  urceId null..
173b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
173c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 173d0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 173e0 70 70 65 6e 64 41 72 67 73 20 24 73 6f 75 72 63 ppendArgs$sourc
173f0 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  eId \n]..
17400 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
17410 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $17420 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 ::test_channel u 17430 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 nknown\n.. 17440 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 17450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 17460 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 17470 68 65 63 6b 20 74 68 65 20 61 76 61 69 6c 61 62 heck the availab 17480 6c 65 20 62 75 69 6c 64 73 20 28 61 6e 64 20 22 le builds (and " 17490 72 65 6c 65 61 73 65 73 22 29 20 6f 66 20 53 51 releases") of SQ 174a0 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 Lite and.. 174b0 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d # System 174c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 .Data.SQLite... 174d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 174e0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 174f0 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 Builds$::test_c
17500 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20  hannel..
17510 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65  checkForSQLiteRe
17520 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63  leases $::test_c 17530 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 17540 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 17550 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 OTE: Now, we nee 17560 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 d to know if the 17570 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 17580 72 61 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c rary is availabl 17590 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 175a0 20 20 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 (i.e. because 175b0 20 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c the managed-onl 175c0 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 175d0 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 20 63 61 Lite assembly ca 175e0 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 n.. # 175f0 20 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 load without 17600 69 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 it; however, it 17610 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 cannot do anythi 17620 6e 67 20 75 73 65 66 75 6c 20 77 69 74 68 6f 75 ng useful withou 17630 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 17640 20 20 20 69 74 29 2e 20 20 49 66 20 77 65 20 61 it). If we a 17650 72 65 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 re using the mix 17660 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 17670 20 61 6e 64 20 77 65 20 61 6c 72 65 61 64 79 0d and we already. 17680 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 17690 20 66 6f 75 6e 64 20 69 74 20 28 61 62 6f 76 65 found it (above 176a0 29 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 ), this should a 176b0 6c 77 61 79 73 20 73 75 63 63 65 65 64 2e 0d 0a lways succeed... 176c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 176d0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 176e0 65 4c 69 62 72 61 72 79 20 24 3a 3a 74 65 73 74 eLibrary$::test
176f0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
17700 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
17710 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
17720 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72  the SQLite inter
17730 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 73 20 61  op assembly is a
17740 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20  vailable...
17750 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
17760 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65  eckForSQLiteInte
17770 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  rop $::test_chan 17780 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 17790 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 177a0 3a 20 43 68 65 63 6b 20 74 68 65 20 53 51 4c 69 : Check the SQLi 177b0 74 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 te database and 177c0 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 177d0 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ories... 177e0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 177f0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f ForSQLiteDirecto 17800 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ries$::test_cha
17810 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
17820 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
17830 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65  E: Attempt to de
17840 74 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f  termine if vario
17850 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  us compile-time
17860 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66  options needed f
17870 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  or..        #
17880 20 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61      test constra
17890 69 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65  ints were enable
178a0 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65  d for the manage
178b0 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 68 65  d assembly.  The
178c0 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #
178d0 20 20 20 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d      are some com
178e0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
178f0 73 20 74 68 61 74 20 6d 75 73 74 20 61 6c 73 6f  s that must also
17900 20 68 61 76 65 20 62 65 65 6e 20 65 6e 61 62 6c   have been enabl
17910 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ed..        #
17920 20 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65      for the inte
17930 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 6e 20  rop assembly in
17940 6f 72 64 65 72 20 74 6f 20 62 65 20 65 66 66 65  order to be effe
17950 63 74 69 76 65 2e 20 20 46 6f 72 20 74 68 6f 73  ctive.  For thos
17960 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
17970 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77     options, it w
17980 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 20 74  ill be assumed t
17990 68 61 74 20 69 74 20 77 61 73 20 65 6e 61 62 6c  hat it was enabl
179a0 65 64 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72  ed for the inter
179b0 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  op..        #
179c0 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69 66 20      assembly if
179d0 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66  it was enabled f
179e0 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  or the managed a
179f0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
17a00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
17a10 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74  each defineConst
17a20 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ant [list \..
17a30 20 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53           CHECK_S
17a40 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  TATE COUNT_HANDL
17a50 45 20 44 45 42 55 47 20 49 4e 54 45 52 4f 50 5f  E DEBUG INTEROP_
17a60 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f 44 45  CODEC INTEROP_DE
17a70 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  BUG \..
17a80 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e     INTEROP_EXTEN
17a90 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49  SION_FUNCTIONS I
17aa0 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c  NTEROP_LEGACY_CL
17ab0 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20  OSE INTEROP_LOG
17ac0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  \..            I
17ad0 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45  NTEROP_TEST_EXTE
17ae0 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49  NSION INTEROP_VI
17af0 52 54 55 41 4c 5f 54 41 42 4c 45 20 4e 45 54 5f  RTUAL_TABLE NET_
17b00 32 30 20 4e 45 54 5f 33 35 20 5c 0d 0a 20 20 20  20 NET_35 \..
17b10 20 20 20 20 20 20 20 20 20 4e 45 54 5f 34 30 20           NET_40
17b20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 31 20 4e  NET_45 NET_451 N
17b30 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 50 4c  ET_COMPACT_20 PL
17b40 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
17b50 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 20  AMEWORK \..
17b60 20 20 20 20 20 20 20 50 52 45 4c 4f 41 44 5f 4e         PRELOAD_N
17b70 41 54 49 56 45 5f 4c 49 42 52 41 52 59 20 52 45  ATIVE_LIBRARY RE
17b80 54 41 52 47 45 54 41 42 4c 45 20 53 51 4c 49 54  TARGETABLE SQLIT
17b90 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d 0a 20 20  E_STANDARD \..
17ba0 20 20 20 20 20 20 20 20 20 20 54 48 52 4f 57 5f            THROW_
17bb0 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 52 41 43  ON_DISPOSED TRAC
17bc0 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  E TRACE_CONNECTI
17bd0 4f 4e 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20  ON TRACE_HANDLE
17be0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  \..            T
17bf0 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 41  RACE_PRELOAD TRA
17c00 43 45 5f 53 48 41 52 45 44 20 54 52 41 43 45 5f  CE_SHARED TRACE_
17c10 53 54 41 54 45 4d 45 4e 54 20 54 52 41 43 45 5f  STATEMENT TRACE_
17c20 57 41 52 4e 49 4e 47 20 5c 0d 0a 20 20 20 20 20  WARNING \..
17c30 20 20 20 20 20 20 20 54 52 41 43 4b 5f 4d 45 4d         TRACK_MEM
17c40 4f 52 59 5f 42 59 54 45 53 20 55 53 45 5f 49 4e  ORY_BYTES USE_IN
17c50 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52  TEROP_DLL USE_PR
17c60 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f 57 53  EPARE_V2 WINDOWS
17c70 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ] {..          #
17c80 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
17c90 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
17ca0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
17cb0 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 69  tion is listed i
17cc0 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20  n the list of..
17cd0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
17ce0 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e   "define constan
17cf0 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b 20 6f  ts" kept track o
17d00 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67 65 64  f by the managed
17d10 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
17d20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17d30 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
17d40 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
17d50 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 17d60 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d$defineConstant.
17d70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
17d80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17d90 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
17da0 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64  he current build
17db0 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c   year.  Basicall
17dc0 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 65  y, this indicate
17dd0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
17de0 20 20 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e     which version
17df0 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f   of MSBuild and/
17e00 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  or Visual Studio
17e10 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20   was used to..
17e20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
17e30 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62  mpile the assemb
17e40 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  ly binaries unde
17e50 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20  r test...
17e60 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
17e70 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 17e80 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 17e90 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 17ea0 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. 17eb0 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 SQLite build yea 17ec0 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 r... ".... 17ed0 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 set year [getB 17ee0 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 uildYear].. 17ef0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 17f00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 17f10 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a ldYear.$year]..
17f20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 17f30 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 17f40 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65 ppendArgs \"$ye
17f50 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ar \"\n]....
17f60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
17f70 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
17f80 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63   current build c
17f90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54  onfiguration.  T
17fa0 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61  his should norma
17fb0 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  lly..        #
17fc0 20 20 20 20 20 62 65 20 65 69 74 68 65 72 20 22       be either "
17fd0 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61  Debug" or "Relea
17fe0 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  se"...        #.
17ff0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $18000 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 18010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 18020 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 18030 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 18040 69 74 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 ite build config 18050 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a uration... ".... 18060 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 set conf 18070 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 iguration [getBu 18080 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ildConfiguration 18090 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f ].. addCo 180a0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 180b0 41 72 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 Args buildConfig 180c0 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 uration.$config
180d0 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20  uration]..
180e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 180f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 18100 72 67 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 rgs \"$configur
18110 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20  ation \"\n]....
18120 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18130 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f    # NOTE: Try to
18140 20 73 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72   setup an interr
18150 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  upt callback usi
18160 6e 67 20 74 68 65 20 73 63 72 69 70 74 20 64 65  ng the script de
18170 62 75 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20  bugger..
18180 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c  #       that wil
18190 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c  l cancel all SQL
181a0 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67   queries in prog
181b0 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74  ress for all dat
181c0 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23  abase..        #
181d0 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
181e0 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73  ns known to this
181f0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
18200 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18210 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
18220 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49  sts ::no(sqliteI
18230 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b  nterruptCallback
18240 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
18250 20 20 20 20 20 20 73 65 74 75 70 44 62 49 6e 74        setupDbInt
18260 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24  erruptCallback $18270 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
18280 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20  ::test_log..
18290 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
182a0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
182b0 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68  TE: Check for th
182c0 65 20 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65  e native runtime
182d0 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77   option, which w
182e0 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65  ould mean we are
182f0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
18300 20 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65    using the mixe
18310 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e  d-mode assembly.
18320 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18330 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e       checkForRun
18340 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65  timeOption $::te 18350 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 st_channel nativ 18360 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 18370 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 18380 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 Check if the tes 18390 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63 t suite should c 183a0 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20 ount the number 183b0 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a of connections.. 183c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 183d0 22 6f 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c "opened" and "cl 183e0 6f 73 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70 osed" from the p 183f0 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69 ool when determi 18400 6e 69 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a ning if a test.. 18410 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 18420 70 61 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69 passed. Disabli 18430 6e 67 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 ng this behavior 18440 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 is sometimes ne 18450 63 65 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 cessary (e.g... 18460 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 # d 18470 75 72 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73 uring the releas 18480 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 e testing proces 18490 73 29 20 62 65 63 61 75 73 65 20 74 68 65 72 65 s) because there 184a0 20 61 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 are several.. 184b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te 184c0 73 74 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e sts that rely on 184d0 20 74 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f the "opened fro 184e0 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 m pool" count be 184f0 69 6e 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20 ing greater.. 18500 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha 18510 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74 n zero. These t 18520 65 73 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75 ests may fail du 18530 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 e to the non-det 18540 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 erministic.. 18550 20 20 20 20 23 20 20 20 20 20 20 20 62 65 68 61 # beha 18560 76 69 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20 vior of the CLR 18570 47 43 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 GC, even when th 18580 65 72 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e ere is no bug in 18590 20 74 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 the code.. 185a0 20 20 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 # being 185b0 20 74 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 tested... 185c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 185d0 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 ckForRuntimeOpti 185e0 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e on$::test_chann
185f0 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d  el noPoolCounts.
18600 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
18610 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
18620 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63  port the resourc
18630 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f  e usage prior to
18640 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73   running any tes
18650 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ts...        #..
18660 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51          reportSQ
18670 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a  LiteResources $: 18680 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d :test_channel... 18690 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 186a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 186b0 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73 74 the active test 186c0 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 constraints... 186d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 186e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
186f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
18700 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72  rgs "---- constr
18710 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20  aints: " \..
18720 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c          [formatL
18730 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43  ist [lsort [getC
18740 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f  onstraints]] <no
18750 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ne>] \n]....
18760 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
18770 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the
18780 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
18790 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 65   for use by thre
187a0 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 74  ads created in t
187b0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  his..        #
187c0 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e       application
187d0 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69   domain.  This i
187e0 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 61  s necessary beca
187f0 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c  use all the Eagl
18800 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
18810 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74     "test context
18820 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  " information is
18830 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20   per-thread...
18840 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18850 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
18860 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72  ts ::test_constr
18870 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  aints]} then {..
18880 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
18890 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73  test_constraints
188a0 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28   $::eagle_tests( 188b0 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 constraints).. 188c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 188d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 188e0 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 NOTE: Load the " 188f0 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 after-constraint 18900 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 s" custom per-us 18910 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f er and/or per-ho 18920 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 18930 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 test setting 18940 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 s now... 18950 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 #.. uplev 18960 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 el 1 [list loadS 18970 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 QLiteTestSetting 18980 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
18990 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20  l .after]....
189a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
189b0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  # NOTE: Show whe
189c0 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75  n our tests actu
189d0 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29  ally began (now)
189e0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
189f0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 18a00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 18a10 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 18a20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 "---- Sys 18a30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 18a40 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 tests began at " 18a50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18a60 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 [clock format [c 18a70 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c lock seconds]] \ 18a80 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 18a90 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 18aa0 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 runSQLiteTestEpi 18ab0 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 logue {} {.. 18ac0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18ad0 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 E: Skip running 18ae0 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f our custom epilo 18af0 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 gue if the main 18b00 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 one has been.. 18b10 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 # skip 18b20 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ped... #.. 18b30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 18b40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c exists ::no(epil 18b50 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 ogue.eagle)]} th 18b60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 18b70 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 18b80 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 Show when our t 18b90 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e ests actually en 18ba0 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 ded (now)... 18bb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 18bc0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
18bd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
18be0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18bf0 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74  "---- System.Dat
18c00 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 65  a.SQLite tests e
18c10 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20  nded at " \..
18c20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20           [clock
18c30 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
18c40 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20  conds]] \n]....
18c50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18c60 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f    # BUGFIX: Befo
18c70 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20  re checking the
18c80 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20  final resources
18c90 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
18ca0 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20  , make..
18cb0 23 20 20 20 20 20 20 20 20 20 73 75 72 65 20 62  #         sure b
18cc0 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d  oth of the PRAGM
18cd0 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74  A related direct
18ce0 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72  ory names are fr
18cf0 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  eed...        #.
18d00 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
18d10 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69  rSQLiteDirectori
18d20 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  es $::test_chann 18d30 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 el true.... 18d40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 18d50 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 NOTE: Also repor 18d60 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 t the resource u 18d70 73 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 sage after runni 18d80 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 ng the tests... 18d90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18da0 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 reportSQLiteRe 18db0 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f sources$::test_
18dc0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
18dd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18de0 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65  NOTE: Report the
18df0 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
18e00 20 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75   counts after ru
18e10 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e  nning the tests.
18e20 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18e30 20 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 61       getSQLiteHa
18e40 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65  ndleCounts \$::te
18e50 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
18e60 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
18e70 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
18e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
18ec0 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
18ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ee0 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59  # END Eagle ONLY
18ef0 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
18f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
18f10 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
18f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18f60 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20  ..  }....  #..
18f70 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65  # NOTE: Save the
18f80 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72   name of the dir
18f90 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ectory containin
18fa0 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20  g this file...
18fb0 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20  #..  if {![info
18fc0 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69  exists common_di
18fd0 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
18fe0 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e  ..    set common
18ff0 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  _directory [file
19000 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73   dirname [info s
19010 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a  cript]]..  }....
19020 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50    #..  # NOTE: P
19030 72 6f 76 69 64 65 20 74 68 65 20 53 79 73 74 65  rovide the Syste
19040 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65  m.Data.SQLite te
19050 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68  st package to th
19060 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
19070 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70    #..  package p
19080 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61  rovide System.Da
19090 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31  ta.SQLite.Test 1
190a0 2e 30 0d 0a 7d 0d 0a                             .0..}..