System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 1d72212896281eecb1478f26fc9268842af563ea:

• File Tests/common.eagle — part of check-in [16fb7e87b5] at 2014-01-11 04:27:23 on branch ef6 — Minor adjustments to automation. (user: mistachkin size: 108490)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 32 30 31 32 2c 20 6f 72 20   2010, 2012, or
0460: 32 30 31 33 20 62 75 69 6c 64 20 73 79 73 74 65  2013 build syste
0470: 6d 73 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65  ms.  To override
0480: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
0490: 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74       value via t
04a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c  he command line,
04b0: 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64   enter a command
04c0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
04d0: 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  of..      #
04e0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following
04f0: 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65  (all on one line
0500: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
0510: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0520: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0530: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0540: 73 74 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20  st_year 2005"..
0550: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0560: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0570: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0580: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0590: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
05a0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
05b0: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
05c0: 30 38 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  08"..      #
05d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
05e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
05f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0600: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0610: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0620: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0630: 65 61 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20  ear 2010"..
0640: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0650: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0660: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0670: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0680: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0690: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
06a0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d  test_year 2012".
06b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
06c0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
06d0: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
06e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
06f0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0700: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0710: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0720: 32 30 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20  2013"..      #
0730: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0740: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0750: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0760: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0770: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0780: 69 61 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e  ialize "unset -n
0790: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79  ocomplain test_y
07a0: 65 61 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ear"..      #
07b0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
07c0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
07d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
07e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
07f0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26   ::test_year] &&
0800: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0810: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20  $::test_year] > 0820: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0830: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 0840: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 0850: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 0860: 72 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 r. If this vari 0870: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 0880: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 0890: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 default va 08a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 08b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 08c0: 6e 6f 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 not Eagle has be 08d0: 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 en.. # 08e0: 20 20 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 compiled aga 08f0: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 0900: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 0910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0920: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
0930: 74 5f 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20  t_year..      }
0940: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
0960: 45 3a 20 49 66 20 45 61 67 6c 65 20 68 61 73 20  E: If Eagle has
0970: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67  been compiled ag
0980: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34  ainst the CLR v4
0990: 2e 30 2c 20 75 73 65 20 22 32 30 31 30 22 20 62  .0, use "2010" b
09a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
09b0: 20 20 20 64 65 66 61 75 6c 74 20 28 77 65 20 63     default (we c
09c0: 6f 75 6c 64 20 75 73 65 20 22 32 30 31 32 22 20  ould use "2012"
09d0: 6f 72 20 22 32 30 31 33 22 20 69 6e 20 74 68 61  or "2013" in tha
09e0: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 20  t case as well)
09f0: 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
0a00: 20 20 20 20 74 68 65 20 74 65 73 74 20 79 65 61      the test yea
0a10: 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 75 73  r; otherwise, us
0a20: 65 20 22 32 30 30 38 22 20 62 79 20 64 65 66 61  e "2008" by defa
0a30: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
0a50: 20 20 20 22 32 30 30 35 22 20 69 6e 20 74 68 61     "2005" in tha
0a60: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 2e  t case as well).
0a70: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
0a80: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
0a90: 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ]..        #
0aa0: 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68     version of th
0ab0: 65 20 43 4c 52 20 69 73 20 72 65 6c 65 61 73 65  e CLR is release
0ac0: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
0ad0: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 0d 0a 20  ll have to be..
0ae0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
0af0: 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66  hanged.  The def
0b00: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 74  ault test year t
0b10: 6f 20 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  o use for a part
0b20: 69 63 75 6c 61 72 20 43 4c 52 0d 0a 20 20 20 20  icular CLR..
0b30: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73      #       vers
0b40: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72  ion may be overr
0b50: 69 64 64 65 6e 20 62 79 20 73 65 74 74 69 6e 67  idden by setting
0b60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
0b70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
0b80: 20 20 20 20 20 20 22 74 65 73 74 5f 79 65 61 72        "test_year
0b90: 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72 65  _clr_v$X", where 0ba0: 20 22 24 58 22 20 6d 61 79 20 5b 63 75 72 72 65 "$X" may [curre
0bb0: 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20  ntly] be either
0bc0: 22 32 22 0d 0a 20 20 20 20 20 20 20 20 23 20 20  "2"..        #
0bd0: 20 20 20 20 20 6f 72 20 22 34 22 2e 0d 0a 20 20       or "4"...
0be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0bf0: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
0c00: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
0c10: 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e40]} then {..
0c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0c30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
0c40: 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 26 26 20  year_clr_v4] &&
0c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
0c60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0c70: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72  $::test_year_clr 0c80: 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _v4] > 0} then { 0c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 0ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 0cb0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 0cc0: 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 cified test year 0cd0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 0ce0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 0cf0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 0d00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
0d10: 61 72 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20  ar_clr_v4..
0d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0d30: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d40: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
0d50: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
0d60: 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  t test year for
0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
0d80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0da0: 20 32 30 31 30 3b 20 23 20 54 4f 44 4f 3a 20 47   2010; # TODO: G
0db0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64  ood "fallback" d
0dc0: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20  efault?..
0dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
0de0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0df0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0e00: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
0e10: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
0e20: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
0e30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 0e40: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 3e t_year_clr_v2] > 0e50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 0e60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0e70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 0e80: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 0e90: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 0ea0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 he CLR v2.0... 0eb0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 0ed0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
0ee0: 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v2..          }
0ef0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
0f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0f20: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
0f30: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
0f40: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
0f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f60: 20 20 20 20 72 65 74 75 72 6e 20 32 30 30 38 3b      return 2008;
0f70: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
0f80: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
0f90: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
0fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0fb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
0fc0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59    proc getBuildY
0fd0: 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ears {} {..
0fe0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0ff0: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73  : See if the lis
1000: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1010: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1020: 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d  den by the user.
1030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28  .      #       (
1040: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1050: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
1060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1070: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
1080: 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c  st_years] && [ll
1090: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 10a0: 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ars] > 0} then { 10b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 10d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 10e0: 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 ist of test year 10f0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1110: 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20  :test_years..
1120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1140: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1150: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
1160: 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20  test years...
1170: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1180: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30  return [list 200
1190: 35 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32  5 2008 2010 2012
11a0: 20 32 30 31 33 5d 0d 0a 20 20 20 20 20 20 7d 0d   2013]..      }.
11b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
11c0: 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c 61 74  roc getBuildPlat
11d0: 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 7d 20  form { native }
11e0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  {..      if {[in
11f0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
1200: 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 5c 0d  _platform] && \.
1210: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
1220: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1230: 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d t_platform] > 0} 1240: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1250: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1260: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1270: 69 66 69 65 64 20 74 65 73 74 20 70 6c 61 74 66 ified test platf 1280: 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20 76 61 orm. If this va 1290: 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 riable is not se 12a0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 t,.. # 12b0: 20 20 20 20 74 68 65 20 64 65 66 61 75 6c 74 20 the default 12c0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 value will be ba 12d0: 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63 68 69 sed on the machi 12e0: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 2e ne architecture. 12f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1300: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1310: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24 3a 3a r {$native ? $:: 1320: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 test_platform : 1330: 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ""}].. } el 1340: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 1350: 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e ts ::test_machin 1360: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 e] && \.. 1370: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 1380: 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e h$::test_machin
1390: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
13a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13b0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
13c0: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65  ative builds, re
13d0: 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  turn the platfor
13e0: 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e  m name correspon
13f0: 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20  ding to..
1400: 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73   #       the tes
1410: 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74  t machine archit
1420: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73  ecture; otherwis
1430: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
1440: 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ty..        #
1450: 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...
1460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1470: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a  return [expr {..
1480: 20 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76            $nativ 1490: 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c e ? [machineToPl 14a0: 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74 5f 6d atform$::test_m
14b0: 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a 20 20  achine] : ""..
14c0: 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20        }]..
14d0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
14e0: 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61  exists ::tcl_pla
14f0: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d  tform(machine)]}
1500: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1510: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1520: 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62  TE: For native b
1530: 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68  uilds, return th
1540: 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  e platform name
1550: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1560: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1570: 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72    the machine ar
1580: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65  chitecture; othe
1590: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e  rwise, return an
15a0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a   empty string...
15b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15c0: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
15d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61  {..          $na 15e0: 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 tive ? [machineT 15f0: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c oPlatform$::tcl
1600: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e  _platform(machin
1610: 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20  e)] : ""..
1620: 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c    }]..      } el
1630: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
1640: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1650: 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 72 63 68   No machine arch
1660: 69 74 65 63 74 75 72 65 20 69 73 20 61 76 61 69  itecture is avai
1670: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e  lable, return an
1680: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a   empty string...
1690: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16a0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
16b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
16c0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
16d0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ldConfiguration
16e0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
16f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65       # NOTE: See
1700: 20 69 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75   if the "configu
1710: 72 61 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20  ration" setting
1720: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1730: 64 65 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20  den by the..
1740: 20 20 23 20 20 20 20 20 20 20 75 73 65 72 20 28    #       user (
1750: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1760: 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73  and line).  This
1770: 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65   helps control e
1780: 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20  xactly..      #
1790: 20 20 20 20 20 20 77 68 69 63 68 20 73 65 74 20        which set
17a0: 6f 66 20 62 69 6e 61 72 69 65 73 20 77 65 20 61  of binaries we a
17b0: 72 65 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e  re testing (i.e.
17c0: 20 74 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20   those built in
17d0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
17e0: 20 20 20 22 44 65 62 75 67 22 20 6f 72 20 22 52     "Debug" or "R
17f0: 65 6c 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f  elease" build co
1800: 6e 66 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20  nfigurations).
1810: 54 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  To override this
1820: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1830: 76 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f  value via the co
1840: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65  mmand line, ente
1850: 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69  r a command simi
1860: 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20  lar to one of..
1870: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1880: 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20   following (all
1890: 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20  on one line):..
18a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18b0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
18c0: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
18d0: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
18e0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75  nfiguration Debu
18f0: 67 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  g"..      #
1900: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
1910: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
1920: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1930: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
1940: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
1950: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
1960: 6e 66 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65  nfiguration Rele
1970: 61 73 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ase"..      #
1980: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
1990: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
19a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
19b0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
19c0: 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70  ll.exe -file .\p
19d0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
19e0: 20 2d 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20   -preTest..
19f0: 20 23 20 20 20 20 20 20 20 20 20 22 75 6e 73 65   #         "unse
1a00: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
1a10: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
1a20: 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  "..      #..
1a30: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1a40: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
1a50: 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20  uration] && \..
1a60: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1a70: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 1a80: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e configuration] > 1a90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1aa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1ab0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 1ac0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f pecified test co 1ad0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 nfiguration. Th 1ae0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 1af0: 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 used.. # 1b00: 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 for this v 1b10: 61 72 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 ariable is typic 1b20: 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 ally "Release", 1b30: 61 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65 as set by the te 1b40: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 1b50: 20 20 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 suite itself 1b60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
1b80: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
1b90: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  on..      } else
1ba0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1bb0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
1bc0: 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c  ormally, we will
1bd0: 20 6e 65 76 65 72 20 68 69 74 20 74 68 69 73 20   never hit this
1be0: 63 61 73 65 20 62 65 63 61 75 73 65 20 74 68 65  case because the
1bf0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20   value of the..
1c00: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
1c10: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
1c20: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c  n variable is al
1c30: 77 61 79 73 20 73 65 74 20 62 79 20 74 68 65 20  ways set by the
1c40: 74 65 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20  test suite..
1c50: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65      #       itse
1c60: 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20  lf; however, it
1c70: 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65  can be overridde
1c80: 6e 20 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65  n using the unse
1c90: 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20  t command..
1ca0: 20 20 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20     #       from
1cb0: 74 68 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74  the -preTest opt
1cc0: 69 6f 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20  ion to the test
1cd0: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
1ce0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1cf0: 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66  n $::eagle_platf 1d00: 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f orm(configuratio 1d10: 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n).. }.. 1d20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1d30: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 1d40: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 ations {} {.. 1d50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1d60: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c TE: See if the l 1d70: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 1d80: 69 67 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 igurations has b 1d90: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 een overridden b 1da0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 1db0: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 the user (e.g. 1dc0: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c on the command l 1dd0: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ine)... #.. 1de0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 1df0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f exists ::test_co 1e00: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 nfigurations] && 1e10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c \.. [l 1e20: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 length$::test_c
1e30: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e  onfigurations] >
1e40: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1e50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1e60: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
1e70: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66  pecified list of
1e80: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74   test configurat
1e90: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ions...        #
1ea0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1eb0: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu 1ec0: 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d rations.. } 1ed0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1ee0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1ef0: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 TE: Use the defa 1f00: 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 ult list of test 1f10: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e configurations. 1f20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1f30: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 1f40: 74 20 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d t Debug Release] 1f50: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1f60: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 1f70: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 tBuildBaseDirect 1f80: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 1f90: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1fa0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the 1fb0: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 base directory w 1fc0: 68 65 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 here all the bui 1fd0: 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 lds should be.. 1fe0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 # loc 1ff0: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 2000: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 be the director 2010: 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 y that contains 2020: 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 the actual.. 2030: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 2040: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory 2050: 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 (e.g. parent of 2060: 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 "bin")... 2070: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 2080: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c fo exists ::buil 2090: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 d_base_directory 20a0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 20b0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 20c0: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64$::build_base_d
20d0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74  irectory] > 0} t
20e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
20f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2100: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  : The location o
2110: 66 20 74 68 65 20 62 75 69 6c 64 20 62 61 73 65  f the build base
2120: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
2130: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
2140: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2150: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
2160: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
2170: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2180: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64   return $::build 2190: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d _base_directory. 21a0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 21b0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 21c0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 21d0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 21e0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 21f0: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63$::common_direc
2200: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
2210: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65        # NOTE: Ne
2230: 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20  xt, fallback to
2240: 74 68 65 20 70 61 72 65 6e 74 20 64 69 72 65 63  the parent direc
2250: 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e 65 20  tory of the one
2260: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..
2270: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73      #       this
2280: 20 66 69 6c 65 20 28 69 2e 65 2e 20 22 63 6f 6d   file (i.e. "com
2290: 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 69 66 20  mon.eagle"), if
22a0: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20  available...
22b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
22c0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e  eturn [file dirn
22d0: 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ame $::common_di 22e0: 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 20 20 20 rectory].. 22f0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 2300: 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d 20 26 exists ::path] & 2310: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 2320: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2330: 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68 65 6e  :path] > 0} then
2340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
2350: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
2360: 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63 6b  inally, fallback
2370: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64   to the parent d
2380: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20  irectory of the
2390: 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20 20 20  EagleTest..
23a0: 20 20 20 23 20 20 20 20 20 20 20 70 61 74 68 2e     #       path.
23b0: 20 20 54 68 65 20 45 61 67 6c 65 54 65 73 74 20    The EagleTest
23c0: 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e 74 65  package guarante
23d0: 65 73 20 74 68 61 74 20 74 68 69 73 20 76 61 72  es that this var
23e0: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23  iable..        #
23f0: 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 73         will be s
2400: 65 74 20 74 6f 20 74 68 65 20 64 69 72 65 63 74  et to the direct
2410: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ory containing t
2420: 68 65 20 66 69 72 73 74 20 66 69 6c 65 20 74 6f  he first file to
2430: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2440: 20 20 65 78 65 63 75 74 65 20 74 68 65 20 5b 72    execute the [r
2450: 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20  unTestPrologue]
2460: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70  script library p
2470: 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20  rocedure...
2480: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
2490: 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61  turn [file dirna
24a0: 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 20 20  me $::path].. 24b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 24c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24d0: 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 68 20 # NOTE: No path 24e0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 is available, re 24f0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 turn an empty st 2500: 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f 69 6e ring. This poin 2510: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 2520: 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 should not be 2530: 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 20 20 reached... 2540: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 2550: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d turn "".. } 2560: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 2570: 70 72 6f 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 proc isMixedMode 2580: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e Assembly { fileN 2590: 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d ame {varName ""} 25a0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 25b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 # NOTE: Fir 25c0: 73 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 st, make sure th 25d0: 65 20 74 65 73 74 20 73 75 69 74 65 20 69 6e 66 e test suite inf 25e0: 72 61 73 74 72 75 63 74 75 72 65 20 69 73 20 61 rastructure is a 25f0: 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 llowed to.. 2600: 20 23 20 20 20 20 20 20 20 75 73 65 20 74 68 65 # use the 2610: 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e [exec] command. 2620: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2630: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 2640: 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 ts ::no(exec)] & 2650: 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 & ![info exists 2660: 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d ::no(corFlags)]} 2670: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2680: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2690: 54 45 3a 20 49 66 20 74 68 65 20 6c 6f 63 61 74 TE: If the locat 26a0: 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 ion of CorFlags 26b0: 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 is present in th 26c0: 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a e environment,.. 26d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26e0: 75 73 65 20 69 74 3b 20 6f 74 68 65 72 77 69 73 use it; otherwis 26f0: 65 20 61 73 73 75 6d 65 20 69 74 20 69 73 20 69 e assume it is i 2700: 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 n the PATH... 2710: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2720: 73 65 74 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 set corFlags [ex 2730: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 pr {.. 2740: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 [info exists ::e 2750: 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 nv(CorFlags)] ? 2760: 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29$::env(CorFlags)
2770: 20 3a 20 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20   : "CorFlags"..
2780: 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20         }]....
2790: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27a0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
27b0: 74 6f 20 65 78 65 63 75 74 65 20 43 6f 72 46 6c  to execute CorFl
27c0: 61 67 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69  ags on the speci
27d0: 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20  fied file...
27e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
27f0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
2800: 20 20 20 20 20 20 20 65 78 65 63 20 2d 2d 20 24         exec -- $2810: 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e corFlags [file n 2820: 61 74 69 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e ativename$fileN
2830: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20  ame]..        }
2840: 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  exec] == 0} then
2850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
2860: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
2870: 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20  E: If requested
2880: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61  by our caller, a
2890: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
28a0: 69 6e 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ine the..
28b0: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66     #       platf
28c0: 6f 72 6d 20 66 6f 72 20 74 68 65 20 73 70 65 63  orm for the spec
28d0: 69 66 69 65 64 20 66 69 6c 65 20 61 73 20 77 65  ified file as we
28e0: 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ll...          #
28f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
2900: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $2910: 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 varName] > 0} th 2920: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2930: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 2940: 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 # NOTE: Store t 2950: 68 65 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 he platform in t 2960: 68 65 20 6e 61 6d 65 64 20 76 61 72 69 61 62 6c he named variabl 2970: 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 e in the.. 2980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 2990: 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c ntext of our cal 29a0: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ler... 29b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 29c0: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
29d0: 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20  e platform....
29e0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
29f0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2a00: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72   Attempt to extr
2a10: 61 63 74 20 74 68 65 20 50 45 20 6c 69 6e 65 20  act the PE line
2a20: 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65  from the capture
2a30: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  d..            #
2a40: 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20         output.
2a50: 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  If this value is
2a60: 20 22 50 45 33 32 22 20 6f 72 20 22 50 45 33 32   "PE32" or "PE32
2a70: 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20  +", the..
2a80: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
2a90: 65 6d 62 6c 79 20 66 69 6c 65 20 69 73 20 33 32  embly file is 32
2aa0: 2d 62 69 74 20 6f 72 20 36 34 2d 62 69 74 2c 20  -bit or 64-bit,
2ab0: 72 65 73 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20  respectively;..
2ac0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
2ad0: 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74     otherwise, it
2ae0: 73 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77  s type is unknow
2af0: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...
2b00: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  #..            s
2b10: 65 74 20 70 61 74 74 65 72 6e 20 7b 5e 50 45 20  et pattern {^PE
2b20: 20 20 20 20 20 20 20 3a 20 28 50 45 33 32 7c 50         : (PE32|P
2b30: 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20  E32\+)\s+$}.... 2b40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 2b50: 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 regexp -line -- 2b60: 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64$pattern $exec d 2b70: 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74 68 65 6e ummy pe32]} then 2b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2b90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 2ba0: 20 20 20 23 20 48 41 43 4b 3a 20 54 68 69 73 20 # HACK: This 2bb0: 5b 73 77 69 74 63 68 5d 20 61 73 73 75 6d 65 73 [switch] assumes 2bc0: 20 74 68 61 74 20 33 32 2d 62 69 74 20 65 78 65 that 32-bit exe 2bd0: 63 75 74 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 cutables are.. 2be0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 2bf0: 20 20 20 20 61 6c 77 61 79 73 20 78 38 36 20 61 always x86 a 2c00: 6e 64 20 74 68 61 74 20 36 34 2d 62 69 74 20 65 nd that 64-bit e 2c10: 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 61 xecutables are a 2c20: 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 lways.. 2c30: 20 20 20 20 20 23 20 20 20 20 20 20 20 78 36 34 # x64 2c40: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2c50: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 2c60: 20 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 switch -exact 2c70: 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 --$pe32 {..
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32              PE32
2c90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2ca0: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
2cb0: 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20 20 20 20  rm Win32..
2cc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33               PE3
2ce0: 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  2+ {..
2cf0: 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74          set plat
2d00: 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20 20 20 20  form x64..
2d10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
2d30: 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20  ault {..
2d40: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c            set pl
2d50: 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20  atform ""..
2d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
2d80: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2d90: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
2da0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
2db0: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..
2dc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
2dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2de0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2df0: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72   Attempt to extr
2e00: 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c  act the ILONLY l
2e10: 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70  ine from the cap
2e20: 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20  tured..
2e30: 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e   #       output.
2e40: 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20    If this value
2e50: 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 70 65  is zero, the spe
2e60: 63 69 66 69 65 64 20 66 69 6c 65 20 6d 75 73 74  cified file must
2e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
2e80: 20 20 20 20 62 65 20 61 20 6d 69 78 65 64 2d 6d      be a mixed-m
2e90: 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74  ode assembly; ot
2ea0: 68 65 72 77 69 73 65 2c 20 69 74 20 63 6f 6e 74  herwise, it cont
2eb0: 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20  ains only..
2ec0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e       #       man
2ed0: 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e  aged components.
2ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2ef0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74           set pat
2f00: 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20  tern {^ILONLY
2f10: 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d   : (0|1)\s+$}... 2f20: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 2f30: 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d [regexp -line -- 2f40: 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20$pattern $exec 2f50: 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 dummy ilOnly]} t 2f60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2f70: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 2f80: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 2f90: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
2fa0: 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a  ilOnly} then {..
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fc0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
2fd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2fe0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
2ff0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
3000: 45 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 73  E: If the test s
3010: 75 69 74 65 20 63 61 6e 6e 6f 74 20 75 73 65 20  uite cannot use
3020: 5b 65 78 65 63 5d 20 6f 72 20 65 78 65 63 75 74  [exec] or execut
3030: 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d  ion of CorFlags.
3040: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
3050: 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 66 61  ailed, return fa
3060: 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  lse...      #..
3070: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
3080: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
3090: 20 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76 61   proc isBuildAva
30a0: 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65 20  ilable { native
30b0: 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61  directory {varNa
30c0: 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  me ""} } {..
30d0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
30e0: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c  E: Build the ful
30f0: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c  ly qualified fil
3100: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70  e name for the p
3110: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d  rimary assembly.
3120: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
3130: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79  ontaining the Sy
3140: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
3150: 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65   managed compone
3160: 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20 20  nts.  It..
3170: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
3180: 65 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68 69  e noted that thi
3190: 73 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20  s assembly file
31a0: 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  may also contain
31b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
31c0: 20 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f      native compo
31d0: 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74 69  nents, if a nati
31e0: 76 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20 75  ve build is in u
31f0: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
3200: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
3210: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
3220: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  e [file join $di 3230: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 rectory \.. 3240: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 3250: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d .SQLite.dll]]... 3260: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil 3270: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
3280: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
3290: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32a0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
32b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
32c0: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
32d0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
32e0: 74 65 63 74 20 69 66 20 74 68 65 20 70 72 69 6d  tect if the prim
32f0: 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ary assembly..
3300: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74      #       cont
3310: 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 20  ains any native
3320: 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 6e  components, if n
3330: 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20  ecessary...
3340: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
3350: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61  tring length $na 3360: 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e tive] == 0} then 3370: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 3380: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3390: 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  varName] > 0} th
33a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
33b0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 33c0: 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20$varName..
33d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
33e0: 73 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d 69  set native [isMi
33f0: 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20  xedModeAssembly
3400: 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e 61  $fileName$varNa
3410: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
3420: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
3430: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 72   NOTE: If the pr
3440: 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 61  imary assembly a
3450: 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  lso contains the
3460: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e   native componen
3470: 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ts,..      #
3480: 20 20 20 77 65 20 68 61 76 65 20 65 76 65 72 79     we have every
3490: 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a  thing we need...
34a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
34b0: 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e  f {$native} then 34c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 34d0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } 34e0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 34f0: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 3500: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali 3510: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 fied file name f 3520: 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 or the interop a 3530: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 ssembly.. # 3540: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e containin 3550: 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 g the System.Dat 3560: 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 a.SQLite native 3570: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 components. If 3580: 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 this.. # 3590: 20 20 20 20 66 69 6c 65 20 65 78 69 73 74 73 2c file exists, 35a0: 20 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 we should have 35b0: 65 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 everything we ne 35c0: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 35d0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 35e0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 35f0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 e [file join$di
3600: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
3610: 20 20 20 20 20 53 51 4c 69 74 65 2e 49 6e 74 65       SQLite.Inte
3620: 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20  rop.dll]]....
3630: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
3640: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 3650: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3660: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 3670: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 3680: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 3690: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q 36a0: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 ualified file na 36b0: 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 me for the SQLit 36c0: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 e core.. # 36d0: 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 library. 36e0: 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 If this file exi 36f0: 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 sts, we should h 3700: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 ave everything w 3710: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 3720: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d need... #. 3730: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 3740: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 3750: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 3760: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
3770: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e          sqlite3.
3780: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  dll]]....      i
3790: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
37a0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 37b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 37c0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } 37d0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 37e0: 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f # NOTE: One o 37f0: 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63 6f r more native co 3800: 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64 20 mponents needed 3810: 62 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 by System.Data.S 3820: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 QLite.. # 3830: 20 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e 67 are missing 3840: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 3850: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 3860: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 3870: 6f 63 20 69 73 52 65 6c 65 61 73 65 41 76 61 69 oc isReleaseAvai 3880: 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f 72 lable { director 3890: 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d y {varName ""} } 38a0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 {.. if {[s 38b0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
38c0: 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  rName] > 0} then
38d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61   {..        upva
38e0: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61  r 1 $varName$va
38f0: 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  rName..      }..
3900: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
3910: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
3920: 20 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 24   "" $directory$
3930: 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d  varName]..    }.
3940: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69  ....    proc joi
3950: 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20  nBuildDirectory
3960: 7b 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 65  { native path ye
3970: 61 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66  ar platform conf
3980: 69 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20  iguration } {..
3990: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
39a0: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
39b0: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
39c0: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69   the fully quali
39d0: 66 69 65 64 20 70 61 74 68 20 74 6f 20 74 68 65  fied path to the
39e0: 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20   build..      #
39f0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
3a00: 62 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65  based on all the
3a10: 20 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 69   arguments provi
3a20: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
3a30: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  r...      #..
3a40: 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20     if {$native} 3a50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3a60: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 return [file joi 3a70: 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 n$path bin $yea 3a80: 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e r$platform $con 3a90: 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 3aa0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 3ab0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 3ac0: 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e e join$path bin
3ad0: 20 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75 72   $year$configur
3ae0: 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20  ation bin]..
3af0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
3b00: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
3b10: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
3b20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
3b30: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68   NOTE: See if th
3b40: 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69  e "native" runti
3b50: 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65  me option has be
3b60: 65 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20  en set.  If so,
3b70: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23  use the..      #
3b80: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
3b90: 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d   for the mixed-m
3ba0: 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e  ode assembly (a.
3bb0: 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20  k.a. the native
3bc0: 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23  interop..      #
3bd0: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29         assembly)
3be0: 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69  .  To enable thi
3bf0: 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65  s option via the
3c00: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65   command line, e
3c10: 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20  nter a..      #
3c20: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69        command si
3c30: 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20  milar to one of
3c40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61  the following (a
3c50: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
3c60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
3c70: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
3c80: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c  ell.exe -initial
3c90: 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69  ize -runtimeOpti
3ca0: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  on native..
3cb0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
3cc0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
3cd0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
3ce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 20       #       To
3cf0: 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69  enable this opti
3d00: 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  on via the comma
3d10: 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f  nd line prior to
3d20: 20 74 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a   the "beta 16"..
3d30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
3d40: 6c 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20  lease of Eagle,
3d50: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
3d60: 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73  mmand must be us
3d70: 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20  ed instead..
3d80: 20 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20    #       (also
3d90: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29  all on one line)
3da0: 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  :..      #..
3db0: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53    #       EagleS
3dc0: 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61  hell.exe -initia
3dd0: 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61  lize -postInitia
3de0: 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20  lize..      #
3df0: 20 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e        "object in
3e00: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
3e10: 2e 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75  .GetActive AddRu
3e20: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
3e30: 76 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ve"..      #
3e40: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
3e50: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
3e60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
3e70: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
3e80: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72  ::build_director
3e90: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
3ea0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
3eb0: 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  h $::build_direc 3ec0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 3ed0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 3ee0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 3ef0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 3f00: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 3f10: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 y has been overr 3f20: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 idden;.. 3f30: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 # therefor 3f40: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 e, use it verbat 3f50: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a im... #.. 3f60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
3f70: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72  ::build_director
3f80: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  y..      } else
3f90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3fa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
3fb0: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
3fc0: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  ntime option is
3fd0: 73 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d  set, the mixed-m
3fe0: 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ode assembly..
3ff0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73        #       is
4000: 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20   being tested.
4010: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68  In that case, th
4020: 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75  e path to the bu
4030: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  ild directory..
4040: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
4050: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the
4060: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e  platform name an
4070: 64 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69  d all the binari
4080: 65 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20  es under test..
4090: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
40a0: 68 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74  hould be present
40b0: 20 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f   in that directo
40c0: 72 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74  ry.  If the "nat
40d0: 69 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20  ive" runtime..
40e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70        #       op
40f0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c  tion is not set,
4100: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
4110: 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e  tory will be con
4120: 73 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20  sidered to be..
4130: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22         #       "
4140: 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c  platform-neutral
4150: 22 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61  ", with the nota
4160: 62 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66  ble exception of
4170: 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20   any native..
4180: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
4190: 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c  embly (e.g. "SQL
41a0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22  ite.Interop.dll"
41b0: 29 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 64  ) copied there d
41c0: 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  uring the..
41d0: 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64     #       build
41e0: 20 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e   process itself.
41f0: 20 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 70    If the build p
4200: 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64  rocess somehow d
4210: 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  oes not..
4220: 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 68   #       copy th
4230: 65 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c  e native assembl
4240: 79 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66  y for this platf
4250: 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65  orm, most of the
4260: 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20   tests..
4270: 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 73  #       in the s
4280: 75 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79  uite will simply
4290: 20 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65   be skipped.  Ge
42a0: 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67  nerally speaking
42b0: 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20  , there..
42c0: 20 23 20 20 20 20 20 20 20 61 72 65 20 74 77 6f   #       are two
42d0: 20 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74   ways to build t
42e0: 68 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e  he binaries when
42f0: 20 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75   preparing to ru
4300: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  n the..        #
4310: 20 20 20 20 20 20 20 74 65 73 74 20 73 75 69 74         test suit
4320: 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e:..        #..
4330: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 31         #       1
4340: 2e 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 61  . Build the sepa
4350: 72 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64  rate managed and
4360: 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69   native assembli
4370: 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20  es using some..
4380: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
4390: 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c    commands simil
43a0: 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20  ar to:..
43b0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  #..        #
43c0: 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20        build.bat
43d0: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d  ${Configuration} 43e0: 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c ManagedOnly${Pl
43f0: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20  atform}..
4400: 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c   #          buil
4410: 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72  d.bat ${Configur 4420: 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 ation}NativeOnly 4430: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20${Platform}..
4440: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4450: 20 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72   #          Wher
4460: 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f  e ${Configuratio 4470: 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65 n} is either "De 4480: 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 bug" or "Release 4490: 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 " and.. # 44a0: 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74${Plat
44b0: 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20  form} is either
44c0: 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22  "Win32" or "x64"
44d0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
44e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 32 2e        #       2.
44f0: 20 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64   Build the mixed
4500: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75  -mode assembly u
4510: 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73  sing a command s
4520: 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20  imilar to:..
4530: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
4540: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e            build.
4550: 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74  bat ${Configurat 4560: 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d ion}${Platform}
4570: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4580: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
4590: 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72  Where ${Configur 45a0: 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 ation} is either 45b0: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c "Debug" or "Rel 45c0: 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 ease" and.. 45d0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b #${
45e0: 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74  Platform} is eit
45f0: 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22  her "Win32" or "
4600: 78 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 63  x64".  If this c
4610: 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20  ommand is..
4620: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 75 73     #          us
4630: 65 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74  ed, various test
4640: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 73  s that require s
4650: 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e  upplementary man
4660: 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  aged..        #
4670: 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
4680: 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20  ies (e.g. LINQ)
4690: 6d 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 75  may be skipped u
46a0: 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61  nless those bina
46b0: 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20  ries..        #
46c0: 20 20 20 20 20 20 20 20 20 61 72 65 20 73 75 62           are sub
46d0: 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64  sequently copied
46e0: 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63   into the correc
46f0: 74 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65  t directory (i.e
4700: 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20  . by..        #
4710: 20 20 20 20 20 20 20 20 20 22 74 65 73 74 5f 61           "test_a
4720: 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20  ll.bat")...
4730: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
4740: 20 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20        Note that
4750: 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64  all of the build
4760: 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20   commands above
4770: 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20  will default to
4780: 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23  using..        #
4790: 20 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 73         the lates
47a0: 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42  t version of MSB
47b0: 75 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61  uild available a
47c0: 6e 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 61  nd the "test_yea
47d0: 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20  r" may..
47e0: 23 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20  #       need to
47f0: 62 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f  be adjusted acco
4800: 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61  rdingly to actua
4810: 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74  lly run the test
4820: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   suite...
4830: 20 23 20 20 20 20 20 20 20 52 65 66 65 72 20 74   #       Refer t
4840: 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69  o the comments i
4850: 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d  n [getBuildYear]
4860: 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d   for more inform
4870: 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20  ation on..
4880: 20 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f    #       how to
4890: 20 73 65 74 20 74 68 69 73 20 76 61 72 69 61 62   set this variab
48a0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
48b0: 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69          set nati
48c0: 76 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  ve [hasRuntimeOp
48d0: 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a  tion native]....
48e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
48f0: 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f  joinBuildDirecto
4900: 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42  ry $native [getB 4910: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 uildBaseDirector 4920: 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 y] \.. 4930: 20 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d [getBuildYear] 4940: 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f [getBuildPlatfo 4950: 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 rm$native] [get
4960: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  BuildConfigurati
4970: 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  on]]..      }..
4980: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
4990: 63 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 73  c getReleaseVers
49a0: 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ion {} {..
49b0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
49c0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20   Figure out the
49d0: 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20  release version
49e0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65  for use with the
49f0: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
4a00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4a10: 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f  when checking fo
4a20: 72 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65  r available rele
4a30: 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ases...      #..
4a40: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
4a50: 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65  exists ::release
4a60: 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a  _version] && \..
4a70: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
4a80: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65  g length $::rele 4a90: 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 ase_version] > 0 4aa0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 4ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 4ac0: 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 OTE: The release 4ad0: 20 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 version has bee 4ae0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 n overridden; th 4af0: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d erefore, use it. 4b00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4b10: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 4b20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 4b30: 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 eturn$::release
4b40: 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  _version..
4b50: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
4b60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
4b70: 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20  OTE: No release
4b80: 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c  version is avail
4b90: 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  able, return an
4ba0: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20  empty string...
4bb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4bc0: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
4bd0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
4be0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
4bf0: 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65  dFileName { file
4c00: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
4c10: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
4c20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
4c30: 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69  eturns the speci
4c40: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61  fied file name a
4c50: 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63  s if it were loc
4c60: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20  ated in the..
4c70: 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64     #       build
4c80: 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63   directory, disc
4c90: 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63  arding any direc
4ca0: 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tory information
4cb0: 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20   present..
4cc0: 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66  #       in the f
4cd0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76  ile name as prov
4ce0: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
4cf0: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
4d00: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
4d10: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
4d20: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
4d30: 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72  oin [getBuildDir
4d40: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 4d50: 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 m [file tail$fi
4d60: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d  leName]]]..    }
4d70: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
4d80: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
4d90: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
4da0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
4db0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
4dc0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f  urns the directo
4dd0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73  ry where the tes
4de0: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  t application..
4df0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73       #       its
4e00: 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61  elf (i.e. the Ea
4e10: 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f  gle shell) is lo
4e20: 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c  cated.  This wil
4e30: 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20  l be used as..
4e40: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
4e50: 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20  destination for
4e60: 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65  the copied Syste
4e70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61  m.Data.SQLite na
4e80: 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  tive and..
4e90: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20  #       managed
4ea0: 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e  assemblies (i.e.
4eb0: 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73   because this is
4ec0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20   one of the few
4ed0: 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20  places..      #
4ee0: 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20        where the
4ef0: 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c  CLR will actuall
4f00: 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20  y find and load
4f10: 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d  them properly)..
4f20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4f30: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
4f40: 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74   ::binary_direct
4f50: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
4f60: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
4f70: 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69  gth $::binary_di 4f80: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 4f90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 4fa0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4fb0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 4fc0: 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 the binary dire 4fd0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f ctory has been o 4fe0: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 verridden;.. 4ff0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 # ther 5000: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 efore, use it ve 5010: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 rbatim... 5020: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 5030: 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 rn$::binary_dir
5040: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
5050: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
5060: 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e  return [info bin
5070: 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ary]..      }..
5080: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
5090: 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e  c getBinaryFileN
50a0: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  ame { fileName {
50b0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b  platform ""} } {
50c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
50d0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73   # NOTE: Returns
50e0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
50f0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69  ile name as if i
5100: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69  t were located i
5110: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
5120: 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 65       binary dire
5130: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e  ctory, discardin
5140: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20  g any directory
5150: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73  information pres
5160: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
5170: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e     in the file n
5180: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20  ame as provided
5190: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  by our caller...
51a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
51b0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69  eturn [file nati
51c0: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  vename \..
51d0: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
51e0: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
51f0: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 66  ry] $platform [f 5200: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 ile tail$fileNa
5210: 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  me]]]..    }....
5220: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 72  .    proc getCor
5230: 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  eBinaryFileName
5240: 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  { {platform ""}
5250: 7b 73 74 61 6e 64 61 72 64 20 66 61 6c 73 65 7d  {standard false}
5260: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
5270: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
5280: 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70 61  urns the full pa
5290: 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  th for the file
52a0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
52b0: 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20  QLite core..
52c0: 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65    #       native
52d0: 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66 6f   library code fo
52e0: 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e  r this platform.
52f0: 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 61    First, check a
5300: 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20 20  nd see if..
5310: 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c   #       the SQL
5320: 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20  ite core native
5330: 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65  library has alre
5340: 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 2e  ady been loaded.
5350: 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20 23    Next,..      #
5360: 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b 20         fallback
5370: 74 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c 6c  to what the full
5380: 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65 2c   path should be,
5390: 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65   based on whethe
53a0: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  r the..      #
53b0: 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20       mixed-mode
53c0: 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69 6e  assembly is bein
53d0: 67 20 75 73 65 64 20 61 6e 64 20 74 68 65 20 6e  g used and the n
53e0: 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65  ame of the curre
53f0: 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  nt..      #
5400: 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20    platform...
5410: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
5420: 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69  [catch {object i
5430: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
5440: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
5450: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
5460: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
5470: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
5480: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
5490: 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   _SQLiteNativeMo
54a0: 64 75 6c 65 46 69 6c 65 4e 61 6d 65 7d 20 66 69  duleFileName} fi
54b0: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20  leName] == 0 &&
54c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
54d0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c  ring length $fil 54e0: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then 54f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 5500: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 5510: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e he SQLite core n 5520: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 61 ative library ha 5530: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c s already been l 5540: 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 20 20 20 oaded via.. 5550: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6e # the n 5560: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 70 72 ative library pr 5570: 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 74 75 72 e-loader. Retur 5580: 6e 20 74 68 61 74 20 66 69 6c 65 20 6e 61 6d 65 n that file name 5590: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 now... # 55a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 55b0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
55c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
55d0: 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69  {[hasRuntimeOpti
55e0: 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  on native]} then
55f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
5600: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
5610: 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65 64 2d  eturn the mixed-
5620: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69  mode assembly fi
5630: 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...
5640: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
5650: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  urn [file native
5660: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
5670: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
5680: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
5690: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53 79  ry] $platform Sy 56a0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 56b0: 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 .dll]].. } 56c0: 65 6c 73 65 69 66 20 7b 24 73 74 61 6e 64 61 72 elseif {$standar
56d0: 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  d} then {..
56e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
56f0: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
5700: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61   native-only sta
5710: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62  ndard SQLite lib
5720: 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  rary file name..
5730: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5740: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
5750: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
5760: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
5770: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
5780: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 5790: 66 6f 72 6d 20 73 71 6c 69 74 65 33 2e 64 6c 6c form sqlite3.dll 57a0: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ]].. } else 57b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 57c0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 57d0: 65 74 75 72 6e 20 74 68 65 20 6e 61 74 69 76 65 eturn the native 57e0: 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 -only interop as 57f0: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 sembly file name 5800: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 5810: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 5820: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d le nativename \. 5830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 5840: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 le join [getBina 5850: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c ryDirectory]$pl
5860: 61 74 66 6f 72 6d 20 53 51 4c 69 74 65 2e 49 6e  atform SQLite.In
5870: 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 20 20 20  terop.dll]]..
5880: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
5890: 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6d 6d      proc getComm
58a0: 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  onDirectory {} {
58b0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
58c0: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
58d0: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
58e0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68  the directory wh
58f0: 65 72 65 20 74 68 65 20 74 65 73 74 20 73 63 72  ere the test scr
5900: 69 70 74 73 0d 0a 20 20 20 20 20 20 23 20 20 20  ipts..      #
5910: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f      should be lo
5920: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75  cated.  By defau
5930: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 72 65  lt, this just re
5940: 74 75 72 6e 73 20 74 68 65 20 45 61 67 6c 65 0d  turns the Eagle.
5950: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
5960: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e  inary directory.
5970: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
5980: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
5990: 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63  s ::common_direc
59a0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
59b0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
59c0: 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  ngth $::common_d 59d0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 59e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 59f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 5a00: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 5a10: 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 f the common dir 5a20: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 5a30: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 5a40: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 5a50: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 5a60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 5a70: 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 urn$::common_di
5a80: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
5a90: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
5aa0: 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f 72 5f 64  xists ::vendor_d
5ab0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
5ac0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
5ad0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76 65 6e 64  g length $::vend 5ae0: 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 or_directory] > 5af0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 5b00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 5b10: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 NOTE: The locati 5b20: 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e 64 6f 72 on of the vendor 5b30: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 5b40: 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 een set;.. 5b50: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 5b60: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 5b70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5b80: 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 6e 64 6f return$::vendo
5b90: 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  r_directory..
5ba0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
5bb0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f  fo exists ::tcl_
5bc0: 6c 69 62 72 61 72 79 5d 20 26 26 20 5c 0d 0a 20  library] && \..
5bd0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5be0: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63 6c 5f 6c   length $::tcl_l 5bf0: 69 62 72 61 72 79 5d 20 3e 20 30 20 26 26 20 5c ibrary] > 0 && \ 5c00: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 5c10: 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 3a e isdirectory$:
5c20: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 7d 20 74  :tcl_library]} t
5c30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
5c40: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
5c50: 3a 20 54 68 65 20 76 61 72 69 61 62 6c 65 20 77  : The variable w
5c60: 69 74 68 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e  ith the location
5c70: 20 6f 66 20 74 68 65 20 73 63 72 69 70 74 20 6c   of the script l
5c80: 69 62 72 61 72 79 20 69 73 0d 0a 20 20 20 20 20  ibrary is..
5c90: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 20 61     #       set a
5ca0: 6e 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  nd appears to be
5cb0: 20 61 20 72 65 61 6c 20 64 69 72 65 63 74 6f 72   a real director
5cc0: 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65 6d 62 65  y (i.e. not embe
5cd0: 64 64 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  dded..        #
5ce0: 20 20 20 20 20 20 77 69 74 68 69 6e 20 61 20 66        within a f
5cf0: 69 6c 65 29 3b 20 74 68 65 72 65 66 6f 72 65 2c  ile); therefore,
5d00: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
5d10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
5d20: 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  urn $::tcl_libra 5d30: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 5d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 5d50: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 5d60: 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 64 allback to the d 5d70: 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e irectory contain 5d80: 69 6e 67 20 74 68 65 20 65 78 65 63 75 74 61 62 ing the executab 5d90: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 5da0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 5db0: 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 info binary].. 5dc0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 5dd0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 . proc getDat 5de0: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 20 7b abaseDirectory { 5df0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 5e00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 5e10: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 5e20: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 5e30: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 where the test 5e40: 64 61 74 61 62 61 73 65 73 0d 0a 20 20 20 20 20 databases.. 5e50: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 # should 5e60: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 be located. By 5e70: 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 default, this ju 5e80: 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 st uses the temp 5e90: 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 orary.. # 5ea0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c 5eb0: 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 onfigured for th 5ec0: 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 is system... 5ed0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 5ee0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 info exists ::da 5ef0: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 tabase_directory 5f00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 5f10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 5f20: 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72$::database_dir
5f30: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
5f40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
5f50: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
5f60: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
5f70: 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72  the database dir
5f80: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
5f90: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
5fa0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
5fb0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d  refore, use it..
5fc0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5fd0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61      return $::da 5fe0: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 tabase_directory 5ff0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 6000: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 6010: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo 6020: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 6030: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 6040: 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 th$::scratch_di
6050: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
6060: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
6070: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
6080: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
6090: 20 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72   the scratch dir
60a0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
60b0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
60c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
60d0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d  refore, use it..
60e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
60f0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63      return $::sc 6100: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d ratch_directory. 6110: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 6120: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6130: 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 [getTemporaryPat 6140: 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 h].. }.. 6150: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 6160: 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 getTemporaryDire 6170: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 6180: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6190: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 61a0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 61b0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 61c0: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 e temporary file 61d0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 61e0: 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 should be locat 61f0: 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c ed. By default, 6200: 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 20 this just uses 6210: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 the temporary.. 6220: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 # dir 6230: 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 ectory configure 6240: 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 65 d for this syste 6250: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 6260: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 6270: 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 72 79 5f sts ::temporary_ 6280: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 6290: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 62a0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 6d ng length$::tem
62b0: 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79  porary_directory
62c0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
62d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
62e0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
62f0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 65  cation of the te
6300: 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
6310: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
6320: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
6330: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
6340: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
6350: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
6360: 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70 6f 72 61  eturn $::tempora 6370: 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 ry_directory.. 6380: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 6390: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr 63a0: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 63b0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 63c0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
63d0: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
63e0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
63f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6400: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
6410: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
6420: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
6430: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6440: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6450: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6460: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6470: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6480: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc 6490: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. 64a0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 64b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get 64c0: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. 64d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 64e0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 64f0: 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 estOverridesPrea 6500: 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 mble { {extraVar 6510: 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 Names ""} } {.. 6520: 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 set varName 6530: 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 s [list].... 6540: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6550: 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c E: If available, 6560: 20 73 74 61 72 74 20 77 69 74 68 20 74 68 65 20 start with the 6570: 6d 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 master list of t 6580: 65 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 est override.. 6590: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 65a0: 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d ables... #. 65b0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 65c0: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f exists ::test_o 65d0: 76 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a verrides] && \.. 65e0: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 [lleng 65f0: 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 th$::test_overr
6600: 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ides] > 0} then
6610: 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  {..        eval
6620: 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73  lappend varNames
6630: 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64   $::test_overrid 6640: 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 es.. }.... 6650: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6660: 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 NOTE: If request 6670: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 6680: 2c 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 , add any additi 6690: 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 onal variable.. 66a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 66b0: 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d es to copy now.. 66c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 66d0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 if {[llength$ex
66e0: 74 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30  traVarNames] > 0
66f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
6700: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76    eval lappend v
6710: 61 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61  arNames $extraVa 6720: 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d rNames.. }. 6730: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6740: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 6750: 74 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d the script fragm 6760: 65 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e ent to be return 6770: 65 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 ed by processing 6780: 20 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 each.. # 6790: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 variable na 67a0: 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 me and adding th 67b0: 65 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 e nececessary sc 67c0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 ript fragments f 67d0: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 or.. # 67e0: 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 each one... 67f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 6800: 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 result "".... 6810: 20 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 foreach varNa 6820: 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a me$varNames {..
6830: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6840: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
6850: 20 74 68 65 20 71 75 61 6c 69 66 69 65 64 20 67   the qualified g
6860: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e  lobal variable n
6870: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
6880: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 75 6c  .        set ful
6890: 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64  lVarName [append
68a0: 41 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65  Args :: $varName 68b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 68c0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 68d0: 44 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 6c Does the variabl 68e0: 65 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 e exist in this 68f0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 interpreter cont 6900: 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d ext?.. #. 6910: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e . if {[in 6920: 66 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 fo exists$fullV
6930: 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  arName]} then {.
6940: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
6950: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
6960: 41 70 70 65 6e 64 20 61 20 73 63 72 69 70 74 20  Append a script
6970: 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20  fragment to the
6980: 72 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c  result that will
6990: 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20   correctly..
69a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
69b0: 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64  py any contained
69c0: 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65   value to anothe
69d0: 72 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f  r interpreter co
69e0: 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20  ntext...
69f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61    #..          a
6a00: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20  ppend result \n
6a10: 22 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e  "set " $fullVarN 6a20: 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 ame " \{" [set$
6a30: 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d  fullVarName] \}.
6a40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
6a50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
6a60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
6a70: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74   the result cont
6a80: 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
6a90: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
6aa0: 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20  s, append a..
6ab0: 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69     #       newli
6ac0: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne...      #..
6ad0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
6ae0: 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20  length $result] 6af0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 6b00: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu 6b10: 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a lt \n.. }.. 6b20: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
6b30: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
6b40: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 70  ..    proc getAp
6b50: 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20  pDomainPreamble
6b60: 7b 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73  { {prefix ""} {s
6b70: 75 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20  uffix ""} } {..
6b80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
6b90: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
6ba0: 64 75 72 65 20 72 65 74 75 72 6e 73 20 61 20 74  dure returns a t
6bb0: 65 73 74 20 73 65 74 75 70 20 73 63 72 69 70 74  est setup script
6bc0: 20 66 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62   fragment suitab
6bd0: 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20  le for..      #
6be0: 20 20 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e        evaluation
6bf0: 20 62 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74   by an interpret
6c00: 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e  er created in an
6c10: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63   isolated applic
6c20: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  ation..      #
6c30: 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68       domain.  Th
6c40: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  e script fragmen
6c50: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  t being returned
6c60: 20 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e   will be surroun
6c70: 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20  ded by..      #
6c80: 20 20 20 20 20 20 74 68 65 20 70 72 65 66 69 78        the prefix
6c90: 20 61 6e 64 20 73 75 66 66 69 78 20 22 73 63 72   and suffix "scr
6ca0: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73  ipt fragments" s
6cb0: 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20  pecified by our
6cc0: 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23  caller,..      #
6cd0: 20 20 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20         if any.
6ce0: 54 68 65 20 65 6e 74 69 72 65 20 73 63 72 69 70  The entire scrip
6cf0: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  t being returned
6d00: 20 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74   will be substit
6d10: 75 74 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20  uted via..
6d20: 23 20 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c  #       [subst],
6d30: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
6d40: 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62  of our caller, b
6d50: 65 66 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75  efore being retu
6d60: 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20  rned...      #
6d70: 20 20 20 20 20 54 68 69 73 20 73 74 65 70 20 69       This step i
6d80: 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74  s necessary so t
6d90: 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64  hat some limited
6da0: 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61   context informa
6db0: 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20  tion,..      #
6dc0: 20 20 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72       primarily r
6dd0: 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 74 65  elated to the te
6de0: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65  sting directorie
6df0: 73 2c 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66  s, can be transf
6e00: 65 72 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20  erred..      #
6e10: 20 20 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65       to the inte
6e20: 72 70 72 65 74 65 72 20 69 6e 20 74 68 65 20 69  rpreter in the i
6e30: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
6e40: 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69  ion domain, maki
6e50: 6e 67 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20  ng it..      #
6e60: 20 20 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63       able to suc
6e70: 63 65 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65  cessfully run te
6e80: 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65  sts that require
6e90: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of
6ea0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
6eb0: 20 20 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20     files in one
6ec0: 6f 66 20 74 68 65 20 74 65 73 74 69 6e 67 20 64  of the testing d
6ed0: 69 72 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c  irectories.  Cal
6ee0: 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70  lers should keep
6ef0: 20 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20   in..      #
6f00: 20 20 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65     mind that the
6f10: 20 74 65 73 74 20 73 63 72 69 70 74 20 66 72 61   test script fra
6f20: 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75  gment being retu
6f30: 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79  rned cannot rely
6f40: 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20   on..      #
6f50: 20 20 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69     any script li
6f60: 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 73  brary procedures
6f70: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72   that are not pr
6f80: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 45 61  ovided by the Ea
6f90: 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  gle..      #
6fa0: 20 20 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61     library packa
6fb0: 67 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65  ge (i.e. "init.e
6fc0: 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e  agle"), includin
6fd0: 67 20 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64  g those provided
6fe0: 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20   by..      #
6ff0: 20 20 20 74 68 65 20 45 61 67 6c 65 20 74 65 73     the Eagle tes
7000: 74 20 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73  t package, unles
7010: 73 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61  s the file conta
7020: 69 6e 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f  ining them is lo
7030: 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  aded..      #
7040: 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61      manually via
7050: 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68   some other mech
7060: 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69  anism (e.g. by i
7070: 6e 63 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72  ncluding appropr
7080: 69 61 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20  iate..      #
7090: 20 20 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71      [package req
70a0: 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65  uire] or [source
70b0: 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68  ] commands in th
70c0: 65 20 70 72 65 66 69 78 20 6f 72 20 73 75 66 66  e prefix or suff
70d0: 69 78 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ix..      #
70e0: 20 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e    script fragmen
70f0: 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20  ts).  Also, all
7100: 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e  variable referen
7110: 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74  ces and all nest
7120: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
7130: 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e    commands (i.e.
7140: 20 74 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65   those in square
7150: 20 62 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61   brackets) conta
7160: 69 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61  ined in the fina
7170: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  l..      #
7180: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
7190: 20 77 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69   will end up bei
71a0: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20  ng evaluated in
71b0: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74  the context of t
71c0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
71d0: 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70    calling interp
71e0: 72 65 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68  reter and not th
71f0: 65 20 74 61 72 67 65 74 20 69 6e 74 65 72 70 72  e target interpr
7200: 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20  eter created in
7210: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
7220: 20 20 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c     isolated appl
7230: 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75  ication domain u
7240: 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72  nless the dollar
7250: 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71   signs and/or sq
7260: 75 61 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20  uare..      #
7270: 20 20 20 20 62 72 61 63 6b 65 74 73 20 61 72 65      brackets are
7280: 20 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65   specially quote
7290: 64 20 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68  d with backslash
72a0: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
72b0: 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65      return [uple
72c0: 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73  vel 1 [list subs
72d0: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70  t [appendArgs $p 72e0: 72 65 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 refix {.. 72f0: 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 if {[hasRuntime 7300: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 Option native]} 7310: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7320: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 7330: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 7340: 63 74 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 ctive AddRuntime 7350: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 Option native.. 7360: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 7370: 7d 20 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69 } [getTestOverri 7380: 64 65 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 desPreamble [lis 7390: 74 20 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e t path test_chan 73a0: 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d nel]]$suffix]]]
73b0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
73c0: 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69 6e 61  proc tryCopyBina
73d0: 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  ryFile { fileNam
73e0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
73f0: 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d  {newFileName ""}
7400: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
7410: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b  sourceFileName [
7420: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
7430: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
7440: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
7450: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
7460: 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  s $sourceFileNam 7470: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 7480: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
7490: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
74a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
74b0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
74c0: 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 72  ed copying binar
74d0: 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72  y file \"" $sour 74e0: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. 74f0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i 7500: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 7510: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... 7520: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. 7530: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 7540: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 ring length$new
7550: 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  FileName] > 0} t
7560: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
7570: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  et targetFileNam
7580: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
7590: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  ame $newFileName 75a0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
75b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
75c0: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46       set targetF
75d0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c  ileName [getBuil
75e0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  dFileName $fileN 75f0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
7600: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
7610: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63   set targetDirec
7620: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61  tory [file dirna
7630: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa 7640: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 me].... if 7650: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 7660: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 if {![f 7670: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 ile exists$targ
7680: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  etDirectory]} th
7690: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
76a0: 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72        file mkdir
76b0: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72   $targetDirector 76c0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y.. 76d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 76e0: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 file copy -for 76f0: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ce$sourceFileNa
7700: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa 7710: 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 me}] == 0} then 7720: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 7730: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
7740: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
7750: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
7760: 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20  - copied binary
7770: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s 7780: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c ourceFileName "\ 7790: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 " to \"" \.. 77a0: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46$targetF
77b0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
77c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
77d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 77e0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 77f0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 7800: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa 7810: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e iled to copy bin 7820: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 ary file from \" 7830: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d "$sourceFileNam
7840: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
7850: 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72   "\" to \"" $tar 7860: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e getFileName \"\n 7870: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 7880: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 }..... proc t 7890: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 ryCopyBuildFile 78a0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 { fileName {plat 78b0: 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c form ""} {newFil 78c0: 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 eName ""} } {.. 78d0: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 set sourceF 78e0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil 78f0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e dFileName$fileN
7900: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. 7910: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi 7920: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 le exists$sourc
7930: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  eFileName]} then
7940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
7950: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 7960: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 7970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 7980: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 -- skipped copyi 7990: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 ng build file \" 79a0: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d "$sourceFileNam
79b0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
79c0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
79d0: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20  t exist\n"]....
79e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20         return..
79f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
7a00: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
7a10: 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d  th $newFileName] 7a20: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 7a30: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target 7a40: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e FileName [getBin 7a50: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 aryFileName$new
7a60: 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  FileName $platfo 7a70: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 rm].. } els 7a80: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set 7a90: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 targetFileName 7aa0: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 7ab0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl 7ac0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d atform].. } 7ad0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 .... set ta 7ae0: 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 rgetDirectory [f 7af0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 ile dirname$tar
7b00: 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  getFileName]....
7b10: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
7b20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
7b30: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
7b40: 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63  sts $targetDirec 7b50: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tory]} then {.. 7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 7b70: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 ile mkdir$targe
7b80: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  tDirectory..
7b90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
7ba0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20             file
7bb0: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75  copy -force $sou 7bc0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 rceFileName$tar
7bd0: 67 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d  getFileName}] ==
7be0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7bf0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 7c00: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 7c10: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 7c20: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 "---- copie 7c30: 64 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f d build file fro 7c40: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
7c50: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22  eName "\" to \""
7c60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7c70: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName 7c80: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e 7c90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 7ca0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
7cb0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
7cc0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7cd0: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to
7ce0: 63 6f 70 79 20 62 75 69 6c 64 20 66 69 6c 65 20  copy build file
7cf0: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source 7d00: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 FileName \.. 7d10: 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c "\" to \ 7d20: 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 ""$targetFileNa
7d30: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
7d40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
7d50: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42   proc tryDeleteB
7d60: 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65  inaryFile { file
7d70: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
7d80: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  "} } {..      se
7d90: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  t fileName [getB
7da0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 7db0: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
7dc0: 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  m]....      if {
7dd0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  ![file exists $f 7de0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 7df0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 7e00: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
7e10: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
7e20: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
7e30: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
7e40: 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22  g binary file \"
7e50: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 7e60: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 7e70: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 7e80: 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 t\n"].... 7e90: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } 7ea0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 7eb0: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 7ec0: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d e$fileName}] ==
7ed0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7ee0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 7ef0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 7f00: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 7f10: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 "---- delet 7f20: 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c ed binary file \ 7f30: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c ""$fileName \"\
7f40: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  n]..      } else
7f50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
7f60: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 7f70: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 7f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 7f90: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c -- failed to del 7fa0: 65 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 ete binary file 7fb0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 \""$fileName \"
7fc0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
7fd0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
7fe0: 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46   tryDeleteBuildF
7ff0: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  ile { fileName {
8000: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b  platform ""} } {
8010: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
8020: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
8030: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 8040: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
8050: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
8060: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 8070: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 8080: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
8090: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
80a0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
80b0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
80c0: 64 20 64 65 6c 65 74 69 6e 67 20 62 75 69 6c 64  d deleting build
80d0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 80e0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 80f0: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does 8100: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d not exist\n"]... 8110: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. 8120: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8130: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi 8140: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e le delete$fileN
8150: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
8160: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
8170: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8180: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 81a0: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64 -- deleted build 81b0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
81c0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
81d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
81e0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 81f0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 8200: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 8210: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 "---- failed 8220: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64 to delete build 8230: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
8240: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
8250: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
8260: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73    proc tryCopyAs
8270: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d  sembly { fileNam
8280: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
8290: 7b 70 64 62 20 74 72 75 65 7d 20 7d 20 7b 0d 0a  {pdb true} } {..
82a0: 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69        tryCopyBui
82b0: 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ldFile $fileName 82c0: 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20$platform....
82d0: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68      if {$pdb} th 82e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 en {.. tr 82f0: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b yCopyBuildFile [ 8300: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 8310: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 8320: 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 rootname$fileNa
8330: 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66  me] .pdb] $platf 8340: 6f 72 6d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 orm.. }.. 8350: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 8360: 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 tryDeleteAssemb 8370: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 ly { fileName {p 8380: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 latform ""} {pdb 8390: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 83a0: 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 tryDeleteBinar 83b0: 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 yFile$fileName
83c0: 24 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20  $platform.... 83d0: 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 if {$pdb} the
83e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79  n {..        try
83f0: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
8400: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
8410: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
8420: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65  e rootname $file 8430: 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 Name] .pdb]$pla
8440: 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 7d 0d 0a  tform..      }..
8450: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
8460: 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62  oc tryLoadAssemb
8470: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70  ly { fileName {p
8480: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d  latform ""} } {.
8490: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
84a0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
84b0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 84c0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
84d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
84e0: 7b 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d  {set assembly \.
84f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
8500: 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61  object load -loa
8510: 64 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61  dtype File -alia
8520: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d  s $fileName]}] = 8530: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 8540: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8550: 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 # NOTE: Now, add 8560: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 the necessary t 8570: 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d est constraint.. 8580: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8590: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 85a0: 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 t [file rootname 85b0: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
85c0: 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eName]]....
85d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
85e0: 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 69  NOTE: Grab the i
85f0: 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
8600: 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73  sion from the as
8610: 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a  sembly because..
8620: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
8630: 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 72 65  several tests re
8640: 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20  ly on it having
8650: 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e  a certain value.
8660: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8670: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
8680: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  nt [appendArgs [
8690: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 86a0: 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 ame] _ \.. 86b0: 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 [$assembly
86c0: 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72   ImageRuntimeVer
86d0: 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  sion]]....
86e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
86f0: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the
8700: 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65  full path of the
8710: 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20   loaded file...
8720: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8730: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61    return $fileNa 8740: 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 me.. }.... 8750: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 8760: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 8770: 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61 64 79 oc isSQLiteReady 8780: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 8790: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 87a0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 75 73 is procedure mus 87b0: 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 t return non-zer 87c0: 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 51 o only if the SQ 87d0: 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 Lite native.. 87e0: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 # libra 87f0: 72 79 20 61 6e 64 20 74 68 65 20 53 79 73 74 65 ry and the Syste 8800: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 m.Data.SQLite ma 8810: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 61 naged assembly a 8820: 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 re loaded.. 8830: 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 # and rea 8840: 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 dy for use by th 8850: 65 20 74 65 73 74 20 73 75 69 74 65 2e 20 20 43 e test suite. C 8860: 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 urrently, this p 8870: 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 rocedure.. 8880: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 8890: 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 e called only af 88a0: 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 ter the [tryLoad 88b0: 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 Assembly] proced 88c0: 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20 20 23 ure has.. # 88d0: 20 20 20 20 20 20 20 62 65 65 6e 20 63 61 6c 6c been call 88e0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 ed to probe for 88f0: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. 8900: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 SQLite managed a 8910: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 ssembly.. # 8920: 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 5b and the [ 8930: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 checkForSQLite] 8940: 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 62 65 procedure has be 8950: 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f en called to pro 8960: 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 be for.. # 8970: 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 the SQLite 8980: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 3b native library; 8990: 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 otherwise, this 89a0: 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 procedure will 89b0: 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 simply.. # 89c0: 20 20 20 20 20 20 61 6c 77 61 79 73 20 72 65 74 always ret 89d0: 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 urn zero... 89e0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 89f0: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 [expr {.. 8a00: 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e [haveConstrain 8a10: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t System.Data.SQ 8a20: 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65 43 6f Lite] && [haveCo 8a30: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d nstraint SQLite] 8a40: 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 .. }].. 8a50: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d }..... proc m 8a60: 61 74 63 68 4d 61 63 68 69 6e 65 20 7b 20 70 6c atchMachine { pl 8a70: 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20 20 atform } {.. 8a80: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8a90: 45 3a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 E: An empty stri 8aa0: 6e 67 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 ng for the platf 8ab0: 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61 74 20 74 orm means that t 8ac0: 68 65 20 62 75 69 6c 64 20 69 73 20 6e 6f 74 0d he build is not. 8ad0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ 8ae0: 70 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e 61 74 primarily] a nat 8af0: 69 76 65 20 62 75 69 6c 64 3b 20 74 68 65 72 65 ive build; there 8b00: 66 6f 72 65 2c 20 69 74 20 61 6c 77 61 79 73 20 fore, it always 8b10: 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20 20 20 20 matches... 8b20: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 8b30: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
8b40: 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65  tform] == 0} the
8b50: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
8b60: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
8b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
8b80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73      # NOTE: Does
8b90: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70   the specified p
8ba0: 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 75 70  latform match up
8bb0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current
8bc0: 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 20 20  process?..
8bd0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 6c  #..      if {$pl 8be0: 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63 68 69 atform eq [machi 8bf0: 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a neToPlatform$::
8c00: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63  tcl_platform(mac
8c10: 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  hine)]} then {..
8c20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
8c30: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rue..      }....
8c40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
8c50: 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 63 69   NOTE: The speci
8c60: 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 64 6f  fied platform do
8c70: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 70 20  es not match up
8c80: 77 69 74 68 20 74 68 65 20 70 6c 61 74 66 6f 72  with the platfor
8c90: 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  m..      #
8ca0: 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
8cb0: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20   process...
8cc0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
8cd0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
8ce0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
8cf0: 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20  ForSQLiteBuilds
8d00: 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63  { channel {selec
8d10: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
8d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
8d30: 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 65  OTE: Check for e
8d40: 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 76 61  very possible va
8d50: 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  lid combination
8d60: 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 77  of values used w
8d70: 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hen..      #
8d80: 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20     locating out
8d90: 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74  the build output
8da0: 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 6f 77   directory, show
8db0: 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c 61 62  ing each availab
8dc0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
8dd0: 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 69 6f    build variatio
8de0: 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e  n along the way.
8df0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8e00: 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 65 20   foreach native
8e10: 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 75 65  [list false true
8e20: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ] {..        for
8e30: 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 42 75  each year [getBu
8e40: 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20  ildYears] {..
8e50: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 63         foreach c
8e60: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65  onfiguration [ge
8e70: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
8e80: 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ions] {..
8e90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8ea0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
8eb0: 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 65 63  re out the effec
8ec0: 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 74 66  tive build platf
8ed0: 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d 0a 20  orm.  This is..
8ee0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
8ef0: 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74     based on whet
8f00: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72  her or not a [pr
8f10: 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 20  imarily] native
8f20: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20  build..
8f30: 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62 65     #       is be
8f40: 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 20 5b  ing used.  For [
8f50: 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e  primarily] non-n
8f60: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a 20  ative builds,..
8f70: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
8f80: 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20     this will be
8f90: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  an empty string.
8fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
8fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
8fc0: 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75   platform [getBu
8fd0: 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74  ildPlatform $nat 8fe0: 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ive].... 8ff0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9000: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
9010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9020: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
9030: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
9040: 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 5c 22  .SQLite build \"
9050: 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 20  " [expr \..
9060: 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74             {$nat 9070: 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 ive ? "native/" 9080: 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 : ""}] [expr {[s 9090: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a tring length \.. 90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 90b0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f$platform] > 0 ?
90c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 6c   [appendArgs $pl 90d0: 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d atform /] : ""}] 90e0: 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 20 20$year \..
90f0: 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 6f 6e            / $con 9100: 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e 2e figuration "\".. 9110: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 . "].... 9120: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 9130: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 9140: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali 9150: 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 fied directory w 9160: 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 here the necessa 9170: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ry.. 9180: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e # componen 9190: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ts for System.Da 91a0: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 ta.SQLite should 91b0: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 be found... 91c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 91d0: 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 set direc 91e0: 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 tory [joinBuildD 91f0: 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 irectory$native
9200: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9210: 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 61 73      [getBuildBas
9220: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 65 61  eDirectory] $yea 9230: 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e r$platform $con 9240: 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 figuration].... 9250: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 9260: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 9270: 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73 73 61 : Do the necessa 9280: 72 79 20 66 69 6c 65 73 20 65 78 69 73 74 3f 20 ry files exist? 9290: 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f Currently, no o 92a0: 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20 20 20 ther steps.. 92b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 92c0: 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 are taken to ver 92d0: 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 ify this build i 92e0: 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c s actually viabl 92f0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 9300: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 #.. i 9310: 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 69 6c f {[isBuildAvail 9320: 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24 64 69 able$native $di 9330: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b rectory]} then { 9340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9350: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 9360: 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e # NOTE: When in 9370: 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 "select" mode, 9380: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se 9390: 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 0d 0a lect the first.. 93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 93b0: 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 available 93c0: 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e build of System. 93d0: 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 Data.SQLite and 93e0: 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 then return.. 93f0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 9400: 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d immediately.. 9410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 9420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9430: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b if {$select && [
9440: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c  matchMachine $pl 9450: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. 9460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 9470: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 9480: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 # NOTE: Manu 9490: 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c ally override al 94a0: 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 l the build dire 94b0: 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d ctory selection. 94c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 94d0: 20 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 64 # related 94e0: 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 69 test settings i 94f0: 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65 n order to force 9500: 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 this build.. 9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 9520: 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 of System.D 9530: 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 ata.SQLite to be 9540: 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 used... 9550: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9560: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 9570: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 9580: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b eter.GetActive [ 9590: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
95a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
95b0: 20 20 20 20 20 20 20 22 41 64 64 52 75 6e 74 69         "AddRunti
95c0: 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d  meOption" : "Rem
95d0: 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  oveRuntimeOption
95e0: 22 7d 5d 20 20 6e 61 74 69 76 65 0d 0a 0d 0a 20  "}]  native....
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9600: 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24  et ::test_year $9610: 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 year.. 9620: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 9630: 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 _platform$platf
9640: 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
9650: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
9660: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63  configuration $c 9670: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a onfiguration.... 9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9690: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
96a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
96c0: 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64    "yes, selected
96d0: 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69   (" [expr {$nati 96e0: 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a ve ? "native/" : 96f0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 ""}] \.. 9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex 9710: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng 9720: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
9730: 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20  0 ? [appendArgs
9740: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9750: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 9760: 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 /] : ""}]$year
9770: 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f   / $configuratio 9780: 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 n ")\n"].... 9790: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 97a0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 rn true.. 97b0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 97c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 97d0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
97e0: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20  yes\n..
97f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
9800: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
9810: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
9820: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 9830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 9840: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 9850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 9860: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 9870: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... 9880: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF 9890: 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 orSQLiteReleases 98a0: 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 { channel {sele 98b0: 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 ct false} } {.. 98c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 98d0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 NOTE: Check for 98e0: 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66 past releases of 98f0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 9900: 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 63 ite in the direc 9910: 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 tory.. # 9920: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e contained in 9930: 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 the "System.Dat 9940: 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f a.SQLite" enviro 9950: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 nment variable, 9960: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 if.. # 9970: 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 present... 9980: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 9990: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e info exists ::en 99a0: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 v(System.Data.SQ 99b0: 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 Lite)] && \.. 99c0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 99d0: 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 ength$::env(Sys
99e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29  tem.Data.SQLite)
99f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
9a00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9a10: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
9a20: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
9a30: 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68  ied directory wh
9a40: 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72  ere the necessar
9a50: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
9a60: 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f     components fo
9a70: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
9a80: 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66  Lite should be f
9a90: 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  ound...        #
9aa0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69  ..        set di
9ab0: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61  rectory [file na
9ac0: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
9ad0: 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
9ae0: 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d     $::env(System 9af0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 .Data.SQLite) [g 9b00: 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e etReleaseVersion 9b10: 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 ]]].... t 9b20: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
9b30: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
9b40: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
9b50: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
9b60: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
9b70: 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  elease \"" \..
9b80: 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63            $direc 9b90: 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a tory "\"... "].. 9ba0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 9bb0: 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c sReleaseAvailabl 9bc0: 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c 61 e$directory pla
9bd0: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
9be0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
9bf0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 9c00: 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 atform] == 0} th 9c10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9c20: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 set platform u 9c30: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. 9c40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 9c50: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 if {$select &&
9c60: 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70  [matchMachine $p 9c70: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { 9c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 9c90: 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 t ::build_direct 9ca0: 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a ory$directory..
9cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
9cc0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 9cd0: 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 pendArgs "yes, s 9ce0: 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 elected ("$plat
9cf0: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20  form ")\n"]....
9d00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9d10: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  n true..
9d20: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
9d30: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 9d40: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 9d50: 67 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 gs "yes ("$plat
9d60: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20  form ")\n"]..
9d70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9d80: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
9d90: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 9da0: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 nnel no\n.... 9db0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 foreach p 9dc0: 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 ath [lsort -decr 9dd0: 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 easing [file lis 9de0: 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d t$directory *]]
9df0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
9e00: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
9e10: 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 6c 65   $path] && [file 9e20: 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 70 61 isdirectory$pa
9e30: 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  th]} then {..
9e40: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
9e50: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 9e60: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 9e70: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 9e80: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 9e90: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 9ea0: 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a release \"" \.. 9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9ec0: 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22$path "\"... "
9ed0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
9ee0: 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73     if {[isReleas
9ef0: 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 74 68  eAvailable $path 9f00: 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e platform]} then 9f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 9f20: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 9f30: 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
9f40: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f60: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75    set platform u
9f70: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  nknown..
9f80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
9fa0: 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74  {$select && [mat 9fb0: 63 68 4d 61 63 68 69 6e 65 20 24 70 6c 61 74 66 chMachine$platf
9fc0: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9fe0: 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65  set ::build_dire
9ff0: 63 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20  ctory $path.... a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a010: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
a020: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
a030: 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70  , selected (" $p a040: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a latform ")\n"].. a050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a060: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. a070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . a080: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. a090: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu a0a0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
a0b0: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20  endArgs "yes ("
a0c0: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d  $platform ")\n"] a0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a0e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. a0f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu a110: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
a120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a130: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a140: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
a150: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
a160: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
a170: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel a180: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. a190: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a1a0: 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 - environment va a1b0: 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e riable \"System. a1c0: 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 Data.SQLite\" is a1d0: 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 not " \.. a1e0: 20 20 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 "set, skip a1f0: 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 ping check for r a200: 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a eleases...\n"].. a210: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... a220: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. a230: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro a240: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 c checkForSQLite a250: 4c 69 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 Library { channe a260: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 l } {.. tpu a270: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
a280: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
a290: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
a2a0: 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ry... "....
a2b0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
a2d0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
a2e0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73  s +NonPublic Sys
a2f0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
a300: 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20  SQLite3 \..
a310: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
a320: 65 72 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d  ersion} version]
a330: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
a340: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a350: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
a360: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned
a370: 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c  version was null
a380: 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69  .  If so, make i
a390: 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20  t easy..
a3a0: 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e  #       to spot.
a3b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
a3c0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
a3d0: 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e   length $version a3e0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. a3f0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 set ve a400: 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 rsion null.. a410: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... a420: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO a430: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 TE: Attempt to q a440: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil a450: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie a460: 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 r for the SQLite a470: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # a480: 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d core library.. a490: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a4a0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { a4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a4c0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke a4d0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli a4e0: 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 c System.Data.SQ a4f0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a Lite.SQLite3 \.. a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a510: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 7d 20 SQLiteSourceId} a520: 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 sourceId]} then a530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. a540: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE a550: 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 : We failed to q a560: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil a570: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie a580: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. a590: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s a5a0: 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d ourceId unknown. a5b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... a5c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. a5d0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i a5e0: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 f the returned F a5f0: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide a600: 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c ntifier was null a610: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 . If.. # a620: 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 so, make a630: 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e it easy to spot. a640: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a650: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string a660: 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
a670: 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
a680: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
a690: 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20  ourceId null..
a6a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
a6b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
a6c0: 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53  NOTE: Yes, the S
a6d0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
a6e0: 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ry appears to be
a6f0: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
a700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a710: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  addConstraint SQ
a720: 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Lite....
a730: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ a740: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 appendArgs "yes a750: 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 ("$version " "
a760: 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d  $sourceId ")\n"] a770: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { a780: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs a790: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
a7a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
a7b0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
a7c0: 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  ForSQLiteInterop
a7d0: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a   { channel } {..
a7e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha a7f0: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b nnel "---- check a800: 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 ing for SQLite i a810: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e nterop assembly. a820: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 .. ".... if a830: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. a840: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object a850: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + a860: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d NonPublic System a870: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL a880: 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 ite3 \.. a890: 20 20 20 20 20 20 49 6e 74 65 72 6f 70 56 65 72 InteropVer a8a0: 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 3d sion} version] = a8b0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. a8c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. a8d0: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if a8e0: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 the returned ve a8f0: 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 rsion was null. a900: 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 If so, make it a910: 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 easy.. # a920: 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a to spot... a930: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a940: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l a950: 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 ength$version]
a960: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
a970: 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73          set vers
a980: 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  ion null..
a990: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
a9a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
a9b0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65  : Attempt to que
a9c0: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f  ry the Fossil so
a9d0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
a9e0: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a  for the SQLite..
a9f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
aa00: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library...
aa10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
aa20: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa40: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
aa50: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
aa60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
aa70: 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20  te.SQLite3 \..
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
aa90: 74 65 72 6f 70 53 6f 75 72 63 65 49 64 7d 20 73  teropSourceId} s
aaa0: 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b  ourceId]} then {
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
aac0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
aad0: 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75   We failed to qu
aae0: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
aaf0: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
ab00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
ab10: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
ab20: 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a  urceId unknown..
ab30: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
ab40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ab50: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
ab60: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f   the returned Fo
ab70: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
ab80: 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e  tifier was null.
ab90: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20    If..        #
aba0: 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69        so, make i
abb0: 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d  t easy to spot..
abc0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
abd0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
abe0: 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64  length $sourceId abf0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. ac00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f set so ac10: 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 urceId null.. ac20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ac30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N ac40: 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ ac50: 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass ac60: 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f embly appears to ac70: 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a be available... ac80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ac90: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint aca0: 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a SQLiteInterop.. acb0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs acc0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
acd0: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 76 65  Args "yes (" $ve ace0: 72 73 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 rsion " "$sourc
acf0: 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20  eId ")\n"]..
ad00: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
ad10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann ad20: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d el no\n.. } ad30: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... ad40: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL ad50: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan ad60: 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 t { channel name ad70: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput ad80: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
ad90: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
ada0: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
adb0: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ng for System.Da
adc0: 74 61 2e 53 51 4c 69 74 65 20 64 65 66 69 6e 65  ta.SQLite define
add0: 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24 6e   constant \"" $n ade0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. adf0: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 "\"... "].... ae00: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { ae10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ae20: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f ae30: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic ae40: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi ae50: 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 te.SQLite3 \.. ae60: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 66 69 Defi ae70: 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 64 65 66 neConstants} def ae80: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d ineConstants] == ae90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. aea0: 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 if {[lsearch aeb0: 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 -exact -nocase aec0: 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73$defineConstants
aed0: 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74   $name] != -1} t aee0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. aef0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # af00: 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 NOTE: Yes, this af10: 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 define constant af20: 77 61 73 20 65 6e 61 62 6c 65 64 20 77 68 65 6e was enabled when af30: 20 74 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 the managed.. af40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # af50: 61 73 73 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d assembly was com af60: 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 piled... af70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 #.. a af80: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap af90: 70 65 6e 64 41 72 67 73 20 64 65 66 69 6e 65 43 pendArgs defineC afa0: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 onstant.System.D afb0: 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61 6d ata.SQLite.$nam
afc0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
afd0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y afe0: 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 es\n.. } aff0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. b000: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b010: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d   no\n..        }
b020: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b030: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
b040: 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e  $channel error\n b050: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } b060: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge b070: 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 tDateTimeFormat b080: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. b090: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi b0a0: 73 20 70 72 6f 63 65 64 75 72 65 20 73 69 6d 70 s procedure simp b0b0: 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 20 22 ly returns the " b0c0: 64 65 66 61 75 6c 74 22 20 44 61 74 65 54 69 6d default" DateTim b0d0: 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a 20 e format used.. b0e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 20 # by b0f0: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. b100: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. b110: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists b120: 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d ::datetime_form b130: 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 at] && \.. b140: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng b150: 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 th$::datetime_f
b160: 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e  ormat] > 0} then
b170: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
b180: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
b190: 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75 61 6c  eturn the manual
b1a0: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20 76 61  ly overridden va
b1b0: 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61 74 65  lue for the Date
b1c0: 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 20  Time format...
b1d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b1e0: 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 65 74   return $::datet b1f0: 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 20 ime_format.. b200: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. b210: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # b220: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 61 6e NOTE: Return an b230: 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 69 6d ISO8601 DateTim b240: 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74 69 e format compati b250: 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74 65 2c ble with SQLite, b260: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # b270: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ b280: 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74 61 62 Lite, and suitab b290: 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72 69 le for round-tri b2a0: 70 70 69 6e 67 20 77 69 74 68 20 74 68 65 0d 0a pping with the.. b2b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # b2c0: 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73 20 6f DateTime class o b2d0: 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 2e f the framework. b2e0: 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 If this value b2f0: 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20 20 is changed,.. b300: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var b310: 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79 20 66 ious tests may f b320: 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ail... #. b330: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return b340: 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d "yyyy-MM-dd HH:m b350: 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 0d 0a m:ss.FFFFFFFK".. b360: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. b370: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 6d ... proc enum b380: 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 erableToList { e b390: 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 numerable } {.. b3a0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result b3b0: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... b3c0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng b3d0: 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 th$enumerable]
b3e0: 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61  == 0 || $enumera b3f0: 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 ble eq "null"} t b400: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r b410: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
b420: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
b430: 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d  object foreach -
b440: 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e 75 6d  alias item $enum b450: 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 erable {.. b460: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le b470: 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d ngth$item] > 0}
b480: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b490: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
b4a0: 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 69 6e  t [$item ToStrin b4b0: 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 g].. }.. b4c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b4d0: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
b4e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
b4f0: 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 75 72  oc catchAndRetur
b500: 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 61 63  n { script {stac
b510: 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 7b 73  kTrace false} {s
b520: 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d  trict true} } {.
b530: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
b540: 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65  # NOTE: Evaluate
b550: 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76   the script prov
b560: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
b570: 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74  er in their cont
b580: 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20  ext,..      #
b590: 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 62 6f      capturing bo
b5a0: 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 61 6e  th the result an
b5b0: 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64  d the return cod
b5c0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
b5d0: 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74     set code [cat
b5e0: 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 24 73  ch {uplevel 1 $s b5f0: 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a cript} result].. b600: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b610: 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 # NOTE: Did the b620: 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 script provided b630: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e by our caller N b640: 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f OT raise an erro b650: 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r?.. #.. b660: 20 20 20 69 66 20 7b 24 73 74 72 69 63 74 20 26 if {$strict &
b670: 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20  & $code == 0 || b680: 21 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 !$strict && $cod b690: 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a e != 1} then {.. b6a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. b6b0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 # NOTE: Succe b6c0: 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20 6c 69 ss. Return a li b6d0: 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 st with the retu b6e0: 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 rn code and the b6f0: 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 result... b700: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu b710: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 rn [list$code $b720: 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d result].. } b730: 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63 6b 54 elseif {$stackT
b740: 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  race} then {..
b750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b760: 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65   # NOTE: Failure
b770: 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 77 61  .  Our caller wa
b780: 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 63 6b  nts a full stack
b790: 20 74 72 61 63 65 20 28 69 66 20 61 70 70 6c 69   trace (if appli
b7a0: 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20  cable),..
b7b0: 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20   #       return
b7c0: 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20  a list with the
b7d0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and
b7e0: 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 62 61  the result verba
b7f0: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  tim...        #.
b800: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
b810: 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73  [list $code$res
b820: 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ult]..      } el
b830: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
b840: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
b850: 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63   Failure.  Our c
b860: 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20 77  aller does not w
b870: 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 63 6b  ant a full stack
b880: 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 20 20   trace (if..
b890: 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 6c      #       appl
b8a0: 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 6e 20  icable), return
b8b0: 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20  a list with the
b8c0: 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 68 65  return code, the
b8d0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..
b8e0: 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 6f 72  #       code for
b8f0: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
b900: 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  , and the error
b910: 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 74 68  message up to th
b920: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
b930: 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 20 74     point where t
b940: 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20 73  he stack trace s
b950: 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20  hould start...
b960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b970: 20 73 65 74 20 69 6e 64 65 78 20 5b 73 74 72 69   set index [stri
b980: 6e 67 20 66 69 72 73 74 20 22 20 20 20 61 74 20  ng first "   at
b990: 22 20 24 72 65 73 75 6c 74 5d 3b 20 23 20 48 41  " $result]; # HA b9a0: 43 4b 3a 20 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d CK: Reliable?... b9b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return b9c0: 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 [list$code $::e b9d0: 72 72 6f 72 43 6f 64 65 20 5b 65 78 70 72 20 7b rrorCode [expr { b9e0: 24 69 6e 64 65 78 20 21 3d 20 2d 31 20 3f 20 5c$index != -1 ? \
b9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 73  ..            [s
ba00: 74 72 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69  tring trim [stri
ba10: 6e 67 20 72 61 6e 67 65 20 24 72 65 73 75 6c 74  ng range $result ba20: 20 30 20 24 69 6e 64 65 78 5d 5d 20 3a 20 24 72 0$index]] : $r ba30: 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 esult}]].. ba40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... ba50: 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 proc compileCSh ba60: 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 arpWith {.. ba70: 20 20 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f text memo ba80: 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 ry symbols stric ba90: 74 20 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 t resultsVarName baa0: 20 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 errorsVarName f bab0: 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 ileNames.. bac0: 20 20 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a args } {.. bad0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # bae0: 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20 NOTE: Since we baf0: 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 are going to use bb00: 20 74 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d this method nam bb10: 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 e a lot, assign bb20: 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 it to a.. # bb30: 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 variable bb40: 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d first... #. bb50: 0a 20 20 20 20 20 20 73 65 74 20 61 64 64 20 52 . set add R bb60: 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c eferencedAssembl bb70: 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 ies.Add.... bb80: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE bb90: 3a 20 43 72 65 61 74 65 20 74 68 65 20 62 61 73 : Create the bas bba0: 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 e command to eva bbb0: 6c 75 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 luate and add th bbc0: 65 20 70 72 6f 70 65 72 74 79 20 73 65 74 74 69 e property setti bbd0: 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ngs.. # bbe0: 20 20 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f that are almo bbf0: 73 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64 st always needed bc00: 20 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73 by our unit tes bc10: 74 73 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73 ts (i.e. the Sys bc20: 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 tem.. # bc30: 20 20 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 and System.Da bc40: 74 61 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 ta assembly refe bc50: 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 rences)... bc60: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d #.. set com bc70: 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 mand [list \.. bc80: 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 43 compileC bc90: 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 6d Sharp$text $mem bca0: 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 ory$symbols $st bcb0: 72 69 63 74 20 72 65 73 75 6c 74 73 20 65 72 72 rict results err bcc0: 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ors \.. bcd0: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c$add System.dll
bce0: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 74   $add System.Dat bcf0: 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 a.dll$add Syste
bd00: 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e 64  m.Transactions.d
bd10: 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ll \..
bd20: 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e  $add System.Xml. bd30: 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d dll].... #. bd40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A bd50: 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69 dd all the provi bd60: 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61 ded file names a bd70: 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 s assembly refer bd80: 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d ences... #. bd90: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 . foreach f bda0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
bdb0: 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61  es {..        la
bdc0: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61  ppend command $a bdd0: 64 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c dd [getBinaryFil bde0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d eName$fileName]
bdf0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
be00: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
be10: 54 45 3a 20 41 64 64 20 74 68 65 20 65 78 74 72  TE: Add the extr
be20: 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20  a arguments, if
be30: 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d  any, to the comm
be40: 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e  and to evaluate.
be50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
be60: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f   eval lappend co
be70: 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20  mmand $args.... be80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # be90: 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20 NOTE: Alias the bea0: 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72 compiler local r beb0: 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72 esults and error bec0: 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 74 s variables to t bed0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # bee0: 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 variable names bef0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our bf00: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... bf10: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 bf20: 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65$resultsVarName
bf30: 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20   results..
bf40: 75 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56  upvar 1 $errorsV bf50: 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d arName errors... bf60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. bf70: 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 # NOTE: Evaluate bf80: 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 the constructed bf90: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d [compileCSharp] bfa0: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 command and ret bfb0: 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 urn the.. # bfc0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a result... bfd0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 #.. e bfe0: 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 val$command..
bff0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
c000: 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69   isMemoryDb { fi
c010: 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20  leName } {..
c020: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
c030: 45 3a 20 49 73 20 74 68 65 20 73 70 65 63 69 66  E: Is the specif
c040: 69 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c  ied database fil
c050: 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e  e name really an
c060: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
c070: 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ase?..      #..
c080: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70       return [exp
c090: 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20  r {$fileName eq c0a0: 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d ":memory:" || \. c0b0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri c0c0: 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 ng range$fileNa
c0d0: 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c  me 0 12] eq "fil
c0e0: 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20  e::memory:"}]..
c0f0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
c100: 63 20 69 73 54 61 62 6c 65 49 6e 44 62 20 7b 20  c isTableInDb {
c110: 6e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62  name {varName db
c120: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
c130: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
c140: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
c150: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
c160: 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
c170: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
c180: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
c190: 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61  aller.  It conta
c1a0: 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ins the database
c1b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
c1c0: 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d  le that will be.
c1d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
c1e0: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74  sed to execute t
c1f0: 68 65 20 71 75 65 72 79 20 75 73 65 64 20 74 6f  he query used to
c200: 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68   determine if th
c210: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73  e named table is
c220: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
c230: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20  present in that
c240: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20  database...
c250: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
c260: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d  1 $varName db... c270: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c280: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the c290: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 sqlite_master ta c2a0: 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 ble to determine c2b0: 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 if the named ta c2c0: 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 ble is.. # c2d0: 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e present in c2e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a the database... c2f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s c300: 65 74 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20 20 et sql {.. c310: 20 20 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a SELECT COUNT(* c320: 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 ) FROM sqlite_ma c330: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 20 ster WHERE type c340: 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 = 'table' AND na c350: 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 7d me = ?;.. } c360: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. c370: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur c380: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 n non-zero if th c390: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 e named table is c3a0: 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 present... c3b0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return c3c0: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 [expr {.. c3d0: 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d [sql execute - c3e0: 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 execute scalar$
c3f0: 64 62 20 24 73 71 6c 20 5b 6c 69 73 74 20 70 61  db $sql [list pa c400: 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 6d ram1 String$nam
c410: 65 5d 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20 7d  e]] > 0..      }
c420: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
c430: 20 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20   proc trimSql {
c440: 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72  sql } {..      r
c450: 65 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61  eturn [regsub -a
c460: 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72  ll -- {\s+} [str
c470: 69 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22  ing trim $sql] " c480: 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "].. }..... c490: 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 proc executeS c4a0: 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 ql { sql {execut c4b0: 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 e none} {format c4c0: 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 none} {fileName c4d0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ""} } {.. i c4e0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt c4f0: 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 h$fileName] ==
c500: 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69 6c  0} then {set fil
c510: 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d  eName :memory:}.
c520: 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20 24  .      setupDb $c530: 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 fileName "" "" " c540: 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 66 61 " "" "" false fa c550: 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 lse false false c560: 64 62 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 db true.... c570: 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 try {.. c580: 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 return [uplevel c590: 31 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 1 [list \.. c5a0: 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 sql execu c5b0: 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 65 te -execute$exe
c5c0: 63 75 74 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f  cute -format $fo c5d0: 72 6d 61 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d rmat$db $sql]]. c5e0: 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 . } finally c5f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6c 65 61 {.. clea c600: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 nupDb$fileName
c610: 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66  db false false f
c620: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  alse..      }..
c630: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
c640: 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46  c getConnectionF
c650: 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d 65 20  lags { fileName
c660: 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66 61 6c  flags {quiet fal
c670: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
c680: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
c690: 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68  Figure out which
c6a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
c6b0: 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f  ame or connectio
c6c0: 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65 0d 0a  n string these..
c6d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
c6e0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77  nnection flags w
c6f0: 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 70 70  ill actually app
c700: 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69 73 20  ly to.  This is
c710: 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d 0a 20  not necessary..
c720: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in
c730: 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63 61 75  quiet mode becau
c740: 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  se this informat
c750: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
c760: 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a 20 20   for logging..
c770: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20      #       and
c780: 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70 6f 73  reporting purpos
c790: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
c7a0: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} c7b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c7c0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len c7d0: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e gth$fileName] >
c7e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
c7f0: 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61        set databa
c800: 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  se [appendArgs "
c810: 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 24 66  file name \"" $f c820: 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 ileName \"].. c830: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ c840: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 info exists ::da c850: 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c 0d 0a taSource] && \.. c860: 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 61 72 ![ar c870: 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64 61 74 ray exists ::dat c880: 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e 20 7b aSource]} then { c890: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set c8a0: 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64 database [append c8b0: 41 72 67 73 20 22 64 61 74 61 20 73 6f 75 72 63 Args "data sourc c8c0: 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53 6f 75 e \""$::dataSou
c8d0: 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20  rce \"]..
c8e0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
c8f0: 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73       set databas
c900: 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20  e <unknown>..
c910: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
c920: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
c930: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28    # NOTE: Show (
c940: 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63  and log) the loc
c950: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  al connection fl
c960: 61 67 73 20 61 6e 64 20 74 68 65 20 61 73 73 6f  ags and the asso
c970: 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20  ciated..      #
c980: 20 20 20 20 20 20 64 61 74 61 20 73 6f 75 72 63        data sourc
c990: 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  e or file name..
c9a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
c9b0: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the c9c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu c9d0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
c9e0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
c9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
ca00: 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63  --- local connec
ca10: 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22  tion flags for "
ca20: 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20   $database \.. ca30: 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a " are: ca40: 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e " [expr {[strin ca50: 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d g length$flags]
ca60: 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20 20   > 0 ? \..
ca70: 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
ca80: 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20  s \" $flags \"] ca90: 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d : "<none>"}] \n] caa0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cab0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO cac0: 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 TE: If there are cad0: 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 any global (per cae0: 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 test run) conne caf0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 ction flags curr cb00: 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 ently.. # cb10: 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 set, use th cb20: 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 em now (i.e. by cb30: 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 combining them w cb40: 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 ith the ones for cb50: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 this.. # cb60: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 connection) cb70: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. cb80: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis cb90: 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f ts ::connection_ cba0: 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 flags] && \.. cbb0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l cbc0: 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 ength$::connect
cbd0: 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20  ion_flags] > 0}
cbe0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
cbf0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
cc00: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
cc10: 29 20 74 68 65 20 64 65 74 65 63 74 65 64 20 67  ) the detected g
cc20: 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  lobal connection
cc30: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20   flags...
cc40: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
cc50: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. cc60: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs cc70: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
cc80: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
cca0: 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65  --- global conne
ccb0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 65  ction flags dete
ccc0: 63 74 65 64 3a 20 22 20 5c 0d 0a 20 20 20 20 20  cted: " \..
ccd0: 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b           [expr {
cce0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
ccf0: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d  onnection_flags]
cd00: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
cd10: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
cd20: 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f  gth $::connectio cd30: 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c n_flags] > 0 ? \ cd40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. cd50: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
cd60: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
cd70: 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e  gs \"] : "<none>
cd80: 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  "}] \n]..
cd90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
cda0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
cdb0: 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20   Combine and/or
cdc0: 72 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e  replace the conn
cdd0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64  ection flags and
cde0: 20 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a   then show the..
cdf0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
ce00: 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  new value...
ce10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
ce20: 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e  et flags [combin
ce30: 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a  eFlags $flags$:
ce40: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
ce50: 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  s]....        #.
ce60: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
ce70: 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
ce80: 74 68 65 20 6e 65 77 20 65 66 66 65 63 74 69 76  the new effectiv
ce90: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
cea0: 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  gs...        #..
ceb0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu cec0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. ced0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
cee0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
cef0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
cf00: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
cf10: 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74  combined connect
cf20: 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20  ion flags for "
cf30: 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20  $database \.. cf40: 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 " are cf50: 3a 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 : " [expr {[stri cf60: 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 ng length$flags
cf70: 5d 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20  ] > 0 ? \..
cf80: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
cf90: 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c  Args \" $flags \ cfa0: 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 "] : "<none>"}] cfb0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. cfc0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... cfd0: 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a return$flags..
cfe0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
cff0: 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65  oc getFlagsPrope
d000: 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d  rty { {flags ""}
d010: 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
d020: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
d030: 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72     # NOTE: Deter
d040: 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f  mine what the co
d050: 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61  mbined (global a
d060: 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63  nd local) connec
d070: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
d080: 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64      flags should
d090: 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75   be, possibly qu
d0a0: 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  ietly...      #.
d0b0: 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73  .      set flags
d0c0: 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46   [getConnectionF
d0d0: 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24  lags "" $flags$
d0e0: 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  quiet]....
d0f0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
d100: 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72   If no global or
d110: 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f   local connectio
d120: 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65  n flags were spe
d130: 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20  cified, the..
d140: 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75     #       defau
d150: 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  lt connection fl
d160: 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73  ags should be us
d170: 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72  ed; therefore, r
d180: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20  eturn..      #
d190: 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74       an empty st
d1a0: 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73  ring in that cas
d1b0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
d1c0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
d1d0: 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d  ength $flags] == d1e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. d1f0: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 return "".. d200: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... d210: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: d220: 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 In order to che d230: 63 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c ck if the defaul d240: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 t connection fla d250: 67 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 gs are being use d260: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # d270: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 it is necessary d280: 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f to attempt a co d290: 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 nversion to the d2a0: 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 actual enumerate d2b0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # d2c0: 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 type. Failing d2d0: 74 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 that, the check d2e0: 61 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 against the defa d2f0: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b d300: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # d310: 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 skipped... d320: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 72 #.. set er d330: 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f ror null; # IGNO d340: 52 45 44 0d 0a 20 20 20 20 20 20 73 65 74 20 76 RED.. set v d350: 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 alue [object inv d360: 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 oke Utility TryP d370: 61 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 arseFlagsEnum "" d380: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 \.. Sy d390: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite d3a0: 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio d3b0: 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 nFlags ""$flags
d3c0: 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20   null true \..
d3d0: 20 20 20 20 20 20 20 20 65 72 72 6f 72 5d 0d 0a          error]..
d3e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d3f0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
d400: 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 20 73  combined flags s
d410: 74 72 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74 20  tring could not
d420: 61 63 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e 76  actually be conv
d430: 65 72 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20  erted..      #
d440: 20 20 20 20 20 74 6f 20 74 68 65 20 65 6e 75 6d       to the enum
d450: 65 72 61 74 65 64 20 74 79 70 65 20 69 74 20 69  erated type it i
d460: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  s the default va
d470: 6c 75 65 2c 20 74 68 65 6e 20 6a 75 73 74 20 75  lue, then just u
d480: 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  se..      #
d490: 20 20 69 74 20 76 65 72 62 61 74 69 6d 3b 20 6f    it verbatim; o
d4a0: 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 72  therwise, just r
d4b0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73  eturn an empty s
d4c0: 74 72 69 6e 67 2e 20 20 49 6e 20 74 68 61 74 0d  tring.  In that.
d4d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
d4e0: 61 73 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ase, the default
d4f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
d500: 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d  s will be used..
d510: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d520: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
d530: 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 20  th $value] == 0 d540: 7c 7c 20 24 76 61 6c 75 65 20 6e 65 20 22 44 65 ||$value ne "De
d550: 66 61 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d 0a  fault"} then {..
d560: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
d570: 20 20 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68     # WARNING: Th
d580: 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 73  is returns the s
d590: 74 72 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74  tring value of t
d5a0: 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67  he combined flag
d5b0: 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  s, not..
d5c0: 23 20 20 20 20 20 20 20 20 20 20 74 68 65 20 65  #          the e
d5d0: 6e 75 6d 65 72 61 74 65 64 20 76 61 6c 75 65 2e  numerated value.
d5e0: 20 20 54 68 69 73 20 69 73 20 62 79 20 64 65 73    This is by des
d5f0: 69 67 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e  ign and should n
d600: 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ot..        #
d610: 20 20 20 20 20 20 20 62 65 20 63 68 61 6e 67 65         be change
d620: 64 20 77 69 74 68 6f 75 74 20 63 61 72 65 66 75  d without carefu
d630: 6c 20 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 20  l consideration
d640: 28 65 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d 0a  (e.g. it would..
d650: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
d660: 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 53     prevent the S
d670: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection
d680: 63 6c 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f 77  class from allow
d690: 69 6e 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20 20  ing invalid..
d6a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
d6b0: 5b 22 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74 61  ["magical"] meta
d6c0: 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20 20  -flags)...
d6d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
d6e0: 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20  urn [appendArgs
d6f0: 22 46 6c 61 67 73 3d 22 20 24 66 6c 61 67 73 20  "Flags=" $flags d700: 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \;].. }.... d710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". d720: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p d730: 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 roc setupDb {.. d740: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN d750: 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 ame {mode ""} {d d760: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 ateTimeFormat "" d770: 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 } {dateTimeKind d780: 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a ""} {flags ""}.. d790: 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 {ext d7a0: 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 ra ""} {qualify d7b0: 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 true} {delete tr d7c0: 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d ue} {uri false}. d7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 . {te d7e0: 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 mporary true} {v d7f0: 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 arName db} {quie d800: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. d810: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N d820: 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see d830: 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 if our caller ha d840: 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i d850: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas d860: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. d870: 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory d880: 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
d890: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
d8a0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
d8b0: 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
d8c0: 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65  st databases use
d8d0: 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  d by the test su
d8e0: 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a  ite are placed..
d8f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
d900: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
d910: 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68  directory.  Each
d920: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65   database and re
d930: 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20  lated files..
d940: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20     #       used
d950: 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64  by a test should
d960: 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62   be cleaned up b
d970: 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e  y that test usin
d980: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  g the..      #
d990: 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22       "cleanupDb"
d9a0: 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f   procedure, belo
d9b0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
d9c0: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor d9d0: 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
d9e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
d9f0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
da00: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
da10: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
da20: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa da30: 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... da40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. da50: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau da60: 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 lt, delete any p da70: 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 re-existing data da80: 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 base with the sa da90: 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 me file.. # daa0: 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 name if i dab0: 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 t currently exis dac0: 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ts... #.. dad0: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
dae0: 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26  ry && $delete && daf0: 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 [file exists$f
db00: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
db10: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
db20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
db30: 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61  empt to delete a
db40: 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
db50: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
db60: 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
db70: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d       #       nam
db80: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
db90: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
dba0: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $dbb0: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] dbc0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. dbd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. dbe0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some dbf0: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de dc00: 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r dc10: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... dc20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. dc30: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
dc40: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
dc50: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes dc60: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen dc70: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. dc80: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W dc90: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t dca0: 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 o delete databas dcb0: 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 e file \""$file
dcc0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
dcd0: 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
dce0: 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a  ng setup, error:
dcf0: 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ dd00: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. dd10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. dd20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. dd30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re dd40: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci dd50: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e dd60: 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 .g. "db") in the dd70: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d context of our. dd80: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c dd90: 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 aller. The hand dda0: 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 le to the opened ddb0: 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 database will b ddc0: 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. ddd0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. dde0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
ddf0: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
de00: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74        # NOTE: St
de10: 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65  art building the
de20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
de30: 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65  ng.  The only re
de40: 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a  quired portion..
de50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66        #       of
de60: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
de70: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 61  string is the da
de80: 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68  ta source, which
de90: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the..
dea0: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
deb0: 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20  abase file name
dec0: 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20  itself.  If our
ded0: 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20  caller wants to
dee0: 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20  use a URI as..
def0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
df00: 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65  data source, use
df10: 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e   the FullUri con
df20: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
df30: 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20  roperty to..
df40: 20 20 23 20 20 20 20 20 20 20 70 72 65 76 65 6e    #       preven
df50: 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63  t the data sourc
df60: 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65  e string from be
df70: 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20  ing mangled...
df80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
df90: 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20  {$uri} then {.. dfa0: 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 set conne dfb0: 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 ction {FullUri=$
dfc0: 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
dfd0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
dfe0: 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
dff0: 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65  ion {Data Source
e000: 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20  =${fileName}}.. e010: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e020: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: e030: 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 Since this proc e040: 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 edure has no spe e050: 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f cial knowledge o e060: 66 20 77 68 61 74 20 74 68 65 20 64 65 66 61 75 f what the defau e070: 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 lt.. # e080: 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 setting is for e090: 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 the ToFullPath e0a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin e0b0: 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 g propery, alway e0c0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # e0d0: 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 add the value w e0e0: 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 e know about to e0f0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s e100: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d tring... #. e110: 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f . append co e120: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c nnection {;ToFul e130: 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d lPath=${qualify}
e140: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
e150: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
e160: 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
e170: 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f  ied a journal mo
e180: 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65  de, add the nece
e190: 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20  ssary portion..
e1a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20       #       of
e1b0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
e1c0: 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20  tring now...
e1d0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
e1e0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d  string length $m e1f0: 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ode] > 0} then { e200: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append e210: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f connection {;Jo e220: 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 urnal Mode=${mod
e230: 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e}}..      }....
e240: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
e250: 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61   NOTE: If our ca
e260: 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61  ller specified a
e270: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
e280: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73  , add the necess
e290: 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
e2a0: 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68     portion of th
e2b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
e2c0: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ing now...
e2d0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
e2e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74  ring length $dat e2f0: 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 eTimeFormat] > 0 e300: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. e310: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect e320: 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f ion {;DateTimeFo e330: 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 rmat=${dateTimeF
e340: 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d  ormat}}..      }
e350: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
e360: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
e370: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
e380: 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e  ed a DateTimeKin
e390: 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73  d, add the neces
e3a0: 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20  sary portion..
e3b0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74      #       of t
e3c0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
e3d0: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ring now...
e3e0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
e3f0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61  tring length $da e400: 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d teTimeKind] > 0} e410: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. e420: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti e430: 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e on {;DateTimeKin e440: 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 d=${dateTimeKind
e450: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  }}..      }....
e460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
e470: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
e480: 20 77 68 61 74 20 74 68 65 20 66 69 6e 61 6c 20   what the final
e490: 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20 63  flags for this c
e4a0: 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20 74  onnection need t
e4b0: 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  o be...      #..
e4c0: 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20        set flags
e4d0: 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  [getConnectionFl
e4e0: 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 24 66  ags $fileName$f
e4f0: 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a  lags $quiet].... e500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # e510: 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 NOTE: If our ca e520: 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 73 ller specified s e530: 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ome SQLiteConnec e540: 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 tionFlags, add t e550: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # e560: 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 necessary port e570: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 ion of the conne e580: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 ction string now e590: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e5a0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le e5b0: 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 ngth$flags] > 0
e5c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e5d0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
e5e0: 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c  ion {;Flags=${fl e5f0: 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a ags}}.. }.. e600: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. e610: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our e620: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified e630: 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61 an extra payloa e640: 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 d to the connect e650: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # e660: 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 6e string, appen e670: 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 d it now... e680: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s e690: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 tring length$ex
e6a0: 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tra] > 0} then {
e6b0: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
e6c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24   connection \; $e6d0: 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a extra.. }.. e6e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. e6f0: 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 # NOTE: Open th e700: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 e database conne e710: 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 ction now, placi e720: 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 ng the opaque ha e730: 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 ndle value.. e740: 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 # into t e750: 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 he variable spec e760: 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c ified by our cal e770: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. e780: 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c set db [sql e790: 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 open -type SQLi e7a0: 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 te [subst$conne
e7b0: 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20  ction]]....
e7c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
e7d0: 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20  : Configure the
e7e0: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
e7f0: 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c  ory for the newl
e800: 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73  y opened databas
e810: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
e820: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20   connection now
e830: 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65  unless our calle
e840: 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20  r forbids it...
e850: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
e860: 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20   {$temporary && e870: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: e880: 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44 no(setTemporaryD e890: 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e irectory)]} then e8a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 {.. sql e8b0: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 execute$db [app
e8c0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e8d0: 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74         "PRAGMA t
e8e0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
e8f0: 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65  ory = \"" [getTe
e900: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79  mporaryDirectory
e910: 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d  ] \"\;]..      }
e920: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
e930: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79     # NOTE: Alway
e940: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e  s return the con
e950: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75  nection handle u
e960: 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...
e970: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
e980: 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a  urn $db.. }.. e990: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD e9a0: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 bConnection { {v e9b0: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a arName db} } {.. e9c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # e9d0: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to e9e0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va e9f0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db ea00: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex ea10: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. ea20: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. ea30: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t ea40: 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 he database prev ea50: 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 iously opened vi ea60: 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 a the.. # ea70: 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 [setupDb] p ea80: 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 rocedure should ea90: 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e be stored there. eaa0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. eab0: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
eac0: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  e db....      #.
ead0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
eae0: 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20  his returns the
eaf0: 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65  ADO.NET IDbConne
eb00: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73  ction object ins
eb10: 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20  tance for the..
eb20: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65       #       spe
eb30: 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68  cified databse h
eb40: 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65  andle.  Since ge
eb50: 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63  tting this objec
eb60: 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20  t relies upon..
eb70: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
eb80: 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72  le internals, gr
eb90: 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20  eat care should
eba0: 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69  be taken to avoi
ebb0: 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a  d disposing of..
ebc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
ebd0: 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68  is object or oth
ebe0: 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69  erwise putting i
ebf0: 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69  t into an invali
ec00: 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20  d state...
ec10: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
ec20: 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74  fo exists db]} t
ec30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
ec40: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
ec60: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
ec70: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62  s +NonPublic -ob
ec80: 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73  jectflags +NoDis
ec90: 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  pose \..
eca0: 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49          -alias I
ecb0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
ecc0: 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  tive.connections
ecd0: 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d 0a 20 20   Item $db} \.. ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re ecf0: 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then ed00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. ed10: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT ed20: 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 E: Success, retu ed30: 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 rn the opaque ob ed40: 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 ject handle... ed50: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ed60: 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
ed70: 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  ult..        } e
ed80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
ed90: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
eda0: 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72  NOTE: Failure, r
edb0: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
edc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
edd0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test ede0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append edf0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. ee00: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN ee10: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g ee20: 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 et connection ha ee30: 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 ndle for databas ee40: 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. ee50: 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20$db "\",
ee60: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72  error: " \n\t $r ee70: 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. ee80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. ee90: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro eea0: 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 c freeDbConnecti eeb0: 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f on { {varName co eec0: 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 nnection} } {.. eed0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # eee0: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t eef0: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var ef00: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e iable (e.g. "con ef10: 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 nection") in the ef20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # ef30: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 context of our c ef40: 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 aller. The opaq ef50: 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 ue object handle ef60: 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d for an ADO.NET. ef70: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c ef80: 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f onnection previo ef90: 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 usly returned by efa0: 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f [getDbConnectio efb0: 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 n] should be.. efc0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 # stor efd0: 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... efe0: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar eff0: 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 1$varName conne
f000: 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23  ction....      #
f010: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
f020: 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76  Attempt to remov
f030: 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a  e the opaque obj
f040: 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20  ect handle from
f050: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d  the interpreter.
f060: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
f070: 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63  ow.  This [objec
f080: 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20  t dispose] call
f090: 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c  will not actuall
f0a0: 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  y dispose of the
f0b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
f0c0: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63  underlying objec
f0d0: 74 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e  t because the +N
f0e0: 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61  oDispose flag wa
f0f0: 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20  s set on it..
f100: 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e     #       durin
f110: 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68  g creation of th
f120: 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  e opaque object
f130: 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23  handle...      #
f140: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
f150: 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74  o exists connect
f160: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ion] && \..
f170: 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a       [catch {obj
f180: 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e  ect dispose $con f190: 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d nection} error]} f1a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f1b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO f1c0: 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f f1d0: 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 ailed to remove f1e0: 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f the handle, repo f1f0: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... f200: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput f210: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
f220: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
f230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
f240: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
f250: 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e  ed to remove con
f260: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c  nection handle \
f270: 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c  "" $connection \ f280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ f290: 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t f2a0: 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
f2b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
f2c0: 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f      proc addDbCo
f2d0: 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65  nnection { conne
f2e0: 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64  ction {varName d
f2f0: 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  b} } {..      #.
f300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
f310: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
f320: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
f330: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
f340: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
f350: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
f360: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
f370: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
f380: 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... f390: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # f3a0: 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 NOTE: Create a c f3b0: 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 orrectly formatt f3c0: 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 ed name for the f3d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect f3e0: 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 ion to.. # f3f0: 20 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 be added t f400: 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 o the list manag f410: 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 ed by the Eagle f420: 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... f430: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set f440: 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f db [object invo f450: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu f460: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. f470: 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 Eagle._Compone f480: 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d nts.Private.Form f490: 61 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 atOps DatabaseOb f4a0: 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 jectName$connec
f4b0: 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  tion \..
f4c0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
f4d0: 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  on [object invok
f4e0: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
f4f0: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d  tActive NextId]]
f500: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
f510: 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74     # NOTE: Add t
f520: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
f530: 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20  ection provided
f540: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f  by our caller to
f550: 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20   the list..
f560: 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73   #       of thos
f570: 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45  e known to the E
f580: 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72  agle interpreter
f590: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f5a0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
f5b0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
f5c0: 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  c Interpreter.Ge
f5d0: 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69  tActive.connecti
f5e0: 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20  ons Add \..
f5f0: 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63       $db$connec
f600: 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  tion..    }.....
f610: 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70      proc cleanup
f620: 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76  Db { fileName {v
f630: 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c  arName db} {coll
f640: 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c 69  ect true} {quali
f650: 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 20  fy true}..
f660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
f670: 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20 7b  delete true} } {
f680: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
f690: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
f6a0: 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65   to force all pe
f6b0: 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20  nding "garbage"
f6c0: 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f  objects to be co
f6d0: 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20  llected,..
f6e0: 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e  #       includin
f6f0: 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65  g SQLite stateme
f700: 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f  nts and backup o
f710: 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f  bjects; this sho
f720: 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20  uld allow..
f730: 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64   #       the und
f740: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
f750: 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65   file to be dele
f760: 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ted...      #..
f770: 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec f780: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. f790: 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag f7a0: 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
f7b0: 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
f7c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
f7d0: 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
f7e0: 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
f7f0: 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
f800: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
f810: 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
f820: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54        caller.  T
f830: 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65  he handle to the
f840: 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f   database previo
f850: 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20  usly opened via
f860: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
f870: 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f     [setupDb] pro
f880: 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65  cedure should be
f890: 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
f8a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
f8b0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName f8c0: 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. f8d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f # NOTE: Clo f8e0: 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f se the connectio f8f0: 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 n to the databas f900: 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 6f e now. This sho f910: 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 uld allow us.. f920: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 64 # to d f930: 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 6c elete the underl f940: 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 ying database fi f950: 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 le... #.. f960: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex f970: 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61 74 ists db] && [cat f980: 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 ch {sql close$d
f990: 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  b} error]} then
f9a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
f9b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
f9c0: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20   somehow failed
f9d0: 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74  to close the dat
f9e0: 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77 68  abase, report wh
f9f0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
fa00: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: fa10: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap fa20: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. fa30: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA fa40: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to fa50: 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 20 close database fa60: 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72 72 \""$db "\", err
fa70: 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
fa80: 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72       \n\t $error fa90: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d \n].. }... faa0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. fab0: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 # NOTE: First, s fac0: 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 ee if our caller fad0: 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61 has requested a fae0: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 n in-memory data faf0: 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a base... #.. fb00: 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f set isMemo fb10: 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 ry [isMemoryDb$
fb20: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  fileName]....
fb30: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
fb40: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
fb50: 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20 64  ll path to the d
fb60: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d  atabase file nam
fb70: 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c  e.  For now, all
fb80: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20   test..      #
fb90: 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69       database fi
fba0: 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  les are stored i
fbb0: 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  n the temporary
fbc0: 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20  directory...
fbd0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
fbe0: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75  $isMemory &&$qu
fbf0: 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  alify} then {..
fc00: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
fc10: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
fc20: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
fc30: 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c  tory] [file tail
fc40: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20   $fileName]].. fc50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # fc60: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: fc70: 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c Check if the fil fc80: 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d e still exists.. fc90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. fca0: 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
fcb0: 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69  & $delete && [fi fcc0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
fcd0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
fce0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
fcf0: 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65   # NOTE: Skip de
fd00: 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  leting database
fd10: 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64  files if somebod
fd20: 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61  y sets the globa
fd30: 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  l..        #
fd40: 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 20 70     variable to p
fd50: 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20  revent it...
fd60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
fd70: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
fd80: 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46   ::no(cleanupDbF
fd90: 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile)]} then {..
fda0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
fdb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
fdc0: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
fdd0: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73  the test databas
fde0: 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20  e file now...
fdf0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fe00: 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64      if {[set cod
fe10: 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64  e [catch {file d
fe20: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} fe30: 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b error]]} then { fe40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. fe50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N fe60: 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow fe70: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete fe80: 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 the file, repor fe90: 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... fea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. feb0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
fec0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
fed0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
fee0: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
fef0: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
ff00: 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65   delete database
ff10: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN ff20: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. ff30: 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin ff40: 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 g cleanup, error ff50: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
ff60: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
ff70: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
ff80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
ff90: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
ffa0: 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20  E: Show that we
ffb0: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
ffc0: 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20   the file...
ffd0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ffe0: 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d     set code 0...
fff0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
10000 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 10010 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 10020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 10030 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 === WARNING: ski 10040 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61 pped deleting da 10050 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 10060 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
10070 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
10080 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22  uring cleanup\n"
10090 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
100a0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
100b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
100c0 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c   # NOTE: The fil
100d0 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
100e0 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20  , success!..
100f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
10100 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20  et code 0..
10110 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
10120 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d  rn $code.. }. 10130 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 .... proc set 10140 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c upDbInterruptCal 10150 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 lback { channel 10160 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 log } {.. t 10170 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
10180 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64  --- setting up d
10190 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70  ebugger interrup
101a0 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d  t callback... ".
101b0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
101c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  tch {..        #
101d0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
101e0 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  : Make sure the
101f0 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 20  script debugger
10200 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64  and the isolated
10210 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 72 65   interpreter are
10220 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
10230 20 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64    setup and read
10240 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20  y for use...
10250 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64      #..        d
10260 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 20  ebug setup true
10270 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  true....
10280 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
10290 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65  E: Load the nece
102a0 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69  ssary packages i
102b0 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64  nto the isolated
102c0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
102d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
102e0 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b 0d 0a    debug eval {..
102f0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
10300 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d  e require Eagle.
10310 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61  .          packa
10320 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
10330 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20  .Library..
10340 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
10350 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a  ire Eagle.Test..
10360 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
10370 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10380 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
10390 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61   necessary varia
103a0 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73  bles into the is
103b0 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74  olated interpret
103c0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  er...        #..
103d0 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e          debug in
103e0 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73  voke 0 set ::tes
103f0 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e 6e  t_channel $chann 10400 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 el; # NOTE: For 10410 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20 20 [tputs]... 10420 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 debug invoke 0 10430 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 set ::test_log 10440 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f$log; # NOTE: Fo
10450 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20  r [tlog].....
10460 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10470 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20  # NOTE: Install
10480 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72  the callback scr
10490 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61  ipt to be evalua
104a0 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61  ted in the isola
104b0 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ted..        #
104c0 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 72       interpreter
104d0 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72   when this inter
104e0 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 72  preter is interr
104f0 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 0d  upted by script.
10500 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
10510 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65   cancellation, e
10520 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  tc...        #..
10530 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 61          debug ca
10540 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73  llback apply {{s
10550 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20  ender e} {..
10560 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10570 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
10580 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62 61 63   if this callbac
10590 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65  k is one that we
105a0 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20   care about...
105b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
105c0 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 65 6c       if {"Cancel
105d0 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b 24  ed" in [split [$105e0 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 65 5d e InterruptType] 105f0 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a ", "]} then {.. 10600 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 10610 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 10620 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 E: Iterate throu 10630 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 gh all database 10640 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 connections know 10650 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 n to the.. 10660 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 10670 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72 rent interpreter 10680 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 10690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 106a0 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c ject foreach -al 106b0 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20 20 20 ias pair \.. 106c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a [obj 106d0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 106e0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 65 20 s +NonPublic$e
106f0 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e  Interpreter.conn
10700 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20  ections] {..
10710 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
10720 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
10730 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61  E: Attempt to ca
10740 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65  ncel any SQL que
10750 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ries in progress
10760 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20   on this..
10770 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
10780 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10790 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ion...
107a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
107b0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
107c0 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 6e  {$pair Value.Can 107d0 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 cel} error]} the 107e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 107f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
10800 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
10810 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20  ndArgs \n \..
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10830 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
10840 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 65 6c  failed to cancel
10850 20 71 75 65 72 79 20 66 6f 72 20 63 6f 6e 6e 65   query for conne
10860 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20  ction \"" \..
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10880 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22   [$pair Key] "\" 10890 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 108a0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
108b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
108c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
108d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
108e0 20 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72   }}..      } err
108f0 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
10900 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
10910 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70  straint interrup
10920 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65  tCallback.sqlite
10930 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  3....        tpu
10940 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ 10950 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 n.. } else 10960 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 10970 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
10980 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72  dArgs "no, error
10990 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 109a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 109b0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 109c0 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 cleanupFile { f 109d0 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 ileName {collect 109e0 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 true} {force fa 109f0 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 10a00 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 10a10 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 Attempt to forc 10a20 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 e all pending "g 10a30 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 arbage" objects 10a40 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c to be collected, 10a50 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 10a60 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 including SQLite 10a70 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 statements and 10a80 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 backup objects; 10a90 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f this should allo 10aa0 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 w.. # 10ab0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 the underlying 10ac0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f database file to 10ad0 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 be deleted... 10ae0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 10af0 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
10b00 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
10b10 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73  ctGarbage $::tes 10b20 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 10b30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 10b40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 10b50 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 ck if the file s 10b60 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 till exists... 10b70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 10b80 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
10b90 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
10ba0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10bb0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
10bc0 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  p deleting test
10bd0 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64  files if somebod
10be0 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61  y sets the globa
10bf0 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20  l variable..
10c00 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 70      #       to p
10c10 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20  revent it...
10c20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
10c30 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69  f {$force || ![i 10c40 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 10c50 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 cleanupFile)]} t 10c60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 10c70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 10c80 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 10c90 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 delete the test 10ca0 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 file now... 10cb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10cc0 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 if {[set code 10cd0 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 [catch {file de 10ce0 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 lete$fileName}
10cf0 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d  error]]} then {.
10d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
10d10 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
10d20 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66  TE: We somehow f
10d30 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
10d40 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74  the file, report
10d50 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20   why...
10d60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
10d70 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 10d80 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 10d90 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 10da0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 10db0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 10dc0 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 delete test file 10dd0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
10de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10df0 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65    "\" during cle
10e00 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c  anup, error: " \
10e10 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 10e20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 10e30 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 10e40 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 10e50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 10e60 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 ow that we skipp 10e70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 ed deleting the 10e80 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 file... 10e90 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 10ea0 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 t code 0.... 10eb0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
10ec0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
10ed0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
10ee0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
10ef0 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20  ARNING: skipped
10f00 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69  deleting test fi
10f10 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 10f20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10f30 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 10f40 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 anup\n"].. 10f50 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 10f60 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 10f70 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10f80 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f The file does no 10f90 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 t exist, success 10fa0 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 !.. #.. 10fb0 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 10fc0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 10fd0 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d return$code.
10fe0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
10ff0 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 61  roc collectGarba
11000 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69  ge { channel {mi
11010 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30 7d  lliseconds 1000}
11020 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d 20   {quiet true} }
11030 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  {..      if {[ca
11040 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
11050 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
11060 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75  mory false} resu
11070 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
11080 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$11090 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 110a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
110b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
110c0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
110d0 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72       "---- memor
110e0 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20  y in use by the
110f0 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65  CLR before colle
11100 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20  ction... " \..
11110 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res 11120 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ult " bytes\n"]. 11130 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 11140 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 11150 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
11160 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
11170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
11180 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
11190 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d  led to get CLR m
111a0 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72  emory usage, err
111b0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
111c0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 111d0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a t \n].. }.. 111e0 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 23 23 .. ######## 111f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11200 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11230 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 #.... #.. 11240 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 # NOTE: Repe 11250 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74 atedly attempt t 11260 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 o collect garbag 11270 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f e until the allo 11280 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 tted number.. 11290 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69 # of mi 112a0 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65 lliseconds has e 112b0 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20 lapsed. Always 112c0 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 attempt to colle 112d0 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20 ct garbage.. 112e0 20 20 23 20 20 20 20 20 20 20 61 74 20 6c 65 61 # at lea 112f0 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 st once... 11300 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74 61 #.. set sta 11310 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 rt [clock second 11320 73 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74 s].. set st 11330 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74 op [expr {$start
11340 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64   + ($millisecond 11350 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 s / 1000)}].... 11360 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 do {.. 11370 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 11380 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 11390 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61 force a full ga 113a0 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e rbage collection 113b0 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e now. Report an 113c0 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 113d0 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 error that is 113e0 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 encountered if 113f0 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 we fail... 11400 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 11410 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object 11420 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 11430 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d 20 65 alMemory true} e 11440 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. 11450 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
11460 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
11470 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
11480 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
11490 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20  NG: failed full
114a0 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69  garbage collecti
114b0 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  on, error: " \..
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
114d0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 114e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 114f0 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f set now [clo 11500 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 ck seconds].. 11510 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 } while {$sta
11520 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e  rt <= $now &&$n
11530 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d 0a 20  ow < $stop}.... 11540 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 ########### 11550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a ##############.. 11590 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 115a0 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok 115b0 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d e GC GetTotalMem 115c0 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75 6c ory false} resul 115d0 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 115e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
115f0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
11600 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 11610 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 11620 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 11630 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 "---- memory 11640 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 in use by the C 11650 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 63 74 LR after collect 11660 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 ion... " \.. 11670 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c$resul
11680 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  t " bytes\n"]..
11690 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
116a0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
116b0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 116c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 116d0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 116e0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 116f0 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d d to get CLR mem 11700 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 ory usage, error 11710 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 11720 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
11730 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
11740 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
11750 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65   getSQLiteHandle
11760 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c  Counts { channel
11770 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
11780 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   {..      set re
11790 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list]....
117a0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f       if {[haveCo
117b0 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20  nstraint \..
117c0 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65            define
117d0 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
117e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e  Data.SQLite.COUN
117f0 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20  T_HANDLE]} then
11800 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
11810 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64        # NOTE: Ad
11820 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20  d each critical
11830 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20  handle count to
11840 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69  the resulting li
11850 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  st...        #..
11860 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
11870 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65  name [list conne
11880 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65  ctionCount state
11890 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70  mentCount backup
118a0 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20  Count] {..
118b0 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f      set value [o
118c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
118d0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
118e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
118f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
11900 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
11910 65 74 68 6f 64 73 20 24 6e 61 6d 65 5d 0d 0a 0d  ethods $name]... 11920 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 11930 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
11940 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
11950 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 11960 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 11970 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 11980 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 critical handle 11990 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 count \""$name
119a0 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 20  "\" is " $value 119b0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 119c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 .... la 119d0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 ppend result$va
119e0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lue..        }..
119f0 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
11a00 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 11a10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11a20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 11a30 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f actual handle co 11a40 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 76 61 unts are not ava 11a50 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 ilable; therefor 11a60 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 e, just.. 11a70 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 # return 11a80 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a an empty list... 11a90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 11aa0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
11ab0 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c  l "---- critical
11ac0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75   handle counts u
11ad0 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20  navailable\n"..
11ae0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
11af0 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result.. 11b00 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 11b10 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 oc shutdownSQLit 11b20 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 e { channel {for 11b30 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 ce false} {quiet 11b40 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 11b50 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11b60 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 TE: Make sure th 11b70 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c at SQLite core l 11b80 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 ibrary is comple 11b90 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 tely shutdown. 11ba0 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 This.. # 11bb0 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 74 is used by t 11bc0 65 73 74 73 20 74 68 61 74 20 63 68 61 6e 67 65 ests that change 11bd0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f configuration o 11be0 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 ptions and/or th 11bf0 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ose.. # 11c00 20 20 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 that need to 11c10 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67 69 6e make sure loggin 11c20 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 g is initialized 11c30 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 (i.e. just in c 11c40 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ase.. # 11c50 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f the SQLite co 11c60 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 69 re library was i 11c70 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 nitialized in th 11c80 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f 72 20 e process prior 11c90 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 11ca0 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 the SQLiteLog 11cb0 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62 6c 65 class being able 11cc0 20 74 6f 20 73 65 74 75 70 20 69 74 73 20 6c 6f to setup its lo 11cd0 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e gging callback). 11ce0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11cf0 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 Normally, this s 11d00 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 hould only be pe 11d10 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 rformed if SQLit 11d20 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d e is loaded and. 11d30 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 . # r 11d40 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 eady for use by 11d50 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. 11d60 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 11d70 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 if {$force || [i
11d80 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74  sSQLiteReady]} t
11d90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
11da0 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46  ..        # BUGF
11db0 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69  IX: Before calli
11dc0 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68  ng the native sh
11dd0 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c  utdown function,
11de0 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d   make sure both.
11df0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
11e00 20 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41     of the PRAGMA
11e10 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f   related directo
11e20 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65  ry names are fre
11e30 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
11e40 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
11e50 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
11e60 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  s $channel true. 11e70 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 11e80 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e catch {object in 11e90 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 11ea0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 11eb0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 11ec0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 11ed0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 11ee0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11ef0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68 75 74 sqlite3_shut 11f00 64 6f 77 6e 7d 20 72 65 73 75 6c 74 5d 20 3d 3d down} result] == 11f10 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 11f20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
11f30 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
11f40 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 11f50 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 11f60 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 11f70 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 11f80 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e sqlite3_shutdown 11f90 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 ()... ok: "$res
11fa0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
11fb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
11fc0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
11fd0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 11fe0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 11ff0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
12000 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
12010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
12020 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
12030 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e  te3_shutdown()..
12040 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  . error: " \n\t
12050 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 12060 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 12070 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 12080 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 12090 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 reportSQLiteRes 120a0 6f 75 72 63 65 73 20 7b 20 63 68 61 6e 6e 65 6c ources { channel 120b0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7b {quiet false} { 120c0 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 collect true} } 120d0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 120e0 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 # NOTE: Skip a 120f0 6c 6c 20 6f 75 74 70 75 74 20 69 66 20 77 65 20 ll output if we 12100 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22 are running in " 12110 71 75 69 65 74 22 20 6d 6f 64 65 2e 0d 0a 20 20 quiet" mode... 12120 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 12130 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 {[haveConstraint 12140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12150 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 defineConstant 12160 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL 12170 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 ite.INTEROP_VIRT 12180 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d UAL_TABLE] && \. 12190 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 . [have 121a0 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 Constraint \.. 121b0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 defi 121c0 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste 121d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 52 m.Data.SQLite.TR 121e0 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 ACK_MEMORY_BYTES 121f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 12200 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
12210 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12220 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12230 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m 12240 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 12250 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 SQLiteMemory... 12260 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ".. }.... 12270 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 12280 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok 12290 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 122a0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 122b0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 122c0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 122d0 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 Memory \.. 122e0 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73 41 bytesA 122f0 6c 6c 6f 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 llocated} memory 12300 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 12310 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
12320 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
12330 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
12340 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 12350 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 dArgs$memory "
12360 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  bytes\n"]..
12370 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
12380 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
12390 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75      set memory u
123a0 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20  nknown....
123b0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 123c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 123d0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
123e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
123f0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 12400 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 12410 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 12420 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
12430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
12440 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 12450 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 -- maximum memor 12460 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi 12470 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 teMemory... ".. 12480 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 12490 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 124a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 124b0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 124c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 124d0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 124e0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f QLite.SQLiteMemo 124f0 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 12500 20 20 20 20 20 20 6d 61 78 69 6d 75 6d 42 79 74 maximumByt 12510 65 73 41 6c 6c 6f 63 61 74 65 64 7d 20 6d 65 6d esAllocated} mem 12520 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ory] == 0} then 12530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 12540 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
12550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
12560 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 12570 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
12580 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20   " bytes\n"]..
12590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
125a0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
125b0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72         set memor
125c0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20  y unknown....
125d0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 125e0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 125f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
12600 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
12610 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 12620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 12630 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 12640 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 ... if {!$q
12650 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
12660 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 12670 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 nnel "---- curre 12680 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 nt memory in use 12690 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d by SQLite... ". 126a0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 126b0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 126c0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 126d0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 126e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 126f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12700 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 12710 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 thods \.. 12720 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d sqlite3_m 12730 65 6d 6f 72 79 5f 75 73 65 64 7d 20 6d 65 6d 6f emory_used} memo 12740 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { 12750 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
12760 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
12770 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $12780 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 12790 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 rgs$memory " by
127a0 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
127b0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
127c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
127d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
127e0 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20  aybe the SQLite
127f0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
12800 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20  unavailable?..
12810 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12820 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
12830 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  own....        i
12840 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 12850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 12860 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
12870 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 12880 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 12890 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 128a0 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65 set result$me
128b0 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65  mory; # NOTE: Re
128c0 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75  turn memory in-u
128d0 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72  se to our caller
128e0 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  .....      if {!
128f0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 12900 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
12910 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78  hannel "---- max
12920 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  imum memory in u
12930 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20  se by SQLite...
12940 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
12950 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
12960 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
12970 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
12980 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
12990 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
129a0 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
129b0 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..
129c0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
129d0 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
129e0 72 20 30 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20  r 0} memory] ==
129f0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
12a00 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 12a10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12a20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
12a30 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 12a40 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d mory " bytes\n"] 12a50 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 12a60 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 12a70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12a80 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 # NOTE: Maybe th 12a90 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 e SQLite core li 12aa0 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c brary is unavail 12ab0 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 able?.. # 12ac0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 .. set me 12ad0 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a mory unknown.... 12ae0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
12af0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
12b00 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 12b10 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 12b20 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
12b30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
12b40 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  }....      if {$12b50 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d collect} then {. 12b60 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 . collect 12b70 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c Garbage$channel
12b80 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
12b90 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 12ba0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12bb0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
12bc0 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d  ---- current mem
12bd0 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68  ory in use by th
12be0 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20  e CLR... "..
12bf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
12c00 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
12c10 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
12c20 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20  alMemory false}
12c30 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68  memory] == 0} th
12c40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
12c50 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74   {[string is int
12c60 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d 65  eger -strict $me 12c70 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mory]} then {.. 12c80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
12c90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
12ca0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
12cb0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 12cc0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
12cd0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
12ce0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
12cf0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
12d00 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e     set memory in
12d10 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20  valid....
12d20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 12d30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12d40 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
12d50 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $12d60 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 12d70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 12d80 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 12d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 12da0 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a memory unknown.. 12db0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
12dc0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
12dd0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $12de0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 12df0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
12e00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
12e10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
12e20 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 12e30 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 12e40 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 12e50 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e rectories { chan 12e60 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 65 nel {reset false 12e70 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 12e80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 12e90 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74 eck if the sqlit 12ea0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 12eb0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 12ec0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 is available... 12ed0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 #.. tp 12ee0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a uts$channel \..
12ef0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
12f00 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e  checking for fun
12f10 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69  ction sqlite3_wi
12f20 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
12f30 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  y... "....
12f40 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
12f50 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 68   This call to th
12f60 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
12f70 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75  set_directory fu
12f80 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 0d  nction uses the.
12f90 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
12fa0 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20 66  nvalid value 0 f
12fb0 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72 67  or the first arg
12fc0 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 64  ument.  This cod
12fd0 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a 20  e is designed..
12fe0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
12ff0 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67  check if calling
13000 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69   the function wi
13010 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63 65  ll raise an exce
13020 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20  ption (i.e...
13030 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 61     #       the a
13040 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 20  ctual result of
13050 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  the function doe
13060 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 20  s not matter as
13070 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20  long as no..
13080 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
13090 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29 2e  ory is changed).
130a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
130b0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
130d0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
130e0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
13100 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
13110 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
13120 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..
13130 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69        sqlite3_wi
13140 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
13150 79 20 30 20 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d  y 0 null}] == 0}
13160 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13170 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
13180 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20  TE: Calling the
13190 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
131a0 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63  t_directory func
131b0 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20  tion does not..
131c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
131d0 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  ause an exceptio
131e0 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74  n; therefore, it
131f0 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 62   must be availab
13200 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20  le (i.e...
13210 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 74    #       even t
13220 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20  hough it should
13230 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65  return a failure
13240 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20   return code in
13250 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  this..        #
13260 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20        case)...
13270 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13280 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73   addConstraint s
13290 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
132a0 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20  _directory....
132b0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 132c0 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 nnel yes\n.... 132d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 132e0 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 # NOTE: Does ou 132f0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f r caller want to 13300 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63 reset the direc 13310 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 tories?.. 13320 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 13330 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$reset} then {..
13340 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
13350 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
13360 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  ow make sure the
13370 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65   database and te
13380 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
13390 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  ies are..
133a0 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74     #       reset
133b0 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
133c0 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f  alues, which sho
133d0 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20  uld be null for
133e0 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  both...
133f0 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74   #       Since t
13400 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
13410 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
13420 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c  unction is avail
13430 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..
13440 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 2e   #       use it.
13450 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
13460 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65           for {se
13470 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64  t index 1} {$ind 13480 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e ex < 3} {incr in 13490 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 dex} {.. 134a0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 134b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 134c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 134d0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 134e0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 13500 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 13510 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 13520 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. 13530 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 sqlit 13540 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 13550 65 63 74 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 ectory$index nu
13560 6c 6c 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ll} \..
13570 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
13580 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
13590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
135a0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 135b0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 135d0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite 135e0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 135f0 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c ctory("$index \
13600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13610 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20      ", null)...
13620 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e  ok: " $result \n 13630 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 13640 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 13650 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
13660 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
13670 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
13680 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
13690 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  l sqlite3_win32_
136a0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20  set_directory("
136b0 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20  $index \.. 136c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e ", n 136d0 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 ull)... error: " 136e0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
136f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
13700 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
13710 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
13720 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
13730 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 13740 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 no\n.... 13750 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13760 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c TE: Does our cal 13770 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 ler want to rese 13780 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 t the directorie 13790 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c s? This can onl 137a0 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 137b0 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 be performed 137c0 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 if SQLite is loa 137d0 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f ded and ready fo 137e0 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 137f0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 13800 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 suite... 13810 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 13820 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73 53 {$reset && [isS
13830 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65  QLiteReady]} the
13840 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
13850 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
13860 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72  TE: Now make sur
13870 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
13880 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
13890 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20  ectories are..
138a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
138b0 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61  reset their defa
138c0 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63  ult values, whic
138d0 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c  h should be null
138e0 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20   for both...
138f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69        #       Si
13900 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f  nce the sqlite3_
13910 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
13920 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  ory function doe
13930 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20  s not..
13940 20 23 20 20 20 20 20 20 20 61 70 70 65 61 72 20   #       appear
13950 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c  to be available,
13960 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 69 61   use the associa
13970 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  ted PRAGMA comma
13980 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23  nds..          #
13990 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 2e 0d         instead..
139a0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
139b0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
139c0 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20  directory [list
139d0 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
139e0 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f  tory temp_store_
139f0 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20  directory] {..
13a00 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71            set sq
13a10 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50  l [appendArgs "P
13a20 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f  RAGMA " $directo 13a30 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a ry " = \"\";"].. 13a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 13a50 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 {[catch {execut 13a60 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c eSql$sql} resul
13a70 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
13a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
13a90 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 13aa0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 13ac0 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 ---- execute PRA 13ad0 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 GMA "$directory
13ae0 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d   "... ok: \"" \.
13af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
13b00 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d     $result \"\n] 13b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 13b20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 13b30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
13b40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
13b50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13b60 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63        "---- exec
13b70 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69  ute PRAGMA " $di 13b80 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 rectory "... err 13b90 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 13ba0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 13bb0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
13bc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
13bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
13be0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
13bf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
13c00 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73  NOTE: Finally, s
13c10 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20  how the current
13c20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
13c30 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
13c40 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
13c50 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20     directories.
13c60 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62   This can only b
13c70 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53  e performed if S
13c80 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d  QLite is loaded.
13c90 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
13ca0 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65  nd ready for use
13cb0 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
13cc0 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
13cd0 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74      if {[isSQLit
13ce0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
13cf0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
13d00 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74   directory [list
13d10 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
13d20 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65  ctory temp_store
13d30 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20  _directory] {..
13d40 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $13d50 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13d60 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 rgs "---- checki 13d70 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 ng "$directory
13d80 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20  "... "]....
13d90 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70       set sql [ap
13da0 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41  pendArgs "PRAGMA
13db0 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b   " $directory \; 13dc0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 13dd0 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 f {[catch {execu 13de0 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 teSql$sql scala
13df0 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d  r} result] == 0}
13e00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13e10 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 13e20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 13e30 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 "ok: \""$result
13e40 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20   \"\n]..
13e50 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13e60 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 13e70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 13e80 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c gs "error: " \n\ 13e90 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
13ea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
13eb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
13ec0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
13ed0 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73  oc loadSQLiteTes
13ee0 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e  tSettings { chan
13ef0 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20  nel {suffix ""}
13f00 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
13f10 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
13f20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c    # NOTE: Skip l
13f30 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 74 69  oading the setti
13f40 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 73 61  ngs if their usa
13f50 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  ge has been disa
13f60 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  bled...      #..
13f70 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
13f80 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
13f90 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 29  iteTestSettings)
13fa0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
13fb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
13fc0 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f  NOTE: Load custo
13fd0 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f  m per-user and/o
13fe0 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20  r per-host test
13ff0 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
14000 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14010 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
14020 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  ts ::tcl_platfor
14030 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b  m(user)]} then {
14040 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
14050 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
14060 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
14070 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74  [getCommonDirect
14080 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ory] \..
14090 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
140a0 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66  s settings $suff 140b0 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 ix .$::tcl_plat
140c0 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c  form(user) .eagl
140d0 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e]]....
140e0 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
140f0 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46  s $userSettingsF 14100 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 14110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 14120 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
14130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
14140 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 14150 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14170 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 "---- loading p 14180 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 er-user test set 14190 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 141a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 141b0 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67$userSetting
141c0 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c  sFileName \"...\
141d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
141e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
141f0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 70 6c   if {[catch {upl
14200 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75  evel 1 [list sou
14210 72 63 65 20 24 75 73 65 72 53 65 74 74 69 6e 67  rce $userSetting 14220 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 sFileName]} \.. 14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14240 20 20 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 error]} then 14250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14260 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
14270 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
14280 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 14290 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 142a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 142b0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 142c0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 142d0 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 20 73 load per-user s 142e0 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 142f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14300 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74$userSet
14310 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c  tingsFileName "\
14320 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  ", error: " \n\t
14330 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 14340 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 14350 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 14360 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 14370 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 14380 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
14390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
143a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 143b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 143d0 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f "---- skipped lo 143e0 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 ading per-user t 143f0 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c est settings fil 14400 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 14410 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72$user
14420 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
14430 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
14440 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
14450 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
14460 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
14470 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23   }....        ##
14480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
144a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
144b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
144c0 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20  #####....
144d0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
144e0 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  s ::tcl_platform
144f0 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d  (host)]} then {.
14500 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 68  .          set h
14510 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
14520 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
14530 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f  getCommonDirecto
14540 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ry] \..
14550 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
14560 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 69   settings $suffi 14570 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 x .$::tcl_platf
14580 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c 65  orm(host) .eagle
14590 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ]]....
145a0 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
145b0 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69   $hostSettingsFi 145c0 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 145d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 145e0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
145f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14600 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 14610 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14630 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 "---- loading pe 14640 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 r-host test sett 14650 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 14660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14670 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73$hostSettings
14680 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e  FileName \"...\n
14690 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
146a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
146b0 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65  if {[catch {uple
146c0 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72  vel 1 [list sour
146d0 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73  ce $hostSettings 146e0 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 FileName]} \.. 146f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14700 20 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b error]} then { 14710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14720 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
14730 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
14740 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 14750 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 14760 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14770 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 14780 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 14790 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65 load per-host se 147a0 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 147b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 147c0 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74$hostSett
147d0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22  ingsFileName "\"
147e0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
147f0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 14800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 14810 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 14820 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 14830 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 14840 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
14850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
14860 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 14870 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 14890 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 ---- skipped loa 148a0 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 ding per-host te 148b0 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 st settings file 148c0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 148d0 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53$hostS
148e0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
148f0 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
14900 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
14910 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
14920 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
14930 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
14940 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
14950 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c  unSQLiteTestProl
14960 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ogue {} {..
14970 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
14980 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f  : Skip running o
14990 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67  ur custom prolog
149a0 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f  ue if the main o
149b0 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ne has been..
149c0 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70     #       skipp
149d0 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
149e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
149f0 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f  xists ::no(prolo
14a00 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65  gue.eagle)]} the
14a10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
14a20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
14a30 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 65  Load the "before
14a40 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75  -constraints" cu
14a50 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e  stom per-user an
14a60 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20  d/or per-host..
14a70 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
14a80 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77  est settings now
14a90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
14aa0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
14ab0 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65  [list loadSQLite
14ac0 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a  TestSettings $:: 14ad0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 test_channel .be 14ae0 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 fore].... 14af0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 14b00 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 TE: Determine th 14b10 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e e names of the n 14b20 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 ative platform a 14b30 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e nd architecture. 14b40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14b50 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 14b60 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 m [getBuildPlatf 14b70 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 orm true].. 14b80 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 set architect 14b90 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 ure [architectur 14ba0 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c eForPlatform$pl
14bb0 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
14bc0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
14bd0 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70  NOTE: Show the p
14be0 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68  latform and arch
14bf0 69 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f  itecture used to
14c00 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65   help locate the
14c10 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
14c20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66    native build f
14c30 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  iles...        #
14c40 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
14c50 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 14c60 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 14c70 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 14c80 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f platform for lo 14c90 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 cating native bu 14ca0 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 ild files is \"" 14cb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14cc0 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d$platform \"\n].
14cd0 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
14ce0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 14cf0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 14d00 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 14d10 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 - architecture f 14d20 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 or locating nati 14d30 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 ve build files i 14d40 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 s \"" \.. 14d50 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75$architectu
14d60 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  re \"\n]....
14d70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
14d80 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c   NOTE: Build a l
14d90 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61  ist of configura
14da0 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20  tion files that
14db0 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
14dc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
14dd0 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  et configFileNam
14de0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
14df0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
14e00 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63  ata.SQLite.dll.c
14e10 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20  onfig]....
14e20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
14e30 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73  OTE: Build a lis
14e40 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d  t of auxiliary M
14e50 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67  anaged Debugging
14e60 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41   Assistants (MDA
14e70 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  )..        #
14e80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14e90 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
14ea0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  andle...
14eb0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  #..        set m
14ec0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  daConfigFileName
14ed0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
14ee0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
14ef0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20  .exe.mda.config
14f00 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e  test.exe.mda.con
14f10 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  fig \..
14f20 20 20 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e     testlinq.exe.
14f30 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 65  mda.config teste
14f40 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  f6.exe.mda.confi
14f50 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  g]....        #.
14f60 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
14f70 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20   Build the list
14f80 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62  of native assemb
14f90 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  ly files that we
14fa0 20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d 0a 20   handle.  The..
14fb0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
14fc0 65 61 73 6f 6e 20 74 68 65 20 22 53 79 73 74 65  eason the "Syste
14fd0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
14fe0 6c 22 20 66 69 6c 65 20 69 73 20 69 6e 63 6c 75  l" file is inclu
14ff0 64 65 64 20 68 65 72 65 20 69 73 0d 0a 20 20 20  ded here is..
15000 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 63       #       bec
15010 61 75 73 65 20 69 74 20 63 6f 75 6c 64 20 62 65  ause it could be
15020 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20   the mixed-mode
15030 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20  assembly...
15040 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
15050 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65  t nativeFileName
15060 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
15070 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e 64         sqlite3.d
15080 6c 6c 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  ll SQLite.Intero
15090 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74  p.dll System.Dat
150a0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d  a.SQLite.dll]...
150b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
150c0 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
150d0 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61  d the list of ma
150e0 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66  naged assembly f
150f0 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
15100 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
15110 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e  .        set man
15120 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c  agedFileNames [l
15130 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
15140 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
15150 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d  QLite.dll System
15160 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
15170 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20  q.dll \..
15180 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
15190 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d  .SQLite.EF6.dll]
151a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
151b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
151c0 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20 63  emove any test c
151d0 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 20  onstraints that
151e0 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61 74  refer to the nat
151f0 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20  ive and/or..
15200 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61      #       mana
15210 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  ged assembly fil
15220 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
15230 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64 64  e unless forbidd
15240 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20  en from..
15250 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20 73   #       doing s
15260 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  o...        #..
15270 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
15280 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71  o exists ::no(sq
15290 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72  liteRemoveConstr
152a0 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  aints)]} then {.
152b0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
152c0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e  ch fileName $con 152d0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 152e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f remo 152f0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 15300 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 pendArgs file_$
15310 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
15320 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
15330 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
15340 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46  Name $mdaConfigF 15350 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 15360 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f removeCo 15370 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 15380 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 Args file_$file
15390 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  Name]..
153a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
153b0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
153c0 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65   $nativeFileName 153d0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 153e0 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 153f0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 15400 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
15410 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
15420 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
15430 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67   fileName $manag 15440 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 15450 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 15460 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 15470 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 endArgs file_$f
15480 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
15490 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
154a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
154b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
154c0 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44  kip all System.D
154d0 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
154e0 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67  ed file handling
154f0 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20   (deleting,..
15500 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70       #       cop
15510 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e  ying, and loadin
15520 67 29 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  g) if instructed
15530 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15540 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
15550 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
15560 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
15570 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
15580 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
15590 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
155a0 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c  o delete any fil
155b0 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  es if instructed
155c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
155d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
155e0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
155f0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 46 69 6c  (deleteSqliteFil
15600 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
15610 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
15620 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
15630 28 64 65 6c 65 74 65 53 71 6c 69 74 65 43 6f 6e  (deleteSqliteCon
15640 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  figFiles)]} then
15650 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15660 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
15670 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61  me $configFileNa 15680 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 15690 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 156a0 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 BinaryFile$file
156b0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
156c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
156d0 20 20 20 7d 0d 0a 0d 0a 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 64 65 6c 65 74  xists ::no(delet
15700 65 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c  eSqliteNativeFil
15710 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
15720 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
15730 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
15740 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49  no(deleteSqliteI
15750 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20  mplicitFiles)]}
15760 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
15770 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
15780 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65  fileName $native 15790 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 157b0 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 157c0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
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 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15800 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
15810 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
15820 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
15830 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15850 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
15860 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
15870 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29  tePlatformFiles)
15880 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
15890 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
158a0 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 158b0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 158c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 158d0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 158e0 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c eName$nativeFil
158f0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15910 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
15920 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
15930 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
15940 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
15960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15970 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
15980 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
15990 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69  teArchitectureFi
159a0 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
159c0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $159d0 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 architecture] > 159e0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 15a00 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e each fileName$n
15a10 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b  ativeFileNames {
15a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15a30 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41        tryDeleteA
15a40 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 15a50 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d e$architecture.
15a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
15a70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
15a80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
15a90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
15ab0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
15ac0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
15ad0 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e 61 67 65  leteSqliteManage
15ae0 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  dFiles)]} then {
15af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15b00 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
15b10 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d   $managedFileNam 15b20 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 15b30 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 tryDeleteA 15b40 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
15b50 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
15b60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
15b70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
15b80 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
15b90 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
15ba0 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 22   Check for the "
15bb0 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75 6e 74  autoSelect" runt
15bc0 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20  ime option.  If
15bd0 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20  present,..
15be0 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74 65      #       atte
15bf0 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  mpt to automatic
15c00 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20  ally select the
15c10 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65 0d  first available.
15c20 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
15c30 20 20 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65     build (or "re
15c40 6c 65 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74  lease") of SQLit
15c50 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74  e and System.Dat
15c60 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20  a.SQLite..
15c70 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20      #       for
15c80 75 73 65 20 77 69 74 68 20 74 68 65 20 74 65 73  use with the tes
15c90 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...
15ca0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
15cb0 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65   if {[hasRuntime
15cc0 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63  Option autoSelec
15cd0 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  t]} then {..
15ce0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68          if {![ch
15cf0 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c  eckForSQLiteBuil
15d00 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ds $::test_chann 15d10 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b el true]} then { 15d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15d30 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 checkForSQLiteRe 15d40 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 leases$::test_c
15d50 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20  hannel true..
15d60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
15d70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
15d80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15d90 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74    # NOTE: Skip t
15da0 72 79 69 6e 67 20 74 6f 20 76 65 72 69 66 79 20  rying to verify
15db0 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
15dc0 6f 72 79 20 69 66 20 69 6e 73 74 72 75 63 74 65  ory if instructe
15dd0 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  d;..          #
15de0 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c        otherwise,
15df0 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61 63   make sure it ac
15e00 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20 6f 72  tually exists or
15e10 20 68 61 6c 74 20 74 68 65 20 65 6e 74 69 72 65   halt the entire
15e20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
15e30 20 20 20 20 74 65 73 74 69 6e 67 20 70 72 6f 63      testing proc
15e40 65 73 73 20 69 66 20 69 74 20 64 6f 65 73 20 6e  ess if it does n
15e50 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20  ot exist...
15e60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15e70 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
15e80 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42  sts ::no(verifyB
15e90 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29 5d 7d  uildDirectory)]}
15ea0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15eb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15ec0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 20 74      # NOTE: At t
15ed0 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 20 62  his point, the b
15ee0 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 4d  uild directory M
15ef0 55 53 54 20 65 78 69 73 74 20 61 73 20 61 0d 0a  UST exist as a..
15f00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
15f10 20 20 20 20 76 61 6c 69 64 20 64 69 72 65 63 74      valid direct
15f20 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65 73 74  ory for the test
15f30 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f 20 63  ing process to c
15f40 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20  ontinue...
15f50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15f60 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f       set directo
15f70 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65  ry [getBuildDire
15f80 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20  ctory]....
15f90 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
15fa0 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f   exists $directo 15fb0 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 ry] || \.. 15fc0 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 ![file 15fd0 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 isdirectory$di
15fe0 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
15ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16000 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
16010 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72   # NOTE: Just pr
16020 69 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20  ior to actually
16030 68 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74  halting the test
16040 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20  ing process,..
16050 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
16060 20 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72      add an error
16070 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67   to the test log
16080 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
16090 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
160a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 160b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 160c0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 160e0 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 --- could not ve 160f0 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 rify build direc 16100 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 tory \""$direct
16110 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
16120 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c           "\", al
16130 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
16140 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  \n"]....
16150 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16160 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
16170 61 69 73 69 6e 67 20 61 20 73 63 72 69 70 74 20  aising a script
16180 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20  error from this
16190 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c  point should hal
161a0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..
161b0 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73   #       the tes
161c0 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20  ting process...
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
161f0 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ror [appendArgs
16200 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16210 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not
16220 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72  verify build dir
16230 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65  ectory \"" $dire 16240 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 ctory \.. 16250 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 16260 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 all testing halt 16270 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ed"].. 16280 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 16290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 162a0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 162b0 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 162c0 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 o copy any files 162d0 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d if instructed.. 162e0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 162f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 16300 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 16310 6f 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d opySqliteFiles)] 16320 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16330 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 16340 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 16350 79 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c ySqliteConfigFil 16360 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 16370 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 16380 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f ach fileName$co
16390 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  nfigFileNames {.
163a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
163b0 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c   tryCopyBuildFil
163c0 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  e $fileName.. 163d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 163e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 163f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 16400 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 16410 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 o(copySqliteNati 16420 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 veFiles)]} then 16430 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 16440 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 16450 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 16460 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 teImplicitFiles) 16470 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 16480 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 16490 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 ch fileName$nat
164a0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
164c0 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
164d0 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  y $fileName.. 164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 16500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 16510 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 16520 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 16530 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c teNonImplicitFil 16540 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 16560 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 16570 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 ::no(copySqliteP 16580 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 latformFiles)] & 16590 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 165a0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 165b0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
165c0 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  m] > 0} then {..
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
165e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
165f0 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  me $nativeFileNa 16600 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 16610 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 16620 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
16630 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  Name $platform.. 16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16650 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 16660 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16670 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 16680 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 16690 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69 (copySqliteArchi 166a0 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 166b0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 166c0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 166d0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
166e0 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
166f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16700 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
16710 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69  leName $nativeFi 16720 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 16740 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 ryCopyAssembly$
16750 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74  fileName $archit 16760 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 ecture.. 16770 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 16780 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 167a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 167b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 167c0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 167d0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d ::no(copySqliteM 167e0 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 anagedFiles)]} t 167f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 16800 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 16810 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 eName$managedFi
16820 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
16830 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
16840 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  pyAssembly $file 16850 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 16860 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 16870 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 16880 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 }.... # 16890 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 168a0 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 TE: Skip trying 168b0 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 to load any file 168c0 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e s if instructed. 168d0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 168e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 168f0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 16900 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 loadSqliteFiles) 16910 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 16920 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 16930 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 16940 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 adSqliteImplicit 16950 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 16960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 16970 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 ryLoadAssembly S 16980 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 16990 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 e.dll.. 169a0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 169b0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 169c0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 169d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 169e0 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 169f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 16a00 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 te.EF6.dll.. 16a10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 16a20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 16a30 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 16a40 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 loadSqliteNonImp 16a50 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 16a60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16a70 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 16a80 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 16a90 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c qlitePlatformFil 16aa0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 16ac0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
16ad0 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
16ae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16af0 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
16b00 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
16b10 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74  SQLite.dll $plat 16b20 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 form.. 16b30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 16b40 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 16b50 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 16b60 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 adSqliteArchitec 16b70 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 16b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16b90 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 16ba0 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
16bb0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16bd0 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
16be0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
16bf0 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74  e.dll $architect 16c00 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 16c10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 16c20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 16c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 16c40 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 16c50 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 16c60 6f 20 64 65 6c 65 74 65 20 65 78 74 65 72 6e 61 o delete externa 16c70 6c 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 l files if instr 16c80 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 16c90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 16ca0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 16cb0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 16cc0 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 teExternalFiles) 16cd0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 16ce0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 16cf0 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 ileName$mdaConf
16d00 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
16d20 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20  DeleteBuildFile
16d30 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 16d40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 16d50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 16d60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 16d70 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 16d80 69 6e 67 20 74 6f 20 63 6f 70 79 20 65 78 74 65 ing to copy exte 16d90 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 69 6e rnal files if in 16da0 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 16db0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 16dc0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 16dd0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 16de0 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 iteExternalFiles 16df0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 16e00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16e10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 16e20 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 opy the Managed 16e30 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 16e40 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 ants (MDA) confi 16e50 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 16e60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 # fi 16e70 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c 65 le for the Eagle 16e80 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 shell to the bu 16e90 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 ild output direc 16ea0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 tory,.. 16eb0 20 20 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 # while 16ec0 20 75 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 using each of t 16ed0 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 he names of the 16ee0 76 61 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 various legacy t 16ef0 65 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 est.. 16f00 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 # executa 16f10 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c bles. This will 16f20 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 help to make su 16f30 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d re that all the. 16f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # 16f50 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 legacy test 16f60 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 s run with exact 16f70 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 ly the same set 16f80 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 of Managed.. 16f90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 16fa0 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 16fb0 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e ants configured. 16fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 16fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 . for 16fe0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
16ff0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  daConfigFileName
17000 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
17010 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79     tryCopyBinary
17020 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e  File EagleShell.
17030 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 22  exe.mda.config "
17040 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  " $fileName.. 17050 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 17060 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 17070 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 17080 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 17090 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
170a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
170b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
170c0 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
170d0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69  ersion of \"sqli
170e0 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c  te3.dll\"... " \
170f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17100 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
17110 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
17120 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c   sqlite3.dll]] \
17130 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  n]..        }...
17140 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
17150 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
17160 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 17170 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 17180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 17190 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 171a0 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e n of \"SQLite.In 171b0 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 terop.dll\"... " 171c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 171d0 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 [file version 171e0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 171f0 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f me SQLite.Intero 17200 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 p.dll]] \n].. 17210 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 17220 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 17230 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
17240 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17250 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
17260 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
17270 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
17280 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
17290 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  te.dll\"... " \.
172a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
172b0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
172c0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
172d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
172e0 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20  te.dll]] \n]..
172f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
17300 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
17310 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 17320 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 17330 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 17340 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 17350 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 17360 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 17370 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e ite.Linq.dll\".. 17380 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 . " \.. 17390 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 [file versi 173a0 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 173b0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 173c0 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c a.SQLite.Linq.dl 173d0 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 l]] \n].. 173e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 173f0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 17400 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
17410 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
17420 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
17430 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
17440 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74  ersion of \"Syst
17450 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
17460 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  F6.dll\"... " \.
17470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
17480 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
17490 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
174a0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
174b0 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c 6e 5d  te.EF6.dll]] \n]
174c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
174d0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
174e0 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66  ng length $platf 174f0 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b orm] > 0} then { 17500 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 17510 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 17520 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
17530 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
17540 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
17550 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
17560 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
17570 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20  $platform \.. 17580 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 73 "/s 17590 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 qlite3.dll\"... 175a0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 " [file version 175b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 175c0 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c [getBinaryFil 175d0 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c eName sqlite3.dl 175e0 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e l$platform]] \n
175f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
17600 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63  ..          catc
17610 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
17620 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 17630 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 17640 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 17650 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 17660 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 version of \"" 17670 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20$platform \..
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53               "/S
17690 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c  QLite.Interop.dl
176a0 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76  l\"... " [file v
176b0 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
176c0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
176d0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c  naryFileName SQL
176e0 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20  ite.Interop.dll
176f0 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d  $platform]] \n]. 17700 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 17710 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 17720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 17730 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
17740 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
17750 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17760 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
17770 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70  ersion of \"" $p 17780 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 latform \.. 17790 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79 73 "/Sys 177a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 177b0 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 dll\"... " [file 177c0 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 version \.. 177d0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 177e0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 BinaryFileName S 177f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 17800 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d e.dll$platform]
17810 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
17820 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
17830 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
17840 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 17850 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 17860 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17870 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 17880 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
17890 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
178a0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
178b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
178c0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
178d0 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74  f \"" $architect 178e0 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ure \.. 178f0 20 20 20 20 20 20 20 22 2f 73 71 6c 69 74 65 33 "/sqlite3 17900 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c .dll\"... " [fil 17910 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 e version \.. 17920 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 17930 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 17940 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 61 72 63 sqlite3.dll$arc
17950 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d  hitecture]] \n].
17960 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
17970 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch
17980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
17990 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 179a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 179b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 179c0 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 179d0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 ersion of \""$a
179e0 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20  rchitecture \..
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17a00 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e  /SQLite.Interop.
17a10 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65  dll\"... " [file
17a20 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20   version \..
17a30 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
17a40 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53  BinaryFileName S
17a50 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c  QLite.Interop.dl
17a60 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d  l $architecture] 17a70 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 17a80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 17a90 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 17aa0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
17ab0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17ac0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
17ad0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
17ae0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
17af0 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72  \"" $architectur 17b00 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 17b10 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 "/System.Da 17b20 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 17b30 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 .. " [file versi 17b40 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 17b50 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 [getBinary 17b60 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e FileName System. 17b70 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 Data.SQLite.dll 17b80 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20$architecture]]
17b90 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
17ba0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
17bb0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17bc0 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74    # NOTE: Grab t
17bd0 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67  he list of manag
17be0 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f  ed assemblies fo
17bf0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
17c00 6f 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23  ocess..        #
17c10 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72         and repor
17c20 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e  t on the System.
17c30 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61  Data.SQLite rela
17c40 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20  ted ones...
17c50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
17c60 74 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62  t assemblies [ob
17c70 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44  ject invoke AppD
17c80 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d  omain.CurrentDom
17c90 61 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65  ain GetAssemblie
17ca0 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62  s]....        ob
17cb0 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73  ject foreach ass
17cc0 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65  embly $assemblie 17cd0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 s {.. i 17ce0 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 f {[string match 17cf0 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \{System.Data.S 17d00 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 QLite*$assembly
17d10 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
17d20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 17d30 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 17d40 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 17d50 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 17d60 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 61 - found loaded a 17d70 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 ssembly: "$asse
17d80 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mbly \n]..
17d90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
17da0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
17db0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
17dc0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 17dd0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 17de0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 "---- defi 17df0 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 ne constants for 17e00 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \"System.Data.S 17e10 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a QLite\"... ".... 17e20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 17e30 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 atch {object inv 17e40 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 17e50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 17e60 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 17e70 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 17e80 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 Lite3 DefineCons 17e90 74 61 6e 74 73 7d 20 5c 0d 0a 20 20 20 20 20 20 tants} \.. 17ea0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 defi 17eb0 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 neConstants] == 17ec0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 17ed0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
17ee0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
17ef0 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74  pendArgs [format
17f00 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20  List [lsort \..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $17f20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d defineConstants] 17f30 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 <none>] \n].. 17f40 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 17f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 17f60 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
17f70 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20  nel unknown\n..
17f80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
17f90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
17fa0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
17fb0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 17fc0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 17fd0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 17fe0 20 73 6f 75 72 63 65 20 76 65 72 73 69 6f 6e 20 source version 17ff0 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 of \"System.Data 18000 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e .SQLite.dll\"... 18010 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ".... 18020 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje 18030 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 18040 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18060 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 18070 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ite.SQLiteConnec 18080 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 56 65 72 tion ProviderVer 18090 73 69 6f 6e 7d 20 5c 0d 0a 20 20 20 20 20 20 20 sion} \.. 180a0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 versi 180b0 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { 180c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 180d0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 180e0 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d$version] == 0}
180f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18100 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69         set versi
18110 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  on null..
18120 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
18130 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 18140 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 18150 64 41 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c dArgs$version \
18160 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
18170 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
18180 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 18190 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 t_channel unknow 181a0 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n\n.. } 181b0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 181c0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 181d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 181e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
181f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18200 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68   "---- source ch
18210 65 63 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74  eckout of \"Syst
18220 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
18230 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  ll\"... "....
18240 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
18250 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
18260 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
18270 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
18280 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
18290 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
182a0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76  eConnection Prov
182b0 69 64 65 72 53 6f 75 72 63 65 49 64 7d 20 5c 0d  iderSourceId} \.
182c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
182d0 20 20 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20     sourceId] ==
182e0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
182f0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
18300 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63  ng length $sourc 18310 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then 18320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18330 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu 18340 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 18350 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 18360 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
18370 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
18380 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a   $sourceId \n].. 18390 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 183a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 183b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
183c0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
183d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
183e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
183f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18400 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20  NOTE: Check the
18410 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73  available builds
18420 20 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22   (and "releases"
18430 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d  ) of SQLite and.
18440 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
18450 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
18460 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
18470 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
18480 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a  rSQLiteBuilds $: 18490 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 :test_channel.. 184a0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 184b0 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a QLiteReleases$:
184c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
184d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
184e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c      # NOTE: Now,
184f0 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77   we need to know
18500 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
18510 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61  ore library is a
18520 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..
18530 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20    #       (i.e.
18540 62 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61  because the mana
18550 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e  ged-only System.
18560 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65  Data.SQLite asse
18570 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20  mbly can..
18580 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77    #       load w
18590 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76  ithout it; howev
185a0 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f  er, it cannot do
185b0 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c   anything useful
185c0 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20   without..
185d0 20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20    #       it).
185e0 49 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20  If we are using
185f0 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
18600 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61  ssembly and we a
18610 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20  lready..
18620 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74  #       found it
18630 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73   (above), this s
18640 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63  hould always suc
18650 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  ceed...        #
18660 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
18670 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20  orSQLiteLibrary
18680 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 18690 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 186a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 186b0 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 eck if the SQLit 186c0 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 186d0 6c 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e ly is available. 186e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 186f0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 18700 69 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 iteInterop$::te
18710 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
18720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18730 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
18740 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  he SQLite databa
18750 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
18760 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20   directories...
18770 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18780 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
18790 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74  Directories $::t 187a0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 187b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 187c0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 187d0 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 t to determine i 187e0 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c f various compil 187f0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e e-time options n 18800 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 eeded for.. 18810 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 18820 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 constraints were 18830 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 enabled for the 18840 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 18850 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 y. There.. 18860 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 # are s 18870 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 ome compile-time 18880 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 options that mu 18890 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 st also have bee 188a0 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 n enabled.. 188b0 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 # for t 188c0 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d he interop assem 188d0 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 bly in order to 188e0 62 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 be effective. F 188f0 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 or those.. 18900 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e # option 18910 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 s, it will be as 18920 73 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 sumed that it wa 18930 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 s enabled for th 18940 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 e interop.. 18950 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d # assem 18960 62 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e bly if it was en 18970 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 abled for the ma 18980 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d naged assembly.. 18990 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 189a0 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 foreach defi 189b0 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 neConstant [list 189c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 189d0 43 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e CHECK_STATE COUN 189e0 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 T_HANDLE DEBUG I 189f0 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 NTEROP_CODEC INT 18a00 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 EROP_DEBUG \.. 18a10 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 18a20 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 P_EXTENSION_FUNC 18a30 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 4c 45 TIONS INTEROP_LE 18a40 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 GACY_CLOSE INTER 18a50 4f 50 5f 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 OP_LOG \.. 18a60 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 INTEROP_TE 18a70 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 ST_EXTENSION INT 18a80 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 18a90 4c 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 LE NET_20 NET_35 18aa0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18ab0 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 NET_40 NET_45 NE 18ac0 54 5f 34 35 31 20 4e 45 54 5f 43 4f 4d 50 41 43 T_451 NET_COMPAC 18ad0 54 5f 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f T_20 PLATFORM_CO 18ae0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c MPACTFRAMEWORK \ 18af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 52 .. PR 18b00 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 ELOAD_NATIVE_LIB 18b10 52 41 52 59 20 52 45 54 41 52 47 45 54 41 42 4c RARY RETARGETABL 18b20 45 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 E SQLITE_STANDAR 18b30 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 D \.. 18b40 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 THROW_ON_DISPOS 18b50 45 44 20 54 52 41 43 45 20 54 52 41 43 45 5f 43 ED TRACE TRACE_C 18b60 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f ONNECTION TRACE_ 18b70 48 41 4e 44 4c 45 20 5c 0d 0a 20 20 20 20 20 20 HANDLE \.. 18b80 20 20 20 20 20 20 54 52 41 43 45 5f 50 52 45 4c TRACE_PREL 18b90 4f 41 44 20 54 52 41 43 45 5f 53 48 41 52 45 44 OAD TRACE_SHARED 18ba0 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 TRACE_STATEMENT 18bb0 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 5c TRACE_WARNING \ 18bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 .. TR 18bd0 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 ACK_MEMORY_BYTES 18be0 20 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d USE_ENTITY_FRAM 18bf0 45 57 4f 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 EWORK_6 USE_INTE 18c00 52 4f 50 5f 44 4c 4c 20 5c 0d 0a 20 20 20 20 20 ROP_DLL \.. 18c10 20 20 20 20 20 20 20 55 53 45 5f 50 52 45 50 41 USE_PREPA 18c20 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b RE_V2 WINDOWS] { 18c30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 18c40 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 18c50 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f Check if the co 18c60 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 18c70 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 n is listed in t 18c80 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 he list of.. 18c90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64 # "d 18ca0 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 efine constants" 18cb0 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 kept track of b 18cc0 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 y the managed as 18cd0 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 18ce0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18cf0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 checkForSQLiteDe 18d00 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a fineConstant$::
18d10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65  test_channel $de 18d20 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 fineConstant.. 18d30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 18d40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 18d50 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 18d60 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 current build ye 18d70 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 ar. Basically, 18d80 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a this indicates.. 18d90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 18da0 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 which version of 18db0 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 MSBuild and/or 18dc0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 Visual Studio wa 18dd0 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 s used to.. 18de0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 # compi 18df0 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 le the assembly 18e00 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 binaries under t 18e10 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d est... #. 18e20 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
18e30 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
18e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
18e50 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
18e60 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
18e70 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e  ite build year..
18e80 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  . "....        s
18e90 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c  et year [getBuil
18ea0 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20  dYear]..
18eb0 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  addConstraint [a
18ec0 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59  ppendArgs buildY
18ed0 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20  ear. $year].. 18ee0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
18ef0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
18f00 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20  ndArgs \" $year 18f10 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 \"\n].... 18f20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 18f30 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 TE: Check the cu 18f40 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 rrent build conf 18f50 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 iguration. This 18f60 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 should normally 18f70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 18f80 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65 62 be either "Deb 18f90 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 ug" or "Release" 18fa0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 18fb0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
18fc0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
18fd0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
18fe0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
18ff0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
19000 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61   build configura
19010 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  tion... "....
19020 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75       set configu
19030 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64  ration [getBuild
19040 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a  Configuration]..
19050 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
19060 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
19070 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61  s buildConfigura
19080 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61  tion. $configura 19090 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 tion].. t 190a0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
190b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
190c0 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69   \" $configurati 190d0 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 on \"\n].... 190e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 190f0 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65 NOTE: Try to se 19100 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74 tup an interrupt 19110 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 callback using 19120 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 the script debug 19130 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ger.. # 19140 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63 that will c 19150 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 ancel all SQL qu 19160 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 eries in progres 19170 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 s for all databa 19180 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 se.. # 19190 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 connections 191a0 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e known to this in 191b0 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 terpreter... 191c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 191d0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 191e0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 ::no(sqliteInte 191f0 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d rruptCallback)]} 19200 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 19210 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 setupDbInterr 19220 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 uptCallback$::t
19230 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74  est_channel $::t 19240 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 est_log.. 19250 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 19260 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 19270 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e Check for the n 19280 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 ative runtime op 19290 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c tion, which woul 192a0 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 d mean we are.. 192b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 192c0 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d sing the mixed-m 192d0 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 ode assembly... 192e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 192f0 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d checkForRuntim 19300 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f eOption$::test_
19310 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a  channel native..
19320 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
19330 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
19340 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73  ck if the test s
19350 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e  uite should coun
19360 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of
19370 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20  connections..
19380 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70       #       "op
19390 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65  ened" and "close
193a0 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c  d" from the pool
193b0 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e   when determinin
193c0 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20  g if a test..
193d0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73       #       pas
193e0 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20  sed.  Disabling
193f0 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73  this behavior is
19400 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73   sometimes neces
19410 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20  sary (e.g...
19420 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69      #       duri
19430 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74  ng the release t
19440 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20  esting process)
19450 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
19460 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20  e several..
19470 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73     #       tests
19480 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68   that rely on th
19490 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70  e "opened from p
194a0 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67  ool" count being
194b0 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20   greater..
194c0 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a    #       than z
194d0 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74  ero.  These test
194e0 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74  s may fail due t
194f0 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d  o the non-determ
19500 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20  inistic..
19510 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f   #       behavio
19520 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c  r of the CLR GC,
19530 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65   even when there
19540 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68   is no bug in th
19550 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20  e code..
19560 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65  #       being te
19570 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  sted...        #
19580 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
19590 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  orRuntimeOption
195a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 195b0 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a noPoolCounts.... 195c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 195d0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 # NOTE: Repor 195e0 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 t the resource u 195f0 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75 sage prior to ru 19600 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e nning any tests. 19610 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 19620 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 reportSQLit 19630 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 eResources$::te
19640 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
19650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19660 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
19670 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65  e list of native
19680 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20 74 68 65   modules for the
19690 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
196a0 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20   and..        #
196b0 20 20 20 20 20 20 72 65 70 6f 72 74 20 6f 6e 20        report on
196c0 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
196d0 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f  SQLite related o
196e0 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  nes...        #.
196f0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64  .        set mod
19700 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76  ules [object inv
19710 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oke \..
19720 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f     System.Diagno
19730 73 74 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65  stics.Process.Ge
19740 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20  tCurrentProcess
19750 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20  Modules]....
19760 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
19770 63 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65  ch -alias module
19780 20 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20   $modules {.. 19790 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 197a0 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c ame [file normal 197b0 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c ize [$module Fil
197c0 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eName]]....
197d0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
197e0 20 6d 61 74 63 68 20 2d 6e 6f 63 61 73 65 20 2a   match -nocase *
197f0 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 66 69  /sqlite3.dll $fi 19800 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 19810 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 19820 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
19830 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
19840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19850 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
19860 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69  aded SQLite nati
19870 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c  ve library modul
19880 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  e: " \..
19890 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d          $fileNam 198a0 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 e \n].. 198b0 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 } elseif {[stri 198c0 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 ng match \.. 198d0 20 20 20 20 20 20 20 20 20 20 2d 6e 6f 63 61 73 -nocas 198e0 65 20 2a 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 e */SQLite.Inter 198f0 6f 70 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 op.dll$fileName
19900 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
19910 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 19920 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 19930 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 19940 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 19950 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 - found loaded S 19960 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 19970 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 sembly module: " 19980 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19990 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e$fileName \n
199a0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
199b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
199c0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
199d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 199e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 199f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 19a00 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d ---- compile-tim 19a10 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 e options for SQ 19a20 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 19a30 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 19a40 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 19a50 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 19a60 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 19a70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19a80 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 19a90 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 19aa0 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 SQLiteCompileOpt 19ab0 69 6f 6e 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 ions} \.. 19ac0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 compi 19ad0 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d leOptions] == 0} 19ae0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 19af0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
19b00 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
19b10 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69  ndArgs [formatLi
19b20 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20  st [lsort \..
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f               $co 19b40 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e mpileOptions] <n 19b50 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 one>] \n].. 19b60 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 19b70 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 19b80 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
19b90 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20   unknown\n..
19ba0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
19bb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
19bc0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
19bd0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 19be0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 19bf0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 19c00 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 19c10 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e ns for SQLite in 19c20 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e terop assembly.. 19c30 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 19c40 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj 19c50 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 19c60 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19c80 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 19c90 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 Lite.SQLite3 Int 19ca0 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f eropCompileOptio 19cb0 6e 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ns} \.. 19cc0 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 compile 19cd0 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 Options] == 0} t 19ce0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19cf0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
19d00 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
19d10 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74  Args [formatList
19d20 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20   [lsort \..
19d30 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70             $comp 19d40 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e ileOptions] <non 19d50 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e>] \n].. 19d60 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 19d70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
19d80 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75  ::test_channel u
19d90 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20  nknown\n..
19da0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
19db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
19dc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
19dd0 68 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 74  how the active t
19de0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  est constraints.
19df0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
19e00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 19e10 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 19e20 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e ndArgs "---- con 19e30 73 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 straints: " \.. 19e40 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d [form 19e50 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 atList [lsort [g 19e60 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 etConstraints]] 19e70 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 <none>] \n].... 19e80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 19e90 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 # NOTE: Save t 19ea0 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 he test constrai 19eb0 6e 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 nts for use by t 19ec0 68 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69 hreads created i 19ed0 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 n this.. 19ee0 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 # applicat 19ef0 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 ion domain. Thi 19f00 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 s is necessary b 19f10 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 ecause all the E 19f20 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 agle.. # 19f30 20 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 "test cont 19f40 65 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e ext" information 19f50 20 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d is per-thread.. 19f60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 19f70 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 19f80 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e xists ::test_con 19f90 73 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 straints]} then 19fa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 19fb0 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 ::test_constrai 19fc0 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 nts$::eagle_tes
19fd0 74 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d  ts(constraints).
19fe0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
19ff0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a000 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68   # NOTE: Load th
1a010 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61  e "after-constra
1a020 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72  ints" custom per
1a030 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
1a040 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23  -host..        #
1a050 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74         test sett
1a060 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
1a070 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
1a080 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
1a090 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
1a0a0 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 1a0b0 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a nnel .after].... 1a0c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a0d0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 1a0e0 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 when our tests a 1a0f0 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e ctually began (n 1a100 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ow)... #. 1a110 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1a120 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1a130 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1a140 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1a150 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1a160 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61  te tests began a
1a170 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
1a180 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     [clock format
1a190 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
1a1a0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ] \n]..      }..
1a1b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1a1c0 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74  oc runSQLiteTest
1a1d0 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20  Epilogue {} {..
1a1e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1a1f0 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69  NOTE: Skip runni
1a200 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70  ng our custom ep
1a210 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61  ilogue if the ma
1a220 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d  in one has been.
1a230 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
1a240 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23  kipped...      #
1a250 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
1a260 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
1a270 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d  pilogue.eagle)]}
1a280 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1a290 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1a2a0 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75  TE: Show when ou
1a2b0 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79  r tests actually
1a2c0 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20   ended (now)...
1a2d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a2e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1a2f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1a300 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1a310 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e "---- System. 1a320 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 Data.SQLite test 1a330 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a s ended at " \.. 1a340 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f [clo 1a350 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b ck format [clock 1a360 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a seconds]] \n].. 1a370 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a380 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 # BUGFIX: B 1a390 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 efore checking t 1a3a0 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 he final resourc 1a3b0 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c es in use by SQL 1a3c0 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 ite, make.. 1a3d0 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75 72 # sur 1a3e0 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 e both of the PR 1a3f0 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 AGMA related dir 1a400 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 ectory names are 1a410 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 freed... 1a420 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 #.. chec 1a430 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect 1a440 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 ories$::test_ch
1a450 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20  annel true....
1a460 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a470 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65   # NOTE: Also re
1a480 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63  port the resourc
1a490 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72 75  e usage after ru
1a4a0 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e  nning the tests.
1a4b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1a4c0 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74       reportSQLit
1a4d0 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65  eResources $::te 1a4e0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 1a4f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1a500 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 # NOTE: Report 1a510 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e the critical han 1a520 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 dle counts after 1a530 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 running the tes 1a540 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 1a550 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 getSQLit 1a560 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a eHandleCounts$:
1a570 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20  :test_channel..
1a580 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1a590 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
1a5a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a5b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a5e0 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
1a5f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a600 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f  #### END Eagle O
1a610 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
1a620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a630 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
1a640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a680 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  ###..  }....  #.
1a690 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20  .  # NOTE: Save
1a6a0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the
1a6b0 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
1a6c0 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d  ning this file..
1a6d0 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e  .  #..  if {![in
1a6e0 66 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e  fo exists common
1a6f0 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  _directory]} the
1a700 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d  n {..    set com
1a710 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66  mon_directory [f
1a720 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66  ile dirname [inf
1a730 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d  o script]]..  }.
1a740 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
1a750 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79  : Provide the Sy
1a760 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a770 20 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f   test package to
1a780 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
1a790 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67  ...  #..  packag
1a7a0 65 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d  e provide System
1a7b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73  .Data.SQLite.Tes
1a7c0 74 20 31 2e 30 0d 0a 7d 0d 0a                    t 1.0..}..