text:
System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact f69fa8646a29a015111f6a95c739fc3180d635b2:

• File Tests/common.eagle — part of check-in [123d84e4ef] at 2013-12-31 08:40:31 on branch trunk — Add the ability for the test suite infrastructure to skip loading the 'implicit' (i.e. non-platform/architecture) assemblies. (user: mistachkin size: 101972)

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 0d lse false false. c560: 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a ... try {.. c570: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ c580: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list c590: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s c5a0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 ql execute -exec c5b0: 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f ute$execute -fo
c5c0: 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62  rmat $format$db
c5d0: 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d   $sql]].. } c5e0: 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 finally {.. c5f0: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 cleanupDb$f
c600: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65  ileName db false
c610: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..
c620: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
c630: 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44  .    proc setupD
c640: 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b {..
c650: 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20   fileName {mode
c660: 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72  ""} {dateTimeFor
c670: 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d  mat ""} {dateTim
c680: 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73  eKind ""} {flags
c690: 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   ""}..
c6a0: 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75    {extra ""} {qu
c6b0: 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c  alify true} {del
c6c0: 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66  ete true} {uri f
c6d0: 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20  alse}..
c6e0: 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72     {temporary tr
c6f0: 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d  ue} {varName db}
c700: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
c710: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72       # NOTE: Fir
c720: 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63  st, see if our c
c730: 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73  aller has reques
c740: 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  ted an in-memory
c750: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
c760: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69    #..      set i
c770: 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72  sMemory [isMemor
c780: 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  yDb $fileName].. c790: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. c7a0: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 # NOTE: For now c7b0: 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 , all test datab c7c0: 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65 ases used by the c7d0: 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20 test suite are c7e0: 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 placed.. # c7f0: 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 into the d c800: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 atabase director c810: 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73 y. Each databas c820: 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 e and related fi c830: 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 les.. # c840: 20 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73 used by a tes c850: 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 t should be clea c860: 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74 ned up by that t c870: 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 est using the.. c880: 20 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c # "cl c890: 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 eanupDb" procedu c8a0: 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 re, below... c8b0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! c8c0: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75$isMemory && $qu c8d0: 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 alify} then {.. c8e0: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN c8f0: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ c900: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 getDatabaseDirec c910: 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c tory] [file tail c920: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20$fileName]]..
c930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
c940: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
c950: 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65  By default, dele
c960: 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74  te any pre-exist
c970: 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74  ing database wit
c980: 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d  h the same file.
c990: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
c9a0: 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e  ame if it curren
c9b0: 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20  tly exists...
c9c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
c9d0: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64  !$isMemory &&$d
c9e0: 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65  elete && [file e
c9f0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] ca00: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ca10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N ca20: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to ca30: 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 delete any pre-e ca40: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 xisting database ca50: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 with the same f ca60: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ile.. # ca70: 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 name... ca80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i ca90: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 f {[catch {file caa0: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
cab0: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
cac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
cad0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
cae0: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
caf0: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  ed to delete the
cb00: 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68   file, report wh
cb10: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  y...          #.
cb20: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
cb30: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel cb40: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= cb60: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai cb70: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 led to delete da cb80: 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" cb90: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
cba0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
cbb0: 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72  uring setup, err
cbc0: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro cbd0: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d r \n].. } cbe0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cbf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO cc00: 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the cc10: 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia cc20: 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") cc30: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o cc40: 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # cc50: 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 caller. Th cc60: 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 e handle to the cc70: 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 opened database cc80: 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 will be stored t cc90: 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. cca0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
ccb0: 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
ccc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
ccd0: 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69  TE: Start buildi
cce0: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
ccf0: 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f  n string.  The o
cd00: 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f 72  nly required por
cd10: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
cd20: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
cd30: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20  ction string is
cd40: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c  the data source,
cd50: 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains
cd60: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
cd70: 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65     database file
cd80: 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49   name itself.  I
cd90: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e  f our caller wan
cda0: 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 20  ts to use a URI
cdb0: 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  as..      #
cdc0: 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63    the data sourc
cdd0: 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55  e, use the FullU
cde0: 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  ri connection st
cdf0: 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f  ring property to
ce00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
ce10: 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 61  prevent the data
ce20: 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66   source string f
ce30: 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65  rom being mangle
ce40: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
ce50: 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65     if {$uri} the ce60: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set ce70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c connection {Ful ce80: 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d lUri=${fileName}
ce90: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
cea0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
ceb0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20  onnection {Data
cec0: 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d  Source=${fileNam ced0: 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e}}.. }.... cee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # cef0: 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 NOTE: Since thi cf00: 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 s procedure has cf10: 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c no special knowl cf20: 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 edge of what the cf30: 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 default.. cf40: 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 # setting cf50: 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c is for the ToFul cf60: 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e lPath connection cf70: 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c string propery, cf80: 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 always.. # cf90: 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20 76 add the v cfa0: 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f alue we know abo cfb0: 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 ut to the connec cfc0: 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 tion string... cfd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 #.. app cfe0: 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { cff0: 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 ;ToFullPath=${qu
d000: 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20  alify}}....
d010: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
d020: 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
d030: 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72  specified a jour
d040: 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68  nal mode, add th
d050: 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74  e necessary port
d060: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
d070: 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
d080: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
d090: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d0a0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
d0b0: 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20  gth $mode] > 0} d0c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. d0d0: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f append connectio d0e0: 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 n {;Journal Mode d0f0: 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 =${mode}}..
d100: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
d110: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
d120: 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
d130: 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 20  fied a DateTime
d140: 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20  format, add the
d150: 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20  necessary..
d160: 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e   #       portion
d170: 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
d180: 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
d190: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
d1a0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
d1b0: 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  h $dateTimeForma d1c0: 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. d1d0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c d1e0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 onnection {;Date d1f0: 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 TimeFormat=${dat
d200: 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20  eTimeFormat}}..
d210: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
d220: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
d230: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
d240: 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
d250: 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65  imeKind, add the
d260: 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
d270: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
d280: 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
d290: 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
d2a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d2b0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
d2c0: 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64  th $dateTimeKind d2d0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. d2e0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co d2f0: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 nnection {;DateT d300: 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 imeKind=${dateTi
d310: 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20  meKind}}..
d320: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
d330: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
d340: 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c 6f  here are any glo
d350: 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 75  bal (per test ru
d360: 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  n) connection fl
d370: 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20  ags currently..
d380: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74       #       set
d390: 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 28  , use them now (
d3a0: 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 6e  i.e. by combinin
d3b0: 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 20  g them with the
d3c0: 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a 20  ones for this..
d3d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
d3e0: 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20  nection)...
d3f0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
d400: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6e  nfo exists ::con
d410: 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 26  nection_flags] &
d420: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
d430: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: d440: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag d450: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a s] > 0} then {.. d460: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d470: 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show d480: 28 61 6e 64 20 6c 6f 67 29 20 74 68 61 74 20 77 (and log) that w d490: 65 20 64 65 74 65 63 74 65 64 20 73 6f 6d 65 20 e detected some d4a0: 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f global connectio d4b0: 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 n flags... d4c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu d4d0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
d4e0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
d4f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
d500: 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65  --- global conne
d510: 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 65  ction flags dete
d520: 63 74 65 64 3a 20 22 20 24 3a 3a 63 6f 6e 6e 65  cted: " $::conne d530: 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 6e 5d 0d ction_flags \n]. d540: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d550: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co d560: 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 mbine and/or rep d570: 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 lace the connect d580: 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 ion flags and th d590: 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 en show the.. d5a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 # new d5b0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 value... d5c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set d5d0: 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c flags [combineFl d5e0: 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f ags$flags $::co d5f0: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d nnection_flags]. d600: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs d610: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
d620: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
d630: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
d640: 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65  - combined conne
d650: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a  ction flags are:
d660: 20 22 20 24 66 6c 61 67 73 20 5c 6e 5d 0d 0a 20   " $flags \n].. d670: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... d680: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: d690: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s d6a0: 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 pecified some SQ d6b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c LiteConnectionFl d6c0: 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 ags, add the.. d6d0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 # nece d6e0: 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 ssary portion of d6f0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection d700: 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... d710: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { d720: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
d730: 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e  flags] > 0} then
d740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
d750: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
d760: 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d  Flags=${flags}}. d770: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... d780: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d790: 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller d7a0: 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 specified an ex d7b0: 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 tra payload to t d7c0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 he connection.. d7d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 # str d7e0: 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e ing, append it n d7f0: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. d800: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string d810: 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e length$extra] >
d820: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
d830: 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
d840: 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d  ction \; $extra. d850: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... d860: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d870: 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 E: Open the data d880: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection d890: 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 now, placing the d8a0: 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 opaque handle v d8b0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 alue.. # d8c0: 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 into the var d8d0: 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 iable specified d8e0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... d8f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s d900: 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 et db [sql open d910: 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 -type SQLite [su d920: 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d bst$connection]
d930: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
d940: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66      # NOTE: Conf
d950: 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72  igure the tempor
d960: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f  ary directory fo
d970: 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e  r the newly open
d980: 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ed database..
d990: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
d9a0: 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73  ction now unless
d9b0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62   our caller forb
d9c0: 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23  ids it...      #
d9d0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d  ..      if {$tem d9e0: 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f porary && ![info d9f0: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 exists ::no(set da00: 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f TemporaryDirecto da10: 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ry)]} then {.. da20: 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 sql execut da30: 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 e$db [appendArg
da40: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
da50: 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   "PRAGMA temp_st
da60: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory =
da70: 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  \"" [getTemporar
da80: 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b  yDirectory] \"\;
da90: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
daa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
dab0: 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75  OTE: Always retu
dac0: 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  rn the connectio
dad0: 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75  n handle upon su
dae0: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ccess...      #.
daf0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64  .      return $d db00: 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 b.. }..... db10: 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 proc getDbConne db20: 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 ction { {varName db30: 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 db} } {.. db40: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: db50: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp db60: 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable db70: 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in db80: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o db90: 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # dba0: 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 caller. The h dbb0: 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 andle to the dat dbc0: 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 abase previously dbd0: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d opened via the. dbe0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ dbf0: 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 setupDb] procedu dc00: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f re should be sto dc10: 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 red there... dc20: 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar dc30: 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
dc40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
dc50: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65   # NOTE: This re
dc60: 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45  turns the ADO.NE
dc70: 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  T IDbConnection
dc80: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance
dc90: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23  for the..      #
dca0: 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64         specified
dcb0: 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e   databse handle.
dcc0: 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20    Since getting
dcd0: 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69  this object reli
dce0: 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23  es upon..      #
dcf0: 20 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74         Eagle int
dd00: 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61  ernals, great ca
dd10: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b  re should be tak
dd20: 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70  en to avoid disp
dd30: 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20  osing of..
dd40: 23 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a  #       this obj
dd50: 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65  ect or otherwise
dd60: 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f   putting it into
dd70: 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74   an invalid stat
dd80: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
dd90: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
dda0: 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d  sts db]} then {.
ddb0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
ddc0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
ddd0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
dde0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
ddf0: 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c  Public -objectfl
de00: 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 5c  ags +NoDispose \
de10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
de20: 20 20 2d 61 6c 69 61 73 20 49 6e 74 65 72 70 72    -alias Interpr
de30: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63  eter.GetActive.c
de40: 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20  onnections Item
de50: 24 64 62 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20  $db} \.. de60: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 result] de70: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. de80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. de90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 # NOTE: Suc dea0: 63 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 cess, return the deb0: 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 opaque object h dec0: 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... ded0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 #.. r dee0: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
def0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
df00: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
df10: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
df20: 46 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20  Failure, report
df30: 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  why...
df40: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  #..          tpu
df50: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann df60: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ df70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. df80: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f df90: 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e ailed to get con dfa0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 nection handle f dfb0: 6f 72 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 or database \"" dfc0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. dfd0: 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a$db "\", error:
dfe0: 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result dff0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. e000: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. e010: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 ... proc free e020: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b DbConnection { { e030: 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 varName connecti e040: 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 on} } {.. # e050: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e060: 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe e070: 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable e080: 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f (e.g. "connectio e090: 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 n") in the.. e0a0: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 # contex e0b0: 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e t of our caller. e0c0: 20 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a The opaque obj e0d0: 65 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 ect handle for a e0e0: 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 n ADO.NET.. e0f0: 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 # connect e100: 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 ion previously r e110: 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 eturned by [getD e120: 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f bConnection] sho e130: 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 uld be.. # e140: 20 20 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 stored the e150: 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. e160: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
e170: 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  Name connection.
e180: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e190: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
e1a0: 74 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20  t to remove the
e1b0: 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61  opaque object ha
e1c0: 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e  ndle from the in
e1d0: 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20  terpreter..
e1e0: 20 23 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54   #       now.  T
e1f0: 68 69 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70  his [object disp
e200: 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e  ose] call will n
e210: 6f 74 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70  ot actually disp
e220: 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ose of the..
e230: 20 20 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c    #       underl
e240: 79 69 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61  ying object beca
e250: 75 73 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f  use the +NoDispo
e260: 73 65 20 66 6c 61 67 20 77 61 73 20 73 65 74 20  se flag was set
e270: 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20  on it..      #
e280: 20 20 20 20 20 64 75 72 69 6e 67 20 63 72 65 61       during crea
e290: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71  tion of the opaq
e2a0: 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65  ue object handle
e2b0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e2c0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
e2d0: 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26  ts connection] &
e2e0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
e2f0: 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69  catch {object di
e300: 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f  spose $connectio e310: 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 n} error]} then e320: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. e330: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We e340: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed e350: 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 to remove the ha e360: 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 ndle, report why e370: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. e380: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
e390: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
e3a0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e3b0: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
e3c0: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
e3d0: 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f  remove connectio
e3e0: 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f  n handle \"" $co e3f0: 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 nnection \.. e400: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 "\", err e410: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
e420: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  r \n]..      }..
e430: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
e440: 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69  oc addDbConnecti
e450: 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  on { connection
e460: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b  {varName db} } {
e470: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e480: 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
e490: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
e4a0: 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
e4b0: 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
e4c0: 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
e4d0: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
e4e0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e4f0: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa e500: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # e510: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e520: 43 72 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 Create a correct e530: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d ly formatted nam e540: 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 e for the databa e550: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f se connection to e560: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # e570: 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 be added to the e580: 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 list managed by e590: 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 the Eagle interp e5a0: 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d reter... #. e5b0: 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f . set db [o e5c0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl e5d0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ e5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 45 61 67 6c .. Eagl e5f0: 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 e._Components.Pr e600: 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 ivate.FormatOps e610: 44 61 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 DatabaseObjectNa e620: 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c me$connection \
e630: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
e640: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62  teConnection [ob
e650: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
e660: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
e670: 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20  e NextId]]....
e680: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
e690: 4f 54 45 3a 20 41 64 64 20 74 68 65 20 64 61 74  OTE: Add the dat
e6a0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e6b0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
e6c0: 20 63 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c   caller to the l
e6d0: 69 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ist..      #
e6e0: 20 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77     of those know
e6f0: 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69  n to the Eagle i
e700: 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
e710: 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65     #..      obje
e720: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
e730: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65   +NonPublic Inte
e740: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
e750: 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64  e.connections Ad
e760: 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24  d \..          $e770: 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a db$connection..
e780: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
e790: 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66  oc cleanupDb { f
e7a0: 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65  ileName {varName
e7b0: 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72   db} {collect tr
e7c0: 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75  ue} {qualify tru
e7d0: 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e}..
e7e0: 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65           {delete
e7f0: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
e800: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e810: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
e820: 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20  rce all pending
e830: 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74  "garbage" object
e840: 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65  s to be collecte
e850: 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  d,..      #
e860: 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69    including SQLi
e870: 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  te statements an
e880: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73  d backup objects
e890: 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  ; this should al
e8a0: 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20  low..      #
e8b0: 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e     the underlyin
e8c0: 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  g database file
e8d0: 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a  to be deleted...
e8e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
e8f0: 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65  f {$collect} the e900: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c n {.. col e910: 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 lectGarbage$::t
e920: 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
e930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
e940: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
e950: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
e960: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
e970: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
e980: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
e990: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e9a0: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e  caller.  The han
e9b0: 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62  dle to the datab
e9c0: 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  ase previously o
e9d0: 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20  pened via the..
e9e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65       #       [se
e9f0: 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65  tupDb] procedure
ea00: 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65   should be store
ea10: 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20  d there...
ea20: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
ea30: 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a   $varName db.... ea40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # ea50: 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 NOTE: Close the ea60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 connection to t ea70: 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e he database now. ea80: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c This should al ea90: 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20 low us.. # eaa0: 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 to delete eab0: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 the underlying d eac0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 atabase file... ead0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if eae0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 {[info exists d eaf0: 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71 b] && [catch {sq eb00: 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 l close$db} err
eb10: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
eb20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
eb30: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
eb40: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f  ow failed to clo
eb50: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  se the database,
eb60: 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
eb70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
eb80: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c eb90: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr eba0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. ebb0: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: ebc0: 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 failed to close ebd0: 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 database \""$d
ebe0: 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20  b "\", error: "
ebf0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c  \..            \
ec00: 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. ec10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... ec20: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE ec30: 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 : First, see if ec40: 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 our caller has r ec50: 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d equested an in-m ec60: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d emory database.. ec70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ec80: 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 set isMemory [is ec90: 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 MemoryDb$fileNa
eca0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  me]....      #..
ecb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
ecc0: 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74  ild the full pat
ecd0: 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  h to the databas
ece0: 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f  e file name.  Fo
ecf0: 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d  r now, all test.
ed00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
ed10: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72  atabase files ar
ed20: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the
ed30: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
ed40: 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ory...      #..
ed50: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem ed60: 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d ory &&$qualify}
ed70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ed80: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
ed90: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
eda0: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory]
edb0: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65  [file tail $file edc0: 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d Name]].. }. edd0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ede0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check edf0: 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c if the file stil ee00: 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 l exists... ee10: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
ee20: 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c  isMemory && $del ee30: 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 ete && [file exi ee40: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
ee50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
ee60: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
ee70: 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67  E: Skip deleting
ee80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files
ee90: 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73  if somebody sets
eea0: 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20   the global..
eeb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72       #       var
eec0: 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74  iable to prevent
eed0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
eee0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
eef0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
ef00: 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d  cleanupDbFile)]}
ef10: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ef20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
ef30: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
ef40: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65  to delete the te
ef50: 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  st database file
ef60: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20   now...
ef70: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
ef80: 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74   {[set code [cat
ef90: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete
efa0: 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72  $fileName} error efb0: 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. efc0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. efd0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W efe0: 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 e somehow failed eff0: 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 to delete the f f000: 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ile, report why. f010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. f020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu f030: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
f040: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
f050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f060: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
f070: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
f080: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file
f090: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. f0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . f0b0: 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea f0c0: 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e nup, error: " \n f0d0: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
f0e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
f0f0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
f100: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f110: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
f120: 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65  w that we skippe
f130: 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66  d deleting the f
f140: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...
f150: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
f160: 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20   code 0....
f170: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te f180: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe f190: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. f1a0: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA f1b0: 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 RNING: skipped d f1c0: 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 eleting database f1d0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
f1e0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
f1f0: 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20       "\" during
f200: 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20  cleanup\n"]..
f210: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
f220: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
f230: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
f240: 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73  E: The file does
f250: 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63   not exist, succ
f260: 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d  ess!..        #.
f270: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64  .        set cod
f280: 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e 0..      }....
f290: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f        return $co f2a0: 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 de.. }..... f2b0: 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 49 6e proc setupDbIn f2c0: 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 terruptCallback f2d0: 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 { channel log } f2e0: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 {.. tputs$
f2f0: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65  channel "---- se
f300: 74 74 69 6e 67 20 75 70 20 64 65 62 75 67 67 65  tting up debugge
f310: 72 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c  r interrupt call
f320: 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  back... "....
f330: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
f340: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f350: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65      # NOTE: Make
f360: 20 73 75 72 65 20 74 68 65 20 73 63 72 69 70 74   sure the script
f370: 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 74 68   debugger and th
f380: 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72  e isolated inter
f390: 70 72 65 74 65 72 20 61 72 65 0d 0a 20 20 20 20  preter are..
f3a0: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 75      #       setu
f3b0: 70 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20  p and ready for
f3c0: 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  use...        #.
f3d0: 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 73  .        debug s
f3e0: 65 74 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a  etup true true..
f3f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f400: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61       # NOTE: Loa
f410: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
f420: 70 61 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68  packages into th
f430: 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72  e isolated inter
f440: 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  preter...
f450: 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75   #..        debu
f460: 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20  g eval {..
f470: 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
f480: 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  ire Eagle..
f490: 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
f4a0: 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61  uire Eagle.Libra
f4b0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61  ry..          pa
f4c0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
f4d0: 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20  gle.Test..
f4e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
f4f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f500: 3a 20 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73  : Copy the neces
f510: 73 61 72 79 20 76 61 72 69 61 62 6c 65 73 20 69  sary variables i
f520: 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64  nto the isolated
f530: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
f540: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f550: 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30    debug invoke 0
f560: 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e   set ::test_chan
f570: 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20  nel $channel; # f580: 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 NOTE: For [tputs f590: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 ]... debu f5a0: 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a g invoke 0 set : f5b0: 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 :test_log$log;
f5c0: 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f  # NOTE: For [tlo
f5d0: 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  g].....        #
f5e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f5f0: 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61  : Install the ca
f600: 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f  llback script to
f610: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e   be evaluated in
f620: 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20   the isolated..
f630: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
f640: 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 6e 20  nterpreter when
f650: 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72  this interpreter
f660: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 20   is interrupted
f670: 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20  by script..
f680: 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 63 65     #       cance
f690: 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20  llation, etc...
f6a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f6b0: 20 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b    debug callback
f6c0: 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20   apply {{sender
f6d0: 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  e} {..
f6e0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
f6f0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
f700: 69 73 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f  is callback is o
f710: 6e 65 20 74 68 61 74 20 77 65 20 63 61 72 65 20  ne that we care
f720: 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 20  about...
f730: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
f740: 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e  f {"Canceled" in
f750: 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65   [split [$e Inte f760: 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d rruptType] ", "] f770: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f790: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 # NOTE: Ite f7a0: 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c rate through all f7b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec f7c0: 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 tions known to t f7d0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. f7e0: 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 # parent i f7f0: 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... f800: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f810: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f f820: 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa f830: 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ir \.. f840: 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e [object in f850: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non f860: 50 75 62 6c 69 63 20 24 65 20 49 6e 74 65 72 70 Public$e Interp
f870: 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e  reter.connection
f880: 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  s] {..
f890: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
f8a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
f8b0: 65 6d 70 74 20 74 6f 20 63 61 6e 63 65 6c 20 61  empt to cancel a
f8c0: 6e 79 20 53 51 4c 20 71 75 65 72 69 65 73 20 69  ny SQL queries i
f8d0: 6e 20 70 72 6f 67 72 65 73 73 20 6f 6e 20 74 68  n progress on th
f8e0: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..
f8f0: 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61    #       databa
f900: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
f920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
f930: 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72  f {[catch {$pair f940: 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 Value.Cancel} e f950: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t f970: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
f980: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
f990: 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   \n \..
f9a0: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
f9b0: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
f9c0: 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79   to cancel query
f9d0: 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   for connection
f9e0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
f9f0: 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69             [$pai fa00: 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f r Key] "\", erro fa10: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
fa20: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
fa30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
fa40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
fa50: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20  }..        }}..
fa60: 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d       } error] ==
fa70: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
fa80: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
fa90: 74 20 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62  t interruptCallb
faa0: 61 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20  ack.sqlite3....
fab0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch fac0: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 annel yes\n.. fad0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. fae0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
faf0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
fb00: 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "no, error: " \n
fb10: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. fb20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... fb30: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e .. proc clean fb40: 75 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d upFile { fileNam fb50: 65 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d e {collect true} fb60: 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d {force false} } fb70: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. fb80: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem fb90: 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 pt to force all fba0: 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 pending "garbage fbb0: 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 " objects to be fbc0: 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 collected,.. fbd0: 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ fbe0: 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 ing SQLite state fbf0: 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 ments and backup fc00: 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 objects; this s fc10: 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 hould allow.. fc20: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 # the u fc30: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 nderlying databa fc40: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 se file to be de fc50: 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d leted... #. fc60: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
fc70: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
fc80: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
fc90: 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  age $::test_chan fca0: 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a nel.. }.... fcb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # fcc0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if fcd0: 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 the file still e fce0: 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d xists... #. fcf0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 . if {[file fd00: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
fd10: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
fd20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
fd30: 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65   NOTE: Skip dele
fd40: 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20  ting test files
fd50: 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73  if somebody sets
fd60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
fd70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
fd80: 20 20 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74        to prevent
fd90: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
fda0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f  .        if {$fo fdb0: 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 rce || ![info ex fdc0: 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 ists ::no(cleanu fdd0: 70 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d pFile)]} then {. fde0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. fdf0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: fe00: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 Attempt to delet fe10: 65 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 e the test file fe20: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 now... fe30: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if fe40: 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 {[set code [catc fe50: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 h {file delete$
fe60: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d  fileName} error]
fe70: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
fe80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fe90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
fea0: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20   somehow failed
feb0: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69  to delete the fi
fec0: 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d  le, report why..
fed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
fef0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe ff00: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. ff10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ff20: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: ff30: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete ff40: 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 test file \""$
ff50: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
ff70: 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20  during cleanup,
ff80: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e ff90: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. ffa0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } ffb0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. ffc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. ffd0: 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 # NOTE: Show tha ffe0: 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c t we skipped del fff0: 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d eting the file.. 10000 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 10010 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 10020 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0.... 10030 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
10040 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
10050 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
10060 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
10070 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  : skipped deleti
10080 6e 67 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22  ng test file \""
10090 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. 100a0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" 100b0 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e during cleanup\n 100c0 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 "].. }.. 100d0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 100e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 100f0 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 # NOTE: The fi 10100 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 le does not exis 10110 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 t, success!.. 10120 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10130 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 set code 0.. 10140 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 10150 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d urn$code..    }
10160 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f  .....    proc co
10170 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 63  llectGarbage { c
10180 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63  hannel {millisec
10190 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65  onds 1000} {quie
101a0 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  t true} } {..
101b0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
101c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
101d0 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66  GetTotalMemory f
101e0 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d  alse} result] ==
101f0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
10200 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 10210 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10220 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10230 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
10240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
10250 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  ---- memory in u
10260 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 62 65  se by the CLR be
10270 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e  fore collection.
10280 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
10290 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22 20        $result " 102a0 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 102b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 102c0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 102d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
102e0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
102f0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
10300 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
10310 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20   get CLR memory
10320 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20  usage, error: "
10330 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c  \..            \
10340 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 10350 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 10360 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 10370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 103a0 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 ###########.... 103b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 103c0 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 NOTE: Repeatedly 103d0 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c attempt to coll 103e0 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 ect garbage unti 103f0 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e l the allotted n 10400 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 umber.. # 10410 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 of millisec 10420 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 onds has elapsed 10430 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 . Always attemp 10440 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 t to collect gar 10450 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 bage.. # 10460 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 at least onc 10470 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 10480 20 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c set start [cl 10490 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 ock seconds].. 104a0 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 set stop [ex 104b0 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d pr {$start + ($m 104c0 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 illiseconds / 10 104d0 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 00)}].... d 104e0 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a o {.. #.. 104f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10500 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 Attempt to force 10510 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 a full garbage 10520 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 collection now. 10530 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 Report any.. 10540 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72 # err 10550 6f 72 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 or that is encou 10560 6e 74 65 72 65 64 20 69 66 20 77 65 20 66 61 69 ntered if we fai 10570 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 l... #.. 10580 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 10590 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke 105a0 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 105b0 72 79 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d ry true} error]} 105c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 105d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
105e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
105f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
10600 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
10610 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67  iled full garbag
10620 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72  e collection, er
10630 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
10640 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72          \n\t $er 10650 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 10660 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 }.... se 10670 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63 t now [clock sec 10680 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20 77 onds].. } w 10690 68 69 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 hile {$start <=
106a0 24 6e 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24  $now &&$now < $106b0 73 74 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 stop}.... # 106c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 106d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 106e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 106f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10700 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 ########.... 10710 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 10720 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 ject invoke GC G 10730 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 etTotalMemory fa 10740 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 lse} result] == 10750 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 10760 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
10770 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10780 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 10790 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 107b0 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 --- memory in us 107c0 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 e by the CLR aft 107d0 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e er collection... 107e0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 107f0 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79$result " by
10800 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
10810 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
10820 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
10830 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 10840 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 10850 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 10860 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g 10870 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 et CLR memory us 10880 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d age, error: " \. 10890 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c . \n\ 108a0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
108b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
108c0 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51  ..    proc getSQ
108d0 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73  LiteHandleCounts
108e0 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65   { channel {quie
108f0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
10900 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
10910 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  list]....      i
10920 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
10930 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
10940 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61      defineConsta
10950 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
10960 51 4c 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44  QLite.COUNT_HAND
10970 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  LE]} then {..
10980 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10990 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68  # NOTE: Add each
109a0 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
109b0 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65   count to the re
109c0 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20  sulting list...
109d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
109e0 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b    foreach name [
109f0 6c 69 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43  list connectionC
10a00 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f  ount statementCo
10a10 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d  unt backupCount]
10a20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
10a30 74 20 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20  t value [object
10a40 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
10a50 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
10a60 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
10a70 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
10a80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10a90 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20   $name].... 10aa0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
10ab0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10ac0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 10ad0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10ae0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10af0 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 "---- critic 10b00 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 al handle count 10b10 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 \""$name "\" is
10b20 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20   " $value \n].. 10b30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 10b40 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 10b50 72 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 result$value..
10b60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10b70 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65  } elseif {!$quie 10b80 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 10b90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 10ba0 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c NOTE: The actual 10bb0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 handle counts a 10bc0 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 re not available 10bd0 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 ; therefore, jus 10be0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 10bf0 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 return an emp 10c00 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 ty list... 10c10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 10c20 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
10c30 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  - critical handl
10c40 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c  e counts unavail
10c50 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d  able\n"..      }
10c60 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
10c70 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 10c80 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 .... proc shu 10c90 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 tdownSQLite { ch 10ca0 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c annel {force fal 10cb0 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 se} {quiet false 10cc0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 10cd0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 10ce0 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c ke sure that SQL 10cf0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 10d00 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 is completely s 10d10 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a hutdown. This.. 10d20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 # is 10d30 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 used by tests t 10d40 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 hat change confi 10d50 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 guration options 10d60 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 and/or those.. 10d70 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha 10d80 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 t need to make s 10d90 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 ure logging is i 10da0 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e nitialized (i.e. 10db0 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 just in case.. 10dc0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 10dd0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 10de0 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c rary was initial 10df0 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 ized in the proc 10e00 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 ess prior to.. 10e10 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 10e20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 SQLiteLog class 10e30 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 being able to se 10e40 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 tup its logging 10e50 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 callback)... 10e60 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c # Normal 10e70 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 ly, this should 10e80 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 only be performe 10e90 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c d if SQLite is l 10ea0 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 oaded and.. 10eb0 20 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 # ready f 10ec0 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te 10ed0 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 st suite... 10ee0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 #.. if {$f
10ef0 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74  orce || [isSQLit
10f00 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
10f10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
10f20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65      # BUGFIX: Be
10f30 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65  fore calling the
10f40 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e   native shutdown
10f50 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20   function, make
10f60 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20  sure both..
10f70 20 20 20 23 20 20 20 20 20 20 20 20 20 6f 66 20     #         of
10f80 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74  the PRAGMA relat
10f90 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d  ed directory nam
10fa0 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20  es are freed...
10fb0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10fc0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
10fd0 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 61  Directories $cha 10fe0 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 nnel true.... 10ff0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 11000 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d {object invoke - 11010 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 11020 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11030 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 11040 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 11050 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 11070 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 7d 20 lite3_shutdown} 11080 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 11090 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 110a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
110b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
110c0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 110d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 110f0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite 11100 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 3_shutdown()... 11110 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e ok: "$result \n
11120 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
11130 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
11140 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
11150 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 11160 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 11170 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
11180 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
11190 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
111a0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68   call sqlite3_sh
111b0 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f  utdown()... erro
111c0 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 111d0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 111e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 111f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 11200 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 .. proc repor 11210 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 tSQLiteResources 11220 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 { channel {quie 11230 74 20 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 t false} {collec 11240 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 t true} } {.. 11250 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11260 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75 74 TE: Skip all out 11270 70 75 74 20 69 66 20 77 65 20 61 72 65 20 72 75 put if we are ru 11280 6e 6e 69 6e 67 20 69 6e 20 22 71 75 69 65 74 22 nning in "quiet" 11290 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d mode... #. 112a0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 112b0 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 Constraint \.. 112c0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 defi 112d0 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste 112e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e m.Data.SQLite.IN 112f0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 TEROP_VIRTUAL_TA 11300 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 BLE] && \.. 11310 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 [haveConstr 11320 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 aint \.. 11330 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 defineCons 11340 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 tant.System.Data 11350 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45 .SQLite.TRACK_ME 11360 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 MORY_BYTES]} the 11370 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 11380 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
11390 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
113a0 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 113b0 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory 113c0 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 in use by SQLite 113d0 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 Memory... ".. 113e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 113f0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 11400 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 11410 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 11420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11430 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 11440 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 ite.SQLiteMemory 11450 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11460 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 bytesAllocat 11470 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 ed} memory] == 0 11480 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11490 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
114a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
114b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 114c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 114d0 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
114e0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
114f0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
11500 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
11510 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
11520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
11530 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 11540 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 11550 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
11560 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 11570 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 11580 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 11590 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
115a0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
115b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 115c0 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 hannel "---- max 115d0 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 imum memory in u 115e0 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f se by SQLiteMemo 115f0 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 ry... ".. 11600 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 11610 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object 11620 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 11630 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 11640 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 11650 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 11660 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c 0d 0a SQLiteMemory \.. 11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11680 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f maximumBytesAllo 11690 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d cated} memory] = 116a0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 116b0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
116c0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
116d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 116e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 116f0 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
11700 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
11710 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
11720 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
11730 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
11740 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  own....
11750 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 11760 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 11770 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
11780 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 11790 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 117a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 117b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 117c0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
117d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
117e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " 117f0 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d ---- current mem 11800 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 ory in use by SQ 11810 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 Lite... ".. 11820 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 11830 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 [catch {object i 11840 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 11850 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 11860 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 11870 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 11880 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 11890 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 118a0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f sqlite3_memory_ 118b0 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d used} memory] == 118c0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 118d0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
118e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
118f0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11900 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
11910 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
11920 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
11930 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
11940 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11950 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74   # NOTE: Maybe t
11960 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
11970 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69  ibrary is unavai
11980 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20  lable?..
11990 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  #..        set m
119a0 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
119b0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 119c0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 119d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
119e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
119f0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 11a00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 11a10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set 11a20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 result$memory;
11a30 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d  # NOTE: Return m
11a40 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20  emory in-use to
11a50 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20  our caller.....
11a60 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 11a70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11a80 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
11a90 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d   "---- maximum m
11aa0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
11ab0 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20  SQLite... "..
11ac0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
11ad0 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
11ae0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
11af0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
11b00 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
11b10 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
11b20 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11b30 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
11b40 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72     sqlite3_memor
11b50 79 5f 68 69 67 68 77 61 74 65 72 20 30 7d 20 6d  y_highwater 0} m
11b60 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
11b70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
11b80 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11b90 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 11ba0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
11bb0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 11bc0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 11bd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 11be0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 11bf0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 11c00 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 11c10 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 11c20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 11c30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11c40 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 11c50 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 11c60 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
11c70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
11c80 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 11c90 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
11ca0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
11cb0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
11cc0 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 11cd0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 11ce0 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 11cf0 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 e$channel..
11d00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
11d10 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11d20 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 11d30 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
11d40 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
11d50 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e   use by the CLR.
11d60 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  .. "..      }...
11d70 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
11d80 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
11d90 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
11da0 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 79  ry false} memory
11db0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
11dc0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
11dd0 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d  ing is integer -
11de0 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d  strict $memory]} 11df0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11e00 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11e10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11e20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 11e30 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
11e40 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
11e50 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
11e60 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
11e70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
11e80 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d   memory invalid.
11e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
11ea0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 11ec0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
11ed0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 11ee0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 11ef0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 11f00 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 11f10 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 11f20 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 11f30 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
11f40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11f50 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11f60 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
11f70 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
11f80 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
11f90 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 11fa0 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 11fb0 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF 11fc0 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 orSQLiteDirector 11fd0 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 ies { channel {r 11fe0 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d eset false} } {. 11ff0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12000 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 12010 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e the sqlite3_win 12020 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 12030 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 function is ava 12040 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 ilable... # 12050 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 .. tputs$c
12060 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
12070 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
12080 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ng for function
12090 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
120a0 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22  t_directory... "
120b0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
120c0 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
120d0 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69  call to the sqli
120e0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
120f0 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
12100 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20   uses the..
12110 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64   #       invalid
12120 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65   value 0 for the
12130 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
12140 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64    This code is d
12150 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23  esigned..      #
12160 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20         to check
12170 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66  if calling the f
12180 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69  unction will rai
12190 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  se an exception
121a0 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20  (i.e...      #
121b0 20 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20       the actual
121c0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
121d0 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20  nction does not
121e0 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61  matter as long a
121f0 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  s no..      #
12200 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73      directory is
12210 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20   changed)...
12220 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
12230 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
12240 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
12250 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
12260 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
12270 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
12280 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
12290 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c  eNativeMethods \
122a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
122b0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
122c0 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75  t_directory 0 nu
122d0 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ll}] == 0} then
122e0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
122f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61        # NOTE: Ca
12300 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  lling the sqlite
12310 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
12320 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64  ctory function d
12330 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  oes not..
12340 20 23 20 20 20 20 20 20 20 63 61 75 73 65 20 61   #       cause a
12350 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65  n exception; the
12360 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20  refore, it must
12370 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e  be available (i.
12380 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  e...        #
12390 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20      even though
123a0 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e  it should return
123b0 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 72   a failure retur
123c0 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a  n code in this..
123d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
123e0 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  case)...
123f0 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
12400 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33  nstraint sqlite3
12410 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
12420 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tory....
12430 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y 12440 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 es\n.... 12450 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12460 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c E: Does our call 12470 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 er want to reset 12480 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 the directories 12490 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ?.. #.. 124a0 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 if {$reset
124b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
124c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
124d0 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b   # NOTE: Now mak
124e0 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62  e sure the datab
124f0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72  ase and temporar
12500 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72  y directories ar
12510 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
12520 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72       reset their
12530 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c   default values,
12540 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65   which should be
12550 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d   null for both..
12560 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
12570 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c     Since the sql
12580 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
12590 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
125a0 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d  n is available,.
125b0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
125c0 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20     use it...
125d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
125e0 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65     for {set inde
125f0 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33  x 1} {$index < 3 12600 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b } {incr index} { 12610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 12620 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 12640 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 12650 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 12660 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12670 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 12680 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 12690 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d NativeMethods \. 126a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 126b0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e sqlite3_win 126c0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 126d0 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20 5c 0d$index null} \.
126e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
126f0 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d 3d 20       result] ==
12700 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
12710 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $12720 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 12730 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 12740 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 12750 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 all sqlite3_win3 12760 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 2_set_directory( 12770 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 "$index \..
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c                ",
12790 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20   null)... ok: "
127a0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 127b0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 127c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 127d0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
127e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12800 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
12810 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
12820 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78  rectory(" $index 12830 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12840 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e ", null).. 12850 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 12860 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
12870 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
12880 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
12890 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
128a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
128b0 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 128c0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 128d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do 128e0 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 es our caller wa 128f0 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 nt to reset the 12900 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 54 68 directories? Th 12910 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 is can only.. 12920 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 # be 12930 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c performed if SQL 12940 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e ite is loaded an 12950 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 d ready for use 12960 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 by the test.. 12970 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 69 # sui 12980 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te... #.. 12990 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
129a0 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 65 52  et && [isSQLiteR
129b0 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  eady]} then {..
129c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
129d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
129e0 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  w make sure the
129f0 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
12a00 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
12a10 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  es are..
12a20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20    #       reset
12a30 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61  their default va
12a40 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75  lues, which shou
12a50 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62  ld be null for b
12a60 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  oth...
12a70 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68  #       Since th
12a80 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
12a90 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75  set_directory fu
12aa0 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d  nction does not.
12ab0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
12ac0 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 65 20     appear to be
12ad0 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 74  available, use t
12ae0 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 50 52  he associated PR
12af0 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20  AGMA commands..
12b00 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
12b10 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20   instead...
12b20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12b30 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74    foreach direct
12b40 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73  ory [list data_s
12b50 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74  tore_directory t
12b60 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
12b70 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ory] {..
12b80 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70      set sql [app
12b90 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 20  endArgs "PRAGMA
12ba0 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 20 3d  " $directory " = 12bb0 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 \"\";"].... 12bc0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 12bd0 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 ch {executeSql$
12be0 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20  sql} result] ==
12bf0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
12c00 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $12c10 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 12c20 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 12c30 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 "---- e 12c40 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 xecute PRAGMA " 12c50 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20$directory "...
12c60 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ok: \"" \..
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65               $re 12c80 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 sult \"\n].. 12c90 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 12ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12cb0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
12cc0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ce0 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52  "---- execute PR
12cf0 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72  AGMA " $director 12d00 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 y "... error: " 12d10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12d20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
12d30 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
12d40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
12d50 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
12d60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
12d70 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
12d80 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68  Finally, show th
12d90 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value
12da0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
12db0 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20  and temporary..
12dc0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
12dd0 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20  ectories.  This
12de0 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66  can only be perf
12df0 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20  ormed if SQLite
12e00 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20  is loaded..
12e10 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61   #       and rea
12e20 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
12e30 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
12e40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
12e50 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79   {[isSQLiteReady
12e60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12e70 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63     foreach direc
12e80 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f  tory [list data_
12e90 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory
12ea0 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
12eb0 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  tory] {..
12ec0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 12ed0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d l [appendArgs "- 12ee0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24 --- checking "$
12ef0 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22  directory "... "
12f00 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ]....          s
12f10 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72  et sql [appendAr
12f20 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69  gs "PRAGMA " $di 12f30 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 rectory \;].... 12f40 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 12f50 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 tch {executeSql 12f60 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73$sql scalar} res
12f70 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
12f80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
12f90 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 12fa0 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c ppendArgs "ok: \ 12fb0 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d ""$result \"\n]
12fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
12fd0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
12fe0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12ff0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 72 [appendArgs "er 13000 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
13010 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
13020 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
13030 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
13040 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61  ....    proc loa
13050 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69  dSQLiteTestSetti
13060 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73  ngs { channel {s
13070 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74  uffix ""} {quiet
13080 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
13090 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
130a0 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67  TE: Skip loading
130b0 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 66   the settings if
130c0 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61 73   their usage has
130d0 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d   been disabled..
130e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
130f0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
13100 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73  s ::no(sqliteTes
13110 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65  tSettings)]} the
13120 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
13130 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
13140 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d  Load custom per-
13150 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d  user and/or per-
13160 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e  host test settin
13170 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  gs now...
13180 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
13190 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
131a0 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72  cl_platform(user
131b0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
131c0 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53 65        set userSe
131d0 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b  ttingsFileName [
131e0 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f  file join [getCo
131f0 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c  mmonDirectory] \
13200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13210 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74  [appendArgs sett
13220 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24  ings $suffix .$
13230 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75  ::tcl_platform(u
13240 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d  ser) .eagle]]...
13250 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
13260 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 65  file exists $use 13270 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 13280 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 13290 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
132a0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
132b0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
132c0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 132d0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 132e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 132f0 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 loading per-use 13300 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 r test settings 13310 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75$u
13330 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
13340 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20  ame \"...\n]..
13350 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
13360 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
13370 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31  catch {uplevel 1
13380 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75   [list source $u 13390 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 133a0 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 ame]} \.. 133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err 133c0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 133d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 133e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13400 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 13410 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13430 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 13440 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 failed to load 13450 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67 per-user setting 13460 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13480 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46$userSettingsF
13490 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72  ileName "\", err
134a0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 134b0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 134c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 134d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 134e0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 134f0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
13500 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
13510 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
13520 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 13530 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 13540 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 13550 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 skipped loading 13560 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 per-user test se 13570 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 13580 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13590 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e$userSettin
135a0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20  gsFileName "\",
135b0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
135c0 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  t\n"]..
135d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
135e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
135f0 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23          ########
13600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
13640 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
13650 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63  info exists ::tc
13660 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29  l_platform(host)
13670 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
13680 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 74       set hostSet
13690 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66  tingsFileName [f
136a0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d  ile join [getCom
136b0 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d  monDirectory] \.
136c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
136d0 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69  appendArgs setti
136e0 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a  ngs $suffix .$:
136f0 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f  :tcl_platform(ho
13700 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a  st) .eagle]]....
13710 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66            if {[f
13720 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 74  ile exists $host 13730 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 13740 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 13750 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
13760 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
13770 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
13780 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 13790 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 137a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 137b0 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 loading per-host 137c0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 test settings f 137d0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f$ho
137f0 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
13800 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20  me \"...\n]..
13810 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
13820 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
13830 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20  atch {uplevel 1
13840 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f  [list source $ho 13850 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa 13860 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 me]} \.. 13870 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro 13880 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 13890 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
138a0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
138c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 138d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 138f0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 13900 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 failed to load p 13910 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 er-host settings 13920 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13940 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69$hostSettingsFi
13950 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f  leName "\", erro
13960 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 13970 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 13980 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 13990 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 139a0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 139b0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
139c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
139d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $139e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 139f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 13a00 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 13a10 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 kipped loading p 13a20 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 13a30 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 13a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13a50 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67$hostSetting
13a60 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69  sFileName "\", i
13a70 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
13a80 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
13a90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
13aa0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
13ab0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
13ac0 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69      proc runSQLi
13ad0 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b  teTestPrologue {
13ae0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
13af0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
13b00 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73   running our cus
13b10 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20  tom prologue if
13b20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73  the main one has
13b30 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20   been..      #
13b40 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20       skipped...
13b50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
13b60 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
13b70 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61  ::no(prologue.ea
13b80 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  gle)]} then {..
13b90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13ba0 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
13bb0 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74  he "before-const
13bc0 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70  raints" custom p
13bd0 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70  er-user and/or p
13be0 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20  er-host..
13bf0 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65   #       test se
13c00 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20  ttings now...
13c10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13c20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
13c30 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65  loadSQLiteTestSe
13c40 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63  ttings $::test_c 13c50 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d hannel .before]. 13c60 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 13c70 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 # NOTE: De 13c80 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 termine the name 13c90 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 s of the native 13ca0 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 platform and arc 13cb0 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 13cc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 13cd0 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get 13ce0 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 BuildPlatform tr 13cf0 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ue].. set 13d00 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 architecture [a 13d10 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c rchitectureForPl 13d20 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d atform$platform
13d30 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
13d40 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
13d50 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72  Show the platfor
13d60 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75  m and architectu
13d70 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  re used to help
13d80 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20  locate the..
13d90 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69      #       nati
13da0 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d  ve build files..
13db0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13dc0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 13dd0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 13de0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13df0 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 "---- platf 13e00 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 orm for locating 13e10 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 native build fi 13e20 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 les is \"" \.. 13e30 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
13e40 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  orm \"\n]....
13e50 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 13e60 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 13e70 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 13e80 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 "---- arch 13e90 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 itecture for loc 13ea0 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 ating native bui 13eb0 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 ld files is \"" 13ec0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
13ed0 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c  architecture \"\
13ee0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
13ef0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
13f00 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66   Build a list of
13f10 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
13f20 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
13f30 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
13f40 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
13f50 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
13f60 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
13f70 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
13f80 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d  Lite.dll.config]
13f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
13fa0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
13fb0 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
13fc0 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64  uxiliary Managed
13fd0 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73   Debugging Assis
13fe0 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20  tants (MDA)..
13ff0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
14000 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
14010 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
14020 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14030 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66       set mdaConf
14040 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
14050 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
14060 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d   Installer.exe.m
14070 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 2e 65  da.config test.e
14080 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d  xe.mda.config \.
14090 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
140a0 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f  tlinq.exe.mda.co
140b0 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nfig]....
140c0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
140d0 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69  TE: Build the li
140e0 73 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73  st of native ass
140f0 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
14100 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65   we handle.  The
14110 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
14120 20 20 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79    reason the "Sy
14130 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
14140 2e 64 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e  .dll" file is in
14150 63 6c 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a  cluded here is..
14160 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14170 62 65 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64  because it could
14180 20 62 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f   be the mixed-mo
14190 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  de assembly...
141a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
141b0 20 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e   set nativeFileN
141c0 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  ames [list \..
141d0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
141e0 33 2e 64 6c 6c 20 53 51 4c 69 74 65 2e 49 6e 74  3.dll SQLite.Int
141f0 65 72 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e  erop.dll System.
14200 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
14210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
14220 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
14230 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66  uild the list of
14240 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
14250 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  y files that we
14260 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20  handle...
14270 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
14280 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
14290 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
142a0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
142b0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73  a.SQLite.dll Sys
142c0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
142d0 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  Linq.dll]....
142e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
142f0 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  # NOTE: Remove a
14300 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  ny test constrai
14310 6e 74 73 20 74 68 61 74 20 72 65 66 65 72 20 74  nts that refer t
14320 6f 20 74 68 65 20 6e 61 74 69 76 65 20 61 6e 64  o the native and
14330 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  /or..        #
14340 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73       managed ass
14350 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
14360 20 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73   we handle unles
14370 73 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d  s forbidden from
14380 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
14390 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20    doing so...
143a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
143b0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
143c0 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d  s ::no(sqliteRem
143d0 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  oveConstraints)]
143e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
143f0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
14400 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65  Name $configFile 14410 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 14420 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 14430 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 14440 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
14450 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
14460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
14470 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 14480 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 daConfigFileName 14490 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 144a0 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 144b0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 144c0 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
144d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
144e0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
144f0 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 14500 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 14510 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 14520 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 14530 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 ndArgs file_$fi
14540 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
14550 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
14560 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
14570 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e  me $managedFileN 14580 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 14590 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 145a0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 145b0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 file_$fileName
145c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
145d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
145e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
145f0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c  # NOTE: Skip all
14600 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
14610 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65  ite related file
14620 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74   handling (delet
14630 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  ing,..        #
14640 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61        copying, a
14650 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69  nd loading) if i
14660 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
14670 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
14680 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
14690 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65   ::no(sqliteFile
146a0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
146b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
146c0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
146d0 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74   trying to delet
146e0 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69  e any files if i
146f0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
14700 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14710 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
14720 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
14730 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74  SqliteFiles)]} t
14740 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14750 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
14760 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
14770 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65  SqliteConfigFile
14780 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
14790 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
147a0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e  ch fileName $con 147b0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 147d0 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 tryDeleteBinaryF 147e0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 ile$fileName..
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14800 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14810 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
14820 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
14830 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
14840 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74  NativeFiles)]} t
14850 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14860 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
14870 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
14880 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74  teSqliteImplicit
14890 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
148a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
148b0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
148c0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 148d0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 148e0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 148f0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
14900 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
14910 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
14920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
14930 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
14940 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
14950 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74  deleteSqlitePlat
14960 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c  formFiles)] && \
14970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14980 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
14990 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  th $platform] > 149a0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 149b0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 149c0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 ch fileName$nat
149d0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
149f0 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d    tryDeleteAssem
14a00 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  bly $fileName$p
14a10 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  latform..
14a20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
14a30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
14a50 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
14a60 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
14a70 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65  ArchitectureFile
14a80 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
14a90 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
14aa0 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68  ing length $arch 14ab0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 itecture] > 0} t 14ac0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14ad0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 14ae0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
14af0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14b10 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
14b20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69  $fileName$archi
14b30 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  tecture..
14b40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
14b50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
14b60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
14b70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
14b80 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
14b90 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e  (deleteSqliteMan
14ba0 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65  agedFiles)]} the
14bb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
14bc0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
14bd0 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65  ame $managedFile 14be0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 14bf0 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 14c00 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 teAssembly$file
14c10 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
14c20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
14c30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
14c40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
14c50 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
14c60 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68  TE: Check for th
14c70 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72  e "autoSelect" r
14c80 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20  untime option.
14c90 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20  If present,..
14ca0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
14cb0 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
14cc0 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74  tically select t
14cd0 68 65 20 66 69 72 73 74 20 61 76 61 69 6c 61 62  he first availab
14ce0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  le..          #
14cf0 20 20 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20        build (or
14d00 22 72 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51  "release") of SQ
14d10 4c 69 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e  Lite and System.
14d20 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20  Data.SQLite..
14d30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
14d40 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20  or use with the
14d50 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
14d60 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14d70 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
14d80 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65  imeOption autoSe
14d90 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lect]} then {..
14da0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
14db0 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42  [checkForSQLiteB
14dc0 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68  uilds $::test_ch 14dd0 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 annel true]} the 14de0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 14df0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 14e00 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 eReleases$::tes
14e10 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a  t_channel true..
14e20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
14e30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
14e40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14e50 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
14e60 70 20 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69  p trying to veri
14e70 66 79 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  fy the build dir
14e80 65 63 74 6f 72 79 20 69 66 20 69 6e 73 74 72 75  ectory if instru
14e90 63 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  cted;..
14ea0 20 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69   #       otherwi
14eb0 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74  se, make sure it
14ec0 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73   actually exists
14ed0 20 6f 72 20 68 61 6c 74 20 74 68 65 20 65 6e 74   or halt the ent
14ee0 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ire..          #
14ef0 20 20 20 20 20 20 20 74 65 73 74 69 6e 67 20 70         testing p
14f00 72 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f 65  rocess if it doe
14f10 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20  s not exist...
14f20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14f30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
14f40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69  exists ::no(veri
14f50 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  fyBuildDirectory
14f60 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
14f70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14f80 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
14f90 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68  t this point, th
14fa0 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
14fb0 79 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 20  y MUST exist as
14fc0 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  a..            #
14fd0 20 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 72         valid dir
14fe0 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74  ectory for the t
14ff0 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74  esting process t
15000 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20  o continue...
15010 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
15020 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65          set dire
15030 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44  ctory [getBuildD
15040 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20  irectory]....
15050 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66           if {![f
15060 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65  ile exists $dire 15070 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 ctory] || \.. 15080 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 ![f 15090 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 ile isdirectory 150a0 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65$directory]} the
150b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
150c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
150d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74      # NOTE: Just
150e0 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c   prior to actual
150f0 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74  ly halting the t
15100 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d  esting process,.
15110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
15120 20 20 20 20 20 20 20 61 64 64 20 61 6e 20 65 72         add an er
15130 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73 74 20  ror to the test
15140 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  log file...
15150 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
15160 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
15170 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 15180 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 151a0 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 "---- could not 151b0 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 verify build di 151c0 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 rectory \""$dir
151d0 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
151e0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
151f0 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c   all testing hal
15200 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20  ted\n"]....
15210 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
15220 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
15230 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69  : Raising a scri
15240 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68  pt error from th
15250 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20  is point should
15260 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20  halt..
15270 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
15280 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e  testing process.
15290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
152a0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
152b0 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
152c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
152d0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
152e0 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20  ot verify build
152f0 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64  directory \"" $d 15300 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 15320 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 ", all testing h 15330 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 alted"].. 15340 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 15350 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 15360 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 15370 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 15380 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 g to copy any fi 15390 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 les if instructe 153a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 153b0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 153c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 153d0 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 69 6c 65 o(copySqliteFile 153e0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 153f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 15400 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 15410 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66 69 67 copySqliteConfig 15420 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 15430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 15440 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 15450 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73$configFileNames
15460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15470 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64      tryCopyBuild
15480 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  File $fileName.. 15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 154a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 154b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 154c0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 154d0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e ::no(copySqliteN 154e0 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 ativeFiles)]} th 154f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 15500 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 15510 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 15520 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c qliteImplicitFil 15530 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 15550 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
15560 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
15570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
15580 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
15590 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  mbly $fileName.. 155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 155b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 155c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 155d0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 155e0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 155f0 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c qlitePlatformFil 15600 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 15610 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 15620 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
15630 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
15640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15650 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
15660 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 15670 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 15680 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 15690 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
156a0 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  Name $platform.. 156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 156c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 156d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 156e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 156f0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 15700 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 qliteArchitectur 15710 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 eFiles)] && \.. 15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15730 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 15740 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e$architecture] >
15750 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
15760 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
15770 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 15780 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 15790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 157a0 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 157b0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 ly$fileName $ar 157c0 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 chitecture.. 157d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 157f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 15800 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 15810 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 15820 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d 61 :no(copySqliteMa 15830 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 nagedFiles)]} th 15840 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 15850 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 15860 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c Name$managedFil
15870 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
15880 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70            tryCop
15890 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  yAssembly $fileN 158a0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 158b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 158c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 158d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 158e0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 158f0 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 15900 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 o load any files 15910 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d if instructed.. 15920 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 15930 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 15940 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 15950 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d oadSqliteFiles)] 15960 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15970 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 15980 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 15990 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 dSqliteImplicitF 159a0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 159c0 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 yLoadAssembly Sy 159d0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 159e0 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 159f0 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d tryLoadAssem 15a00 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e bly System.Data. 15a10 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d SQLite.Linq.dll. 15a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 15a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 15a40 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 15a50 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 ::no(loadSqliteP 15a60 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 latformFiles)] & 15a70 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 15a80 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 15a90 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
15aa0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
15ab0 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61            tryLoa
15ac0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d  dAssembly System
15ad0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
15ae0 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20   $platform.. 15af0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 15b00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 15b10 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 15b20 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 loadSqliteArchit 15b30 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 ectureFiles)] && 15b40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15b50 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 15b60 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
15b70 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
15b90 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73  LoadAssembly Sys
15ba0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
15bb0 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72  dll $architectur 15bc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 15bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 15be0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 15bf0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 15c00 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 Skip trying to d 15c10 65 6c 65 74 65 20 65 78 74 65 72 6e 61 6c 20 66 elete external f 15c20 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 iles if instruct 15c30 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 15c40 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 15c50 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 15c60 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 no(deleteSqliteE 15c70 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 xternalFiles)]} 15c80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 15c90 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 15ca0 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 Name$mdaConfigF
15cb0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
15cc0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
15cd0 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 69  eteBuildFile $fi 15ce0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 15cf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 15d00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 15d10 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 15d20 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 OTE: Skip trying 15d30 20 74 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61 to copy externa 15d40 6c 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 l files if instr 15d50 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 15d60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 15d70 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 15d80 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 15d90 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d ExternalFiles)]} 15da0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15db0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 15dc0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 # NOTE: Copy 15dd0 20 74 68 65 20 4d 61 6e 61 67 65 64 20 44 65 62 the Managed Deb 15de0 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 ugging Assistant 15df0 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 s (MDA) configur 15e00 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 ation.. 15e10 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 # file 15e20 66 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 for the Eagle sh 15e30 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 ell to the build 15e40 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 output director 15e50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y,.. 15e60 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 # while us 15e70 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 ing each of the 15e80 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 names of the var 15e90 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 ious legacy test 15ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 15eb0 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 executable 15ec0 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 s. This will he 15ed0 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 lp to make sure 15ee0 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 that all the.. 15ef0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 15f00 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 20 72 legacy tests r 15f10 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c 79 20 un with exactly 15f20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66 20 the same set of 15f30 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 Managed.. 15f40 20 20 20 20 20 23 20 20 20 20 20 20 20 44 65 62 # Deb 15f50 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 ugging Assistant 15f60 73 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 s configured... 15f70 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 15f80 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 15f90 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 h fileName$mdaC
15fa0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
15fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15fc0 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c  tryCopyBinaryFil
15fd0 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65  e EagleShell.exe
15fe0 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 22 22 20 24  .mda.config "" $15ff0 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 16000 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16010 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 16020 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 16030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 16040 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
16050 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
16060 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16070 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
16080 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 33  ion of \"sqlite3
16090 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20  .dll\"... " \..
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
160b0 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42  le version [getB
160c0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71  inaryFileName sq
160d0 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  lite3.dll]] \n].
160e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
160f0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
16100 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $16110 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 16120 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 16130 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 16140 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 16150 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 f \"SQLite.Inter 16160 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d op.dll\"... " \. 16170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 16180 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 file version [ge 16190 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 161a0 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 SQLite.Interop.d 161b0 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ll]] \n].. 161c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 161d0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 161e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
161f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
16200 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
16210 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
16220 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
16230 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
16240 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20  dll\"... " \..
16250 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
16260 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
16270 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
16280 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
16290 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  dll]] \n]..
162a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
162b0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
162c0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 162d0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 162e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 162f0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 16300 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 version of \"Sy 16310 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 16320 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 .Linq.dll\"... " 16330 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16340 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 [file version 16350 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 16360 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 me System.Data.S 16370 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d QLite.Linq.dll]] 16380 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 16390 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 163a0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
163b0 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68  latform] > 0} th
163c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
163d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
163e0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 163f0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 16400 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 16410 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 16420 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 16430 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d \""$platform \.
16440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16450 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22   "/sqlite3.dll\"
16460 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73  ... " [file vers
16470 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
16480 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72         [getBinar
16490 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65  yFileName sqlite
164a0 33 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d  3.dll $platform] 164b0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 164c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 164d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 164e0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
164f0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
16500 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16510 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
16520 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
16530 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d  \"" $platform \. 16540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16550 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f "/SQLite.Intero 16560 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 p.dll\"... " [fi 16570 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 le version \.. 16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 16590 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 165a0 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e SQLite.Interop. 165b0 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 dll$platform]]
165c0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
165d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  ....          ca
165e0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
165f0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 16600 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 16610 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 16620 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 16630 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 16640 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 "$platform \..
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16660 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  /System.Data.SQL
16670 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b  ite.dll\"... " [
16680 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a  file version \..
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
166a0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
166b0 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
166c0 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66  QLite.dll $platf 166d0 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 orm]] \n].. 166e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 166f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 16700 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 16710 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e$architecture] >
16720 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
16730 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
16740 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
16750 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 16760 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16780 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 16790 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
167a0 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
167b0 20 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c             "/sql
167c0 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  ite3.dll\"... "
167d0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
167e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
167f0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
16800 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20  ame sqlite3.dll
16810 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20  $architecture]] 16820 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 16830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 .... ca 16840 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 16850 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
16860 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
16870 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
16880 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
16890 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
168a0 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20  " $architecture 168b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 168c0 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 "/SQLite.Inte 168d0 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b rop.dll\"... " [ 168e0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16900 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 16910 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f me SQLite.Intero 16920 70 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 p.dll$architect
16930 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  ure]] \n]..
16940 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
16950 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
16960 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $16970 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 16980 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 169a0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 169b0 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 of \""$archite
169c0 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20  cture \..
169d0 20 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65           "/Syste
169e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
169f0 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76  l\"... " [file v
16a00 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
16a10 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
16a20 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
16a30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
16a40 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72  dll $architectur 16a50 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e]] \n].. 16a60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 16a70 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 ... set a 16a80 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 ssemblies [objec 16a90 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 t invoke AppDoma 16aa0 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e in.CurrentDomain 16ab0 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d GetAssemblies]. 16ac0 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 ... objec 16ad0 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 t foreach assemb 16ae0 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b ly$assemblies {
16af0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
16b00 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b  [string match \{
16b10 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16b20 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20  te* $assembly]} 16b30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 16b40 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
16b50 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
16b60 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
16b70 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
16b80 6f 75 6e 64 20 61 73 73 65 6d 62 6c 79 3a 20 22  ound assembly: "
16b90 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a   $assembly \n].. 16ba0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 16bb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16bc0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 16bd0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
16be0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
16c00 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e  - define constan
16c10 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e  ts for \"System.
16c20 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e  Data.SQLite\"...
16c30 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   "....
16c40 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65  if {[catch {obje
16c50 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
16c60 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16c80 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
16c90 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69  ite.SQLite3 Defi
16ca0 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 5c 0d 0a  neConstants} \..
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16cc0 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74    defineConstant
16cd0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
16ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
16cf0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 16d00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b el [appendArgs [ 16d10 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 formatList [lsor 16d20 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 16d30 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73$defineCons
16d40 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c  tants] <none>] \
16d50 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
16d60 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
16d70 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 16d80 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 t_channel unknow 16d90 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n\n.. } 16da0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 16db0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 16dc0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 16dd0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
16de0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16df0 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65   "---- source ve
16e00 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
16e10 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
16e20 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  l\"... "....
16e30 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
16e40 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
16e50 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
16e60 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
16e70 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
16e80 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
16e90 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69  Connection Provi
16ea0 64 65 72 56 65 72 73 69 6f 6e 7d 20 5c 0d 0a 20  derVersion} \..
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ec0 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20   version] == 0}
16ed0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16ee0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
16ef0 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d  length $version] 16f00 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 16f20 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 version null.. 16f30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 16f40 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 16f50 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
16f60 5b 61 70 70 65 6e 64 41 72 67 73 20 24 76 65 72  [appendArgs $ver 16f70 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sion \n].. 16f80 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 16f90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 16fa0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
16fb0 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20  unknown\n..
16fc0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
16fd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
16fe0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
16ff0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 17000 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 17010 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 "---- sou 17020 72 63 65 20 63 68 65 63 6b 6f 75 74 20 6f 66 20 rce checkout of 17030 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 17040 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d Lite.dll\"... ". 17050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 17060 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object 17070 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 17080 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 170a0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 170b0 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 170c0 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 n ProviderSource 170d0 49 64 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 Id} \.. 170e0 20 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 49 sourceI 170f0 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d d] == 0} then {. 17100 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 17110 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 17120 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d$sourceId] == 0}
17130 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17140 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63         set sourc
17150 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  eId null..
17160 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
17170 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 17180 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 17190 6e 64 41 72 67 73 20 24 73 6f 75 72 63 65 49 64 ndArgs$sourceId
171a0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
171b0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
171c0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 171d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 171e0 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 171f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 17200 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 17210 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 17220 6b 20 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 k the available 17230 62 75 69 6c 64 73 20 28 61 6e 64 20 22 72 65 6c builds (and "rel 17240 65 61 73 65 73 22 29 20 6f 66 20 53 51 4c 69 74 eases") of SQLit 17250 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 e and.. # 17260 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 17270 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 ta.SQLite... 17280 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 17290 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 heckForSQLiteBui 172a0 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e lds$::test_chan
172b0 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20 63 68 65  nel..        che
172c0 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61  ckForSQLiteRelea
172d0 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ses $::test_chan 172e0 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 172f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 17300 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 : Now, we need t 17310 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 o know if the SQ 17320 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 17330 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a y is available.. 17340 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 17350 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 (i.e. because th 17360 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 e managed-only S 17370 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 17380 65 20 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a e assembly can.. 17390 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 173a0 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b load without it; 173b0 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e however, it can 173c0 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 not do anything 173d0 75 73 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a useful without.. 173e0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 173f0 69 74 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 it). If we are 17400 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d using the mixed- 17410 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e mode assembly an 17420 64 20 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 d we already.. 17430 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f # fo 17440 75 6e 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 und it (above), 17450 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 this should alwa 17460 79 73 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 ys succeed... 17470 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17480 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 checkForSQLiteLi 17490 62 72 61 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 brary$::test_ch
174a0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
174b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
174c0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
174d0 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20   SQLite interop
174e0 61 73 73 65 6d 62 6c 79 20 69 73 20 61 76 61 69  assembly is avai
174f0 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...
17500 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
17510 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  ForSQLiteInterop
17520 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 17530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 17540 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 17550 68 65 63 6b 20 74 68 65 20 53 51 4c 69 74 65 20 heck the SQLite 17560 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d database and tem 17570 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 porary directori 17580 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es... #.. 17590 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 175a0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 175b0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
175c0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
175d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
175e0 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72  Attempt to deter
175f0 6d 69 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20  mine if various
17600 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
17610 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d  ions needed for.
17620 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
17630 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
17640 73 20 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66  s were enabled f
17650 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  or the managed a
17660 73 73 65 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d  ssembly.  There.
17670 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
17680 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c   are some compil
17690 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74  e-time options t
176a0 68 61 74 20 6d 75 73 74 20 61 6c 73 6f 20 68 61  hat must also ha
176b0 76 65 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d  ve been enabled.
176c0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
176d0 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70   for the interop
176e0 20 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64   assembly in ord
176f0 65 72 20 74 6f 20 62 65 20 65 66 66 65 63 74 69  er to be effecti
17700 76 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a  ve.  For those..
17710 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
17720 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c  options, it will
17730 20 62 65 20 61 73 73 75 6d 65 64 20 74 68 61 74   be assumed that
17740 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20   it was enabled
17750 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 0d  for the interop.
17760 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
17770 20 61 73 73 65 6d 62 6c 79 20 69 66 20 69 74 20   assembly if it
17780 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20  was enabled for
17790 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
177a0 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23  mbly...        #
177b0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
177c0 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  h defineConstant
177d0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
177e0 20 20 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54        CHECK_STAT
177f0 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44  E COUNT_HANDLE D
17800 45 42 55 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44  EBUG INTEROP_COD
17810 45 43 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  EC INTEROP_DEBUG
17820 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17830 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f  INTEROP_EXTENSIO
17840 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45  N_FUNCTIONS INTE
17850 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45  ROP_LEGACY_CLOSE
17860 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c 0d 0a   INTEROP_LOG \..
17870 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45              INTE
17880 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49  ROP_TEST_EXTENSI
17890 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  ON INTEROP_VIRTU
178a0 41 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 20  AL_TABLE NET_20
178b0 4e 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20 20 20  NET_35 \..
178c0 20 20 20 20 20 20 4e 45 54 5f 34 30 20 4e 45 54        NET_40 NET
178d0 5f 34 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 5f  _45 NET_451 NET_
178e0 43 4f 4d 50 41 43 54 5f 32 30 20 50 4c 41 54 46  COMPACT_20 PLATF
178f0 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
17900 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 20 20 20 20  WORK \..
17910 20 20 20 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49      PRELOAD_NATI
17920 56 45 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52  VE_LIBRARY RETAR
17930 47 45 54 41 42 4c 45 20 53 51 4c 49 54 45 5f 53  GETABLE SQLITE_S
17940 54 41 4e 44 41 52 44 20 5c 0d 0a 20 20 20 20 20  TANDARD \..
17950 20 20 20 20 20 20 20 54 48 52 4f 57 5f 4f 4e 5f         THROW_ON_
17960 44 49 53 50 4f 53 45 44 20 54 52 41 43 45 20 54  DISPOSED TRACE T
17970 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20  RACE_CONNECTION
17980 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 5c 0d 0a  TRACE_HANDLE \..
17990 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43              TRAC
179a0 45 5f 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f  E_PRELOAD TRACE_
179b0 53 48 41 52 45 44 20 54 52 41 43 45 5f 53 54 41  SHARED TRACE_STA
179c0 54 45 4d 45 4e 54 20 54 52 41 43 45 5f 57 41 52  TEMENT TRACE_WAR
179d0 4e 49 4e 47 20 5c 0d 0a 20 20 20 20 20 20 20 20  NING \..
179e0 20 20 20 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59      TRACK_MEMORY
179f0 5f 42 59 54 45 53 20 55 53 45 5f 49 4e 54 45 52  _BYTES USE_INTER
17a00 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41  OP_DLL USE_PREPA
17a10 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b  RE_V2 WINDOWS] {
17a20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
17a30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
17a40 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f   Check if the co
17a50 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
17a60 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74  n is listed in t
17a70 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20  he list of..
17a80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64        #       "d
17a90 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22  efine constants"
17aa0 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62   kept track of b
17ab0 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73  y the managed as
17ac0 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...
17ad0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
17ae0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65  checkForSQLiteDe
17af0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a  fineConstant $:: 17b00 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 test_channel$de
17b10 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20  fineConstant..
17b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
17b30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
17b40 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20  NOTE: Check the
17b50 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65  current build ye
17b60 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20  ar.  Basically,
17b70 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a  this indicates..
17b80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
17b90 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66  which version of
17ba0 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20   MSBuild and/or
17bb0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61  Visual Studio wa
17bc0 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20  s used to..
17bd0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69     #       compi
17be0 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20  le the assembly
17bf0 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74  binaries under t
17c00 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  est...        #.
17c10 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $17c20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 17c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 17c40 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 17c50 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 17c60 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e ite build year.. 17c70 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 . ".... s 17c80 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c et year [getBuil 17c90 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 dYear].. 17ca0 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a 17cb0 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 ppendArgs buildY 17cc0 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 ear.$year]..
17cd0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 17ce0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 17cf0 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 ndArgs \"$year
17d00 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
17d10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
17d20 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75  TE: Check the cu
17d30 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66  rrent build conf
17d40 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73  iguration.  This
17d50 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79   should normally
17d60 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
17d70 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65 62    be either "Deb
17d80 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22  ug" or "Release"
17d90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
17da0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 17db0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 17dc0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 17dd0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 17de0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 17df0 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 build configura 17e00 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 tion... ".... 17e10 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75 set configu 17e20 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 ration [getBuild 17e30 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a Configuration].. 17e40 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 17e50 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 17e60 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 s buildConfigura 17e70 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 tion.$configura
17e80 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74  tion]..        t
17e90 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 17ea0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 17eb0 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69 \"$configurati
17ec0 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  on \"\n]....
17ed0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
17ee0 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65   NOTE: Try to se
17ef0 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74  tup an interrupt
17f00 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using
17f10 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67  the script debug
17f20 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ger..        #
17f30 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63       that will c
17f40 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75  ancel all SQL qu
17f50 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73  eries in progres
17f60 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61  s for all databa
17f70 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  se..        #
17f80 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20      connections
17f90 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e  known to this in
17fa0 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
17fb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
17fc0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
17fd0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65   ::no(sqliteInte
17fe0 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d  rruptCallback)]}
17ff0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18000 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72     setupDbInterr
18010 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74  uptCallback $::t 18020 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 est_channel$::t
18030 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20  est_log..
18040 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
18050 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
18060 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e   Check for the n
18070 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70  ative runtime op
18080 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c  tion, which woul
18090 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20  d mean we are..
180a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75         #       u
180b0 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d  sing the mixed-m
180c0 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
180d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
180e0 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d    checkForRuntim
180f0 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f  eOption $::test_ 18100 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a channel native.. 18110 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 18120 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 18130 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 ck if the test s 18140 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e uite should coun 18150 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 t the number of 18160 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 connections.. 18170 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 # "op 18180 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 ened" and "close 18190 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c d" from the pool 181a0 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e when determinin 181b0 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 g if a test.. 181c0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73 # pas 181d0 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 sed. Disabling 181e0 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 this behavior is 181f0 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 sometimes neces 18200 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 sary (e.g... 18210 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 # duri 18220 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 ng the release t 18230 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 esting process) 18240 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 because there ar 18250 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 e several.. 18260 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 # tests 18270 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 that rely on th 18280 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 e "opened from p 18290 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 ool" count being 182a0 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 greater.. 182b0 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a # than z 182c0 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 ero. These test 182d0 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 s may fail due t 182e0 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d o the non-determ 182f0 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 inistic.. 18300 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f # behavio 18310 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c r of the CLR GC, 18320 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 even when there 18330 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 is no bug in th 18340 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 e code.. 18350 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 # being te 18360 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 sted... # 18370 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 18380 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 orRuntimeOption 18390 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
183a0 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a  noPoolCounts....
183b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
183c0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72     # NOTE: Repor
183d0 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75  t the resource u
183e0 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75  sage prior to ru
183f0 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e  nning any tests.
18400 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18410 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74       reportSQLit
18420 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65  eResources $::te 18430 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 18440 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18450 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 # NOTE: Show th 18460 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63 6f e active test co 18470 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 nstraints... 18480 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 18490 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
184a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
184b0 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e   "---- constrain
184c0 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ts: " \..
184d0 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74       [formatList
184e0 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73   [lsort [getCons
184f0 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e  traints]] <none>
18500 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ] \n]....
18510 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
18520 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73  TE: Save the tes
18530 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  t constraints fo
18540 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73  r use by threads
18550 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73   created in this
18560 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
18570 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f    application do
18580 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e  main.  This is n
18590 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65  ecessary because
185a0 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a   all the Eagle..
185b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
185c0 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69  "test context" i
185d0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65  nformation is pe
185e0 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20  r-thread...
185f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
18600 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
18610 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e  ::test_constrain
18620 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ts]} then {..
18630 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
18640 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a  t_constraints $: 18650 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e :eagle_tests(con 18660 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 straints).. 18670 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 18680 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18690 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 E: Load the "aft 186a0 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 er-constraints" 186b0 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 186c0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d and/or per-host. 186d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 186e0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e test settings n 186f0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ow... #.. 18700 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 18710 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 1 [list loadSQLi 18720 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 teTestSettings$
18730 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e  ::test_channel .
18740 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  after]....
18750 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
18760 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f  OTE: Show when o
18770 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c  ur tests actuall
18780 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a  y began (now)...
18790 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
187a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 187b0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 187c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 187d0 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d "---- System 187e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 .Data.SQLite tes 187f0 74 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c 0d ts began at " \. 18800 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c . [cl 18810 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 ock format [cloc 18820 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d k seconds]] \n]. 18830 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 18840 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e .... proc run 18850 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 SQLiteTestEpilog 18860 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue {} {.. # 18870 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 18880 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 Skip running our 18890 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 custom epilogue 188a0 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 if the main one 188b0 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 has been.. 188c0 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 # skipped 188d0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 188e0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 188f0 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 sts ::no(epilogu 18900 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 e.eagle)]} then 18910 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 18920 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 18930 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 ow when our test 18940 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 s actually ended 18950 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 (now)... 18960 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 18970 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
18980 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
18990 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
189a0 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  -- System.Data.S
189b0 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 65  QLite tests ende
189c0 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20  d at " \..
189d0 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72        [clock for
189e0 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  mat [clock secon
189f0 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ds]] \n]....
18a00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
18a10 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20   BUGFIX: Before
18a20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 6e  checking the fin
18a30 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e 20  al resources in
18a40 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 6d  use by SQLite, m
18a50 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ake..        #
18a60 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 68         sure both
18a70 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72   of the PRAGMA r
18a80 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79  elated directory
18a90 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64   names are freed
18aa0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
18ab0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
18ac0 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20  LiteDirectories
18ad0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 18ae0 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 true.... 18af0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18b00 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 E: Also report t 18b10 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 he resource usag 18b20 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 e after running 18b30 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 the tests... 18b40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 18b50 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 18b60 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 rces$::test_cha
18b70 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
18b80 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
18b90 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63 72  E: Report the cr
18ba0 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f  itical handle co
18bb0 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e 69  unts after runni
18bc0 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20  ng the tests...
18bd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18be0 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c    getSQLiteHandl
18bf0 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f  eCounts \$::test_
18c00 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d  channel..      }
18c10 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
18c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c60 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20  ###########..
18c70 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
18c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 20 45  ############## E
18c90 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23  ND Eagle ONLY ##
18ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18cb0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..
18cc0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
18cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18d00 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############..
18d10 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e   }....  #..  # N
18d20 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 6e 61  OTE: Save the na
18d30 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65 63 74  me of the direct
18d40 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ory containing t
18d50 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a  his file...  #..
18d60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
18d70 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63  sts common_direc
18d80 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
18d90 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69     set common_di
18da0 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69  rectory [file di
18db0 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69  rname [info scri
18dc0 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23  pt]]..  }....  #
18dd0 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76  ..  # NOTE: Prov
18de0 69 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ide the System.D
18df0 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 20  ata.SQLite test
18e00 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69  package to the i
18e10 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23  nterpreter...  #
18e20 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76  ..  package prov
18e30 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ide System.Data.
18e40 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30 0d  SQLite.Test 1.0.
18e50 0a 7d 0d 0a                                      .}..