System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 98c153d386b4a13f9346c1e3e141d2c882e45fb2:

• File Tests/common.eagle — part of check-in [b53ecbc620] at 2014-01-12 08:11:25 on branch newNs — More test suite infrastructure fixes. (user: mistachkin size: 111842) [more...]

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 4e 65 74 46  roc getBuildNetF
11d0: 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  x {} {..      #.
11e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
11f0: 65 65 20 69 66 20 74 68 65 20 74 65 73 74 20 2e  ee if the test .
1200: 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73 65  NET Framework se
1210: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f  tting has been o
1220: 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 20  verridden by..
1230: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
1240: 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68  user (e.g. on th
1250: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e  e command line).
1260: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1270: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1280: 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d  s ::test_net_fx]
1290: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
12a0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
12b0: 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d 20  $::test_net_fx] 12c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 12d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12e0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 12f0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 2e specified test . 1300: 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a NET Framework... 1310: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1320: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
1330: 74 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20 20  t_net_fx..
1340: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1350: 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42    set year [getB
1360: 75 69 6c 64 59 65 61 72 5d 0d 0a 0d 0a 20 20 20  uildYear]....
1370: 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61       switch -exa
1380: 63 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a 20  ct -- $year {.. 1390: 20 20 20 20 20 20 20 20 20 32 30 30 35 20 7b 0d 2005 {. 13a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret 13b0: 75 72 6e 20 6e 65 74 46 78 32 30 0d 0a 20 20 20 urn netFx20.. 13c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13d0: 20 20 20 20 32 30 30 38 20 7b 0d 0a 20 20 20 20 2008 {.. 13e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 13f0: 65 74 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 etFx35.. 1400: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 1410: 30 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 010 {.. 1420: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 1430: 30 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0.. }.. 1440: 20 20 20 20 20 20 20 20 20 20 32 30 31 32 20 7b 2012 { 1450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1460: 74 75 72 6e 20 6e 65 74 46 78 34 35 0d 0a 20 20 turn netFx45.. 1470: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1480: 20 20 20 20 20 32 30 31 33 20 7b 0d 0a 20 20 20 2013 {.. 1490: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 14a0: 6e 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20 netFx451.. 14b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 14c0: 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 default {.. 14d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 return " 14e0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ".. }.. 14f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1500: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1510: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 proc getBuildP 1520: 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 latform { native 1530: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b } {.. if { 1540: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1550: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 est_platform] && 1560: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 1570: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
1580: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e  test_platform] >
1590: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
15a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
15b0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
15c0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70 6c  pecified test pl
15d0: 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 73  atform.  If this
15e0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74   variable is not
15f0: 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 23   set,..        #
1600: 20 20 20 20 20 20 20 74 68 65 20 64 65 66 61 75         the defau
1610: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
1620: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d 61   based on the ma
1630: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
1640: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  re...        #..
1650: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
1660: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20  expr {$native ? 1670: 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d$::test_platform
1680: 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d   : ""}]..      }
1690: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
16a0: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63  xists ::test_mac
16b0: 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20  hine] && \..
16c0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
16d0: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63  ngth $::test_mac 16e0: 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 hine] > 0} then 16f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1700: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f # NOTE: Fo 1710: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c r native builds, 1720: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 return the plat 1730: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 form name corres 1740: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 ponding to.. 1750: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 1760: 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 63 test machine arc 1770: 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 hitecture; other 1780: 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 wise, return an 1790: 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 23 empty.. # 17a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a string... 17b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17c0: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr 17d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 {..$na
17e0: 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54  tive ? [machineT
17f0: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73  oPlatform $::tes 1800: 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d t_machine] : "". 1810: 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 . }].. 1820: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 1830: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f fo exists ::tcl_ 1840: 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 platform(machine 1850: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 1860: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1870: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 NOTE: For nativ 1880: 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e e builds, return 1890: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 18a0: 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 me corresponding 18b0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 18c0: 20 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 the machine 18d0: 20 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f architecture; o 18e0: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 18f0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 1900: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1910: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 1920: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 pr {.. 1930: 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69$native ? [machi
1940: 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a  neToPlatform $:: 1950: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 tcl_platform(mac 1960: 68 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 hine)] : "".. 1970: 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d }].. } 1980: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1990: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 19a0: 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 TE: No machine a 19b0: 72 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 rchitecture is a 19c0: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e vailable, return 19d0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 19e0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 19f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 1a00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 1a10: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 1a20: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 BuildConfigurati 1a30: 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 on {} {.. # 1a40: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1a50: 53 65 65 20 69 66 20 74 68 65 20 22 63 6f 6e 66 See if the "conf 1a60: 69 67 75 72 61 74 69 6f 6e 22 20 73 65 74 74 69 iguration" setti 1a70: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 ng has been over 1a80: 72 69 64 64 65 6e 20 62 79 20 74 68 65 0d 0a 20 ridden by the.. 1a90: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 1aa0: 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 r (e.g. on the c 1ab0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 ommand line). T 1ac0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f his helps contro 1ad0: 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 l exactly.. 1ae0: 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 73 # which s 1af0: 65 74 20 6f 66 20 62 69 6e 61 72 69 65 73 20 77 et of binaries w 1b00: 65 20 61 72 65 20 74 65 73 74 69 6e 67 20 28 69 e are testing (i 1b10: 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 6c 74 20 .e. those built 1b20: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 1b30: 20 20 20 20 20 20 22 44 65 62 75 67 22 20 6f 72 "Debug" or 1b40: 20 22 52 65 6c 65 61 73 65 22 20 62 75 69 6c 64 "Release" build 1b50: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 29 configurations) 1b60: 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65 20 74 . To override t 1b70: 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 his.. # 1b80: 20 20 20 76 61 6c 75 65 20 76 69 61 20 74 68 65 value via the 1b90: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 command line, e 1ba0: 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 nter a command s 1bb0: 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 imilar to one of 1bc0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1bd0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 the following (a 1be0: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a ll on one line): 1bf0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1c00: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 1c10: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 1c20: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 1c30: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 44 _configuration D 1c40: 65 62 75 67 22 0d 0a 20 20 20 20 20 20 23 20 20 ebug".. # 1c50: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 -file .\p 1c60: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 ath\to\all.eagle 1c70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1c80: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 1c90: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 1ca0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 1cb0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 52 _configuration R 1cc0: 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 20 20 23 elease".. # 1cd0: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e -file . 1ce0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 \path\to\all.eag 1cf0: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 le.. #.. 1d00: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 1d10: 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20 Shell.exe -file 1d20: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 1d30: 67 6c 65 20 2d 70 72 65 54 65 73 74 0d 0a 20 20 gle -preTest.. 1d40: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 75 # "u 1d50: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e nset -nocomplain 1d60: 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 test_configurat 1d70: 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ion".. #.. 1d80: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1d90: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e xists ::test_con 1da0: 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c figuration] && \ 1db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 1dc0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 ing length$::te
1dd0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
1de0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1df0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1e00: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
1e10: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
1e20: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20   configuration.
1e30: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
1e40: 75 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20  ue used..
1e50: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 69   #       for thi
1e60: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 74 79  s variable is ty
1e70: 70 69 63 61 6c 6c 79 20 22 52 65 6c 65 61 73 65  pically "Release
1e80: 22 2c 20 61 73 20 73 65 74 20 62 79 20 74 68 65  ", as set by the
1e90: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
1ea0: 20 20 20 20 20 20 20 73 75 69 74 65 20 69 74 73         suite its
1eb0: 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  elf...        #.
1ec0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
1ed0: 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72  $::test_configur 1ee0: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 ation.. } e 1ef0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 1f00: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1f10: 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77 : Normally, we w 1f20: 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 20 74 68 ill never hit th 1f30: 69 73 20 63 61 73 65 20 62 65 63 61 75 73 65 20 is case because 1f40: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 the value of the 1f50: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1f60: 20 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 test configura 1f70: 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73 tion variable is 1f80: 20 61 6c 77 61 79 73 20 73 65 74 20 62 79 20 74 always set by t 1f90: 68 65 20 74 65 73 74 20 73 75 69 74 65 0d 0a 20 he test suite.. 1fa0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 1fb0: 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20 tself; however, 1fc0: 69 74 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69 it can be overri 1fd0: 64 64 65 6e 20 75 73 69 6e 67 20 74 68 65 20 75 dden using the u 1fe0: 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 nset command.. 1ff0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 72 # fr 2000: 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 73 74 20 om the -preTest 2010: 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 65 option to the te 2020: 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 st suite... 2030: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 2040: 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c turn$::eagle_pl
2050: 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61  atform(configura
2060: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a  tion)..      }..
2070: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
2080: 6f 63 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69  oc getBuildConfi
2090: 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a  gurations {} {..
20a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
20b0: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68   NOTE: See if th
20c0: 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63  e list of test c
20d0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 68 61  onfigurations ha
20e0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
20f0: 6e 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20  n by..      #
2100: 20 20 20 20 74 68 65 20 75 73 65 72 20 28 65 2e      the user (e.
2110: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  g. on the comman
2120: 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20  d line)...
2130: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
2140: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
2150: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d  _configurations]
2160: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
2170: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73   [llength $::tes 2180: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 t_configurations 2190: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 21a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 21b0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 21c0: 65 20 73 70 65 63 69 66 69 65 64 20 6c 69 73 74 e specified list 21d0: 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 of test configu 21e0: 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 rations... 21f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 2200: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 urn$::test_conf
2210: 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20  igurations..
2220: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
2230: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2240: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
2250: 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20 74  efault list of t
2260: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
2270: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ns...        #..
2280: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
2290: 6c 69 73 74 20 44 65 62 75 67 20 52 65 6c 65 61  list Debug Relea
22a0: 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  se]..      }..
22b0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
22c0: 20 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72   getBuildBaseDir
22d0: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
22e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
22f0: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74  TE: Figure out t
2300: 68 65 20 62 61 73 65 20 64 69 72 65 63 74 6f 72  he base director
2310: 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20  y where all the
2320: 62 75 69 6c 64 73 20 73 68 6f 75 6c 64 20 62 65  builds should be
2330: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2340: 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 77  located.  This w
2350: 69 6c 6c 20 62 65 20 74 68 65 20 64 69 72 65 63  ill be the direc
2360: 74 6f 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69  tory that contai
2370: 6e 73 20 74 68 65 20 61 63 74 75 61 6c 0d 0a 20  ns the actual..
2380: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69       #       bui
2390: 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74  ld output direct
23a0: 6f 72 79 20 28 65 2e 67 2e 20 70 61 72 65 6e 74  ory (e.g. parent
23b0: 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20   of "bin")...
23c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
23d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62  [info exists ::b
23e0: 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74  uild_base_direct
23f0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
2400: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
2410: 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73  gth $::build_bas 2420: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 e_directory] > 0 2430: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2440: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2450: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 2460: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 62 n of the build b 2470: 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61 ase directory ha 2480: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 s been overridde 2490: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 n;.. # 24a0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 therefore, u 24b0: 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d se it verbatim.. 24c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 24d0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 return$::bu
24e0: 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f  ild_base_directo
24f0: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
2500: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2510: 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74   ::common_direct
2520: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
2530: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
2540: 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  gth $::common_di 2550: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 2560: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 2570: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2580: 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 Next, fallback 2590: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 69 to the parent di 25a0: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f rectory of the o 25b0: 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 ne containing.. 25c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 25d0: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22 his file (i.e. " 25e0: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 common.eagle"), 25f0: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 if available... 2600: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2610: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 return [file d 2620: 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e irname$::common
2630: 5f 64 69 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20  _directory]..
2640: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
2650: 66 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68  fo exists ::path
2660: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
2670: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
2680: 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74   $::path] > 0} t 2690: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 26a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 26b0: 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 : Finally, fallb 26c0: 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e ack to the paren 26d0: 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 t directory of t 26e0: 68 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 he EagleTest.. 26f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 2700: 74 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65 th. The EagleTe 2710: 73 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61 st package guara 2720: 6e 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20 ntees that this 2730: 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 variable.. 2740: 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 # will b 2750: 65 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72 e set to the dir 2760: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e ectory containin 2770: 67 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 g the first file 2780: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 2790: 20 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65 execute the 27a0: 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 [runTestPrologu 27b0: 65 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 e] script librar 27c0: 79 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 y procedure... 27d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27e0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 return [file di 27f0: 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a rname$::path]..
2800: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2810: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2820: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61     # NOTE: No pa
2830: 74 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  th is available,
2840: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2850: 20 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70   string.  This p
2860: 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20  oint..        #
2870: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74        should not
2880: 20 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20   be reached...
2890: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
28a0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
28b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
28c0: 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65 64 4d     proc isMixedM
28d0: 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69  odeAssembly { fi
28e0: 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20  leName {varName
28f0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
2900: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
2910: 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75 72 65  First, make sure
2920: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20   the test suite
2930: 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 20 69  infrastructure i
2940: 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20  s allowed to..
2950: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20      #       use
2960: 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61  the [exec] comma
2970: 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  nd...      #..
2980: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
2990: 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29  xists ::no(exec)
29a0: 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73  ] && ![info exis
29b0: 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73  ts ::no(corFlags
29c0: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
29d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
29e0: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6c 6f   NOTE: If the lo
29f0: 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61  cation of CorFla
2a00: 67 73 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e  gs is present in
2a10: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74   the environment
2a20: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
2a30: 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68 65 72     use it; other
2a40: 77 69 73 65 20 61 73 73 75 6d 65 20 69 74 20 69  wise assume it i
2a50: 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a  s in the PATH...
2a60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2a70: 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67 73 20     set corFlags
2a80: 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20  [expr {..
2a90: 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20     [info exists
2aa0: 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d  ::env(CorFlags)]
2ab0: 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61   ? $::env(CorFla 2ac0: 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67 73 22 gs) : "CorFlags" 2ad0: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a .. }].... 2ae0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2af0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 2b00: 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 6f pt to execute Co 2b10: 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20 73 70 rFlags on the sp 2b20: 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20 ecified file... 2b30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2b40: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 2b50: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 20 2d exec - 2b60: 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c -$corFlags [fil
2b70: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 66 69  e nativename $fi 2b80: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 leName].. 2b90: 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74 } exec] == 0} t 2ba0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2bb0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 2bc0: 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 NOTE: If request 2bd0: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 2be0: 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74 , attempt to det 2bf0: 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20 20 20 ermine the.. 2c00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6c # pl 2c10: 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65 20 73 atform for the s 2c20: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 61 73 pecified file as 2c30: 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 well... 2c40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 2c50: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 2c60: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d h$varName] > 0}
2c70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2c80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2c90: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72      # NOTE: Stor
2ca0: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 69  e the platform i
2cb0: 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61 72 69  n the named vari
2cc0: 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 20  able in the..
2cd0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
2ce0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20   context of our
2cf0: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20  caller...
2d00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2d10: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 2d20: 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d Name platform... 2d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 2d40: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 2d50: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 TE: Attempt to e 2d60: 78 74 72 61 63 74 20 74 68 65 20 50 45 20 6c 69 xtract the PE li 2d70: 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74 ne from the capt 2d80: 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 ured.. 2d90: 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 # output 2da0: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 . If this value 2db0: 20 69 73 20 22 50 45 33 32 22 20 6f 72 20 22 50 is "PE32" or "P 2dc0: 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20 E32+", the.. 2dd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2de0: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 69 73 assembly file is 2df0: 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d 62 69 32-bit or 64-bi 2e00: 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 3b t, respectively; 2e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 2e20: 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c otherwise, 2e30: 20 69 74 73 20 74 79 70 65 20 69 73 20 75 6e 6b its type is unk 2e40: 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 nown... 2e50: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2e60: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e set pattern {^ 2e70: 50 45 20 20 20 20 20 20 20 20 3a 20 28 50 45 33 PE : (PE3 2e80: 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 2|PE32\+)\s+$}..
2e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ea0: 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20   {[regexp -line
2eb0: 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 65  -- $pattern$exe
2ec0: 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74  c dummy pe32]} t
2ed0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2ee0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2ef0: 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 54 68        # HACK: Th
2f00: 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73 73 75  is [switch] assu
2f10: 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69 74 20  mes that 32-bit
2f20: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 0d  executables are.
2f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
2f40: 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 78 38         always x8
2f50: 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d 62 69  6 and that 64-bi
2f60: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72  t executables ar
2f70: 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  e always..
2f80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2f90: 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  x64...
2fa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
2fb0: 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61       switch -exa
2fc0: 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20  ct -- $pe32 {.. 2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 P 2fe0: 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 E32 {.. 2ff0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 set pla 3000: 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20 tform Win32.. 3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3030: 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20 PE32+ {.. 3040: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p 3050: 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20 latform x64.. 3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3080: 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 default {.. 3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 30a0: 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 platform "".. 30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 30c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 30d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 30e0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 30f0: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f set platfo 3100: 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 rm "".. 3110: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 3120: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 }.... # 3130: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 3140: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 TE: Attempt to e 3150: 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c xtract the ILONL 3160: 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 Y line from the 3170: 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20 captured.. 3180: 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 # outp 3190: 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c ut. If this val 31a0: 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 ue is zero, the 31b0: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6d specified file m 31c0: 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ust.. # 31d0: 20 20 20 20 20 20 20 62 65 20 61 20 6d 69 78 65 be a mixe 31e0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b d-mode assembly; 31f0: 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20 63 otherwise, it c 3200: 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 ontains only.. 3210: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 3220: 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e managed componen 3230: 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ts... # 3240: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 3250: 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 pattern {^ILONLY 3260: 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d : (0|1)\s+$}
3270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
3280: 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65   {![regexp -line
3290: 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78   -- $pattern$ex
32a0: 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d  ec dummy ilOnly]
32b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
32c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
32d0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  se..          }.
32e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
32f0: 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20  {!$ilOnly} then 3300: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 3310: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 3320: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 3330: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 3340: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3350: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 73 NOTE: If the tes 3360: 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74 20 75 t suite cannot u 3370: 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65 78 65 se [exec] or exe 3380: 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 cution of CorFla 3390: 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 gs.. # 33a0: 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e failed, return 33b0: 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23 false... # 33c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 .. return f 33d0: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a alse.. }..... 33e0: 20 20 20 20 70 72 6f 63 20 69 73 42 75 69 6c 64 proc isBuild 33f0: 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69 Available { nati 3400: 76 65 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 ve directory {va 3410: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 rName ""} } {.. 3420: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3430: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 3440: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 fully qualified 3450: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 file name for th 3460: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 e primary assemb 3470: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 3480: 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 containing the 3490: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 34a0: 69 74 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 ite managed comp 34b0: 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 onents. It.. 34c0: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c # shoul 34d0: 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20 d be noted that 34e0: 74 68 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69 this assembly fi 34f0: 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 le may also cont 3500: 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 ain the.. # 3510: 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f native co 3520: 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e mponents, if a n 3530: 61 74 69 76 65 20 62 75 69 6c 64 20 69 73 20 69 ative build is i 3540: 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d n use... #. 3550: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 3560: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 3570: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 3580: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
3590: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
35a0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d  ata.SQLite.dll]]
35b0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
35c0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 35d0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 35e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f 35f0: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d alse.. }... 3600: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 3610: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 3620: 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 to automatically 3630: 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20 70 detect if the p 3640: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d rimary assembly. 3650: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 3660: 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 ontains any nati 3670: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 ve components, i 3680: 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 f necessary... 3690: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 36a0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 36b0: 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74$native] == 0} t
36c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
36d0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
36e0: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0} 36f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 3700: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
3710: 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20  ame $varName.. 3720: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 3730: 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b 69 set native [i 3740: 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 sMixedModeAssemb 3750: 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 ly$fileName $va 3760: 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d rName].. }. 3770: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 3780: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 # NOTE: If the 3790: 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c primary assembl 37a0: 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 y also contains 37b0: 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f the native compo 37c0: 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 nents,.. # 37d0: 20 20 20 20 20 20 77 65 20 68 61 76 65 20 65 76 we have ev 37e0: 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 erything we need 37f0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 3800: 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 if {$native} t
3810: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
3820: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
3830: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
3840: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
3850: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75  ild the fully qu
3860: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  alified file nam
3870: 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f  e for the intero
3880: 70 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  p assembly..
3890: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69    #       contai
38a0: 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e  ning the System.
38b0: 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69  Data.SQLite nati
38c0: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ve components.
38d0: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23  If this..      #
38e0: 20 20 20 20 20 20 20 66 69 6c 65 20 65 78 69 73         file exis
38f0: 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61  ts, we should ha
3900: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65  ve everything we
3910: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d   need...      #.
3920: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
3930: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
3940: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
3950: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 3960: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 2e 49 SQLite.I 3970: 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a nterop.dll]].... 3980: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 3990: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
39a0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
39b0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
39c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
39d0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
39e0: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
39f0: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65  y qualified file
3a00: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51   name for the SQ
3a10: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..
3a20: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
3a30: 2e 20 20 49 66 20 74 68 69 73 20 66 69 6c 65 20  .  If this file
3a40: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c  exists, we shoul
3a50: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e  d have everythin
3a60: 67 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20  g we..      #
3a70: 20 20 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20      need...
3a80: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69   #..      set fi
3a90: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74  leName [file nat
3aa0: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
3ab0: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d  in $directory \. 3ac0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 . sqlit 3ad0: 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 e3.dll]].... 3ae0: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis 3af0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
3b00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
3b10: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
3b20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
3b30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e        # NOTE: On
3b40: 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76 65  e or more native
3b50: 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64   components need
3b60: 65 64 20 62 79 20 53 79 73 74 65 6d 2e 44 61 74  ed by System.Dat
3b70: 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20  a.SQLite..
3b80: 23 20 20 20 20 20 20 20 61 72 65 20 6d 69 73 73  #       are miss
3b90: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
3ba0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
3bb0: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
3bc0: 20 70 72 6f 63 20 69 73 52 65 6c 65 61 73 65 41   proc isReleaseA
3bd0: 76 61 69 6c 61 62 6c 65 20 7b 20 64 69 72 65 63  vailable { direc
3be0: 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22  tory {varName ""
3bf0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  } } {..      if
3c00: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
3c10: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  $varName] > 0} t 3c20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 hen {.. u 3c30: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
3c40: 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20  $varName.. 3c50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 3c60: 6e 20 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61 n [isBuildAvaila 3c70: 62 6c 65 20 22 22 20 24 64 69 72 65 63 74 6f 72 ble ""$director
3c80: 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20  y $varName].. 3c90: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 3ca0: 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f joinBuildDirecto 3cb0: 72 79 20 7b 20 6e 61 74 69 76 65 20 70 61 74 68 ry { native path 3cc0: 20 79 65 61 72 20 70 6c 61 74 66 6f 72 6d 20 63 year platform c 3cd0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7d 20 7b onfiguration } { 3ce0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3cf0: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 # NOTE: Figure 3d00: 6f 75 74 20 61 6e 64 20 74 68 65 6e 20 72 65 74 out and then ret 3d10: 75 72 6e 20 74 68 65 20 66 75 6c 6c 79 20 71 75 urn the fully qu 3d20: 61 6c 69 66 69 65 64 20 70 61 74 68 20 74 6f 20 alified path to 3d30: 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 the build.. 3d40: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f # directo 3d50: 72 79 20 62 61 73 65 64 20 6f 6e 20 61 6c 6c 20 ry based on all 3d60: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 70 72 the arguments pr 3d70: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 3d80: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ller... #.. 3d90: 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76 if {$nativ
3da0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
3db0: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20     return [file
3dc0: 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24  join $path bin$
3dd0: 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24  year $platform$
3de0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a  configuration]..
3df0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
3e00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
3e10: 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20  file join $path 3e20: 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 69 bin$year $confi 3e30: 67 75 72 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 guration bin].. 3e40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 3e50: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 3e60: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 ildDirectory {} 3e70: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 3e80: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 # NOTE: See if 3e90: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 3ea0: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 ntime option has 3eb0: 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 been set. If s 3ec0: 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 o, use the.. 3ed0: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 3ee0: 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 ory for the mixe 3ef0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 3f00: 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 (a.k.a. the nati 3f10: 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 ve interop.. 3f20: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 3f30: 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 ly). To enable 3f40: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 3f50: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 3f60: 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 , enter a.. 3f70: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 # command 3f80: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 similar to one 3f90: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 of the following 3fa0: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 3fb0: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 3fc0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 3fd0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 eShell.exe -init 3fe0: 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f ialize -runtimeO 3ff0: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 ption native.. 4000: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 4010: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 4020: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 4030: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 4040: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f To enable this o 4050: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f ption via the co 4060: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 mmand line prior 4070: 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 to the "beta 16 4080: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 4090: 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c release of Eagl 40a0: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 e, the following 40b0: 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 command must be 40c0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 used instead.. 40d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 28 61 6c # (al 40e0: 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 so all on one li 40f0: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 4100: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 4110: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 leShell.exe -ini 4120: 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 tialize -postIni 4130: 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 tialize.. # 4140: 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 "object 4150: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 invoke Interpre 4160: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 ter.GetActive Ad 4170: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e dRuntimeOption n 4180: 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 ative".. # 4190: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c -file .\ 41a0: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c path\to\all.eagl 41b0: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 e.. #.. 41c0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 41d0: 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 ts ::build_direc 41e0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 41f0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 4200: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 ngth$::build_di
4210: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
4220: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
4230: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
4240: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
4250: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
4260: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
4270: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
4280: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
4290: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
42a0: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
42b0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
42c0: 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  n $::build_direc 42d0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 42e0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 42f0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4300: 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 If the "native" 4310: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 runtime option 4320: 69 73 20 73 65 74 2c 20 74 68 65 20 6d 69 78 65 is set, the mixe 4330: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d d-mode assembly. 4340: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4350: 20 69 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 is being tested 4360: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c . In that case, 4370: 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 the path to the 4380: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 4390: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 43a0: 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 will contain t 43b0: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 he platform name 43c0: 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 62 69 6e and all the bin 43d0: 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 aries under test 43e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 43f0: 20 20 73 68 6f 75 6c 64 20 62 65 20 70 72 65 73 should be pres 4400: 65 6e 74 20 69 6e 20 74 68 61 74 20 64 69 72 65 ent in that dire 4410: 63 74 6f 72 79 2e 20 20 49 66 20 74 68 65 20 22 ctory. If the " 4420: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 0d native" runtime. 4430: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4440: 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 option is not s 4450: 65 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 et, the build di 4460: 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 rectory will be 4470: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 considered to be 4480: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4490: 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 "platform-neut 44a0: 72 61 6c 22 2c 20 77 69 74 68 20 74 68 65 20 6e ral", with the n 44b0: 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69 6f 6e otable exception 44c0: 20 6f 66 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a of any native.. 44d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 44e0: 61 73 73 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 assembly (e.g. " 44f0: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 SQLite.Interop.d 4500: 6c 6c 22 29 20 63 6f 70 69 65 64 20 74 68 65 72 ll") copied ther 4510: 65 20 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 e during the.. 4520: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu 4530: 69 6c 64 20 70 72 6f 63 65 73 73 20 69 74 73 65 ild process itse 4540: 6c 66 2e 20 20 49 66 20 74 68 65 20 62 75 69 6c lf. If the buil 4550: 64 20 70 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f d process someho 4560: 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 w does not.. 4570: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 # copy 4580: 20 74 68 65 20 6e 61 74 69 76 65 20 61 73 73 65 the native asse 4590: 6d 62 6c 79 20 66 6f 72 20 74 68 69 73 20 70 6c mbly for this pl 45a0: 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 atform, most of 45b0: 74 68 65 20 74 65 73 74 73 0d 0a 20 20 20 20 20 the tests.. 45c0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 # in th 45d0: 65 20 73 75 69 74 65 20 77 69 6c 6c 20 73 69 6d e suite will sim 45e0: 70 6c 79 20 62 65 20 73 6b 69 70 70 65 64 2e 20 ply be skipped. 45f0: 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b Generally speak 4600: 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 ing, there.. 4610: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 # are 4620: 74 77 6f 20 77 61 79 73 20 74 6f 20 62 75 69 6c two ways to buil 4630: 64 20 74 68 65 20 62 69 6e 61 72 69 65 73 20 77 d the binaries w 4640: 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 74 6f hen preparing to 4650: 20 72 75 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 run the.. 4660: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 4670: 75 69 74 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 uite:.. # 4680: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4690: 20 20 31 2e 20 42 75 69 6c 64 20 74 68 65 20 73 1. Build the s 46a0: 65 70 61 72 61 74 65 20 6d 61 6e 61 67 65 64 20 eparate managed 46b0: 61 6e 64 20 6e 61 74 69 76 65 20 61 73 73 65 6d and native assem 46c0: 62 6c 69 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 blies using some 46d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 46e0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 commands si 46f0: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 milar to:.. 4700: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 4710: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 build.b 4720: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 at${Configurati
4730: 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24  on}ManagedOnly $4740: 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 {Platform}.. 4750: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 4760: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
4770: 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f  guration}NativeO
4780: 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d  nly ${Platform}. 4790: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 47a0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57 # W 47b0: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 here${Configura
47c0: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20  tion} is either
47d0: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65  "Debug" or "Rele
47e0: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20  ase" and..
47f0: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50    #          ${P 4800: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 latform} is eith 4810: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 er "Win32" or "x 4820: 36 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 64"... #. 4830: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4840: 20 32 2e 20 42 75 69 6c 64 20 74 68 65 20 6d 69 2. Build the mi 4850: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 4860: 79 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e y using a comman 4870: 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 d similar to:.. 4880: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4890: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 # bui 48a0: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 ld.bat${Configu
48b0: 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f  ration} ${Platfo 48c0: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rm}.. #.. 48d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 48e0: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 Where${Confi
48f0: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74  guration} is eit
4900: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22  her "Debug" or "
4910: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20  Release" and..
4920: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
4930: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20   ${Platform} is 4940: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f either "Win32" o 4950: 72 20 22 78 36 34 22 2e 20 20 49 66 20 74 68 69 r "x64". If thi 4960: 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 s command is.. 4970: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 4980: 20 75 73 65 64 2c 20 76 61 72 69 6f 75 73 20 74 used, various t 4990: 65 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72 ests that requir 49a0: 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 e supplementary 49b0: 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 managed.. 49c0: 20 23 20 20 20 20 20 20 20 20 20 20 61 73 73 65 # asse 49d0: 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e mblies (e.g. LIN 49e0: 51 29 20 6d 61 79 20 62 65 20 73 6b 69 70 70 65 Q) may be skippe 49f0: 64 20 75 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 d unless those b 4a00: 69 6e 61 72 69 65 73 0d 0a 20 20 20 20 20 20 20 inaries.. 4a10: 20 23 20 20 20 20 20 20 20 20 20 20 61 72 65 20 # are 4a20: 73 75 62 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 subsequently cop 4a30: 69 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 ied into the cor 4a40: 72 65 63 74 20 64 69 72 65 63 74 6f 72 79 20 28 rect directory ( 4a50: 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 i.e. by.. 4a60: 20 23 20 20 20 20 20 20 20 20 20 20 22 74 65 73 # "tes 4a70: 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 t_all.bat")... 4a80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4a90: 20 23 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68 # Note th 4aa0: 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 at all of the bu 4ab0: 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f ild commands abo 4ac0: 76 65 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 ve will default 4ad0: 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 to using.. 4ae0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c 61 # the la 4af0: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 test version of 4b00: 4d 53 42 75 69 6c 64 20 61 76 61 69 6c 61 62 6c MSBuild availabl 4b10: 65 20 61 6e 64 20 74 68 65 20 22 74 65 73 74 5f e and the "test_ 4b20: 79 65 61 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 year" may.. 4b30: 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 64 20 # need 4b40: 74 6f 20 62 65 20 61 64 6a 75 73 74 65 64 20 61 to be adjusted a 4b50: 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 ccordingly to ac 4b60: 74 75 61 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 tually run the t 4b70: 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 est suite... 4b80: 20 20 20 20 23 20 20 20 20 20 20 20 52 65 66 65 # Refe 4b90: 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 r to the comment 4ba0: 73 20 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 s in [getBuildYe 4bb0: 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 ar] for more inf 4bc0: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 ormation on.. 4bd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 68 6f 77 # how 4be0: 20 74 6f 20 73 65 74 20 74 68 69 73 20 76 61 72 to set this var 4bf0: 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 iable... 4c00: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e #.. set n 4c10: 61 74 69 76 65 20 5b 68 61 73 52 75 6e 74 69 6d ative [hasRuntim 4c20: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d eOption native]. 4c30: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur 4c40: 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 n [joinBuildDire 4c50: 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 ctory$native [g
4c60: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63  etBuildBaseDirec
4c70: 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20  tory] \..
4c80: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65       [getBuildYe
4c90: 61 72 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61  ar] [getBuildPla
4ca0: 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b  tform $native] [ 4cb0: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 4cc0: 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d ation]].. } 4cd0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 4ce0: 70 72 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 proc getReleaseV 4cf0: 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 ersion {} {.. 4d00: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4d10: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 4d20: 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 he release versi 4d30: 6f 6e 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 on for use with 4d40: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 the build direct 4d50: 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ory.. # 4d60: 20 20 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 when checking 4d70: 20 66 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 for available r 4d80: 65 6c 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 eleases... 4d90: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 4da0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 fo exists ::rele 4db0: 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 ase_version] && 4dc0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 4dd0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 ring length$::r
4de0: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20  elease_version]
4df0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
4e00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4e10: 23 20 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65  # NOTE: The rele
4e20: 61 73 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20  ase version has
4e30: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
4e40: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
4e50: 69 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  it..        #
4e60: 20 20 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20      verbatim...
4e70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4e80: 20 20 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65    return $::rele 4e90: 61 73 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 ase_version.. 4ea0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 4eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4ec0: 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 # NOTE: No relea 4ed0: 73 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 se version is av 4ee0: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 ailable, return 4ef0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 4f00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4f10: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 4f20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 4f30: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 4f40: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 uildFileName { f 4f50: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 ileName {platfor 4f60: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 m ""} } {.. 4f70: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 4f80: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 : Returns the sp 4f90: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d ecified file nam 4fa0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 e as if it were 4fb0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a located in the.. 4fc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu 4fd0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 ild directory, d 4fe0: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 iscarding any di 4ff0: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 rectory informat 5000: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 ion present.. 5010: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 # in th 5020: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 e file name as p 5030: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c 5040: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 5050: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 . return [f 5060: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c ile nativename \ 5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 5080: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 e join [getBuild 5090: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 Directory]$plat
50a0: 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20  form [file tail
50b0: 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20  $fileName]]].. 50c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 50d0: 20 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 getExternalDire 50e0: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 50f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 5100: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 5110: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 5120: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 5130: 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 e external binar 5140: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 5150: 20 66 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 74 files are locat 5160: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 5170: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 5180: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 5190: 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 e dirname [file 51a0: 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 dirname [info bi 51b0: 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d nary]]]].. }. 51c0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 51d0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 BinaryDirectory 51e0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 51f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 5200: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 5210: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 5220: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 y where the test 5230: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 application.. 5240: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 # itse 5250: 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 lf (i.e. the Eag 5260: 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 le shell) is loc 5270: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 5280: 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 be used as.. 5290: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d 52a0: 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 estination for t 52b0: 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d he copied System 52c0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 .Data.SQLite nat 52d0: 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 ive and.. # 52e0: 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 managed a 52f0: 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 ssemblies (i.e. 5300: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20 because this is 5310: 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 one of the few p 5320: 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 laces.. # 5330: 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20 43 where the C 5340: 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 LR will actually 5350: 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 find and load t 5360: 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a hem properly)... 5370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 5380: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 5390: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 53a0: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 53b0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 53c0: 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 th$::binary_dir
53d0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
53e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
53f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
5400: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
5410: 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 63  the binary direc
5420: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
5430: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
5440: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
5450: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
5460: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
5470: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
5480: 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65  n $::binary_dire 5490: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 54a0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 54b0: 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 eturn [info bina 54c0: 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 ry].. }.. 54d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 54e0: 20 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 getExternalFile 54f0: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 Name { fileName 5500: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 5510: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 5520: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 rns the specifie 5530: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 d file name as i 5540: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 f it were locate 5550: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 d in the.. 5560: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 5570: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 5580: 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 external binari 5590: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 55a0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 55b0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 55c0: 65 20 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 e join [getExter 55d0: 6e 61 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66 nalDirectory]$f
55e0: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d  ileName]]..    }
55f0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
5600: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
5610: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
5620: 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  form ""} } {..
5630: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
5640: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65  OTE: Returns the
5650: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file
5660: 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65  name as if it we
5670: 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68  re located in th
5680: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
5690: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
56a0: 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e  y, discarding an
56b0: 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f  y directory info
56c0: 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d  rmation present.
56d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
56e0: 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  n the file name
56f0: 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  as provided by o
5700: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...
5710: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
5720: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
5730: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
5740: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
5750: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
5760: 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20  $platform [file 5770: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
5780: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
5790: 20 70 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e   proc getCoreBin
57a0: 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70  aryFileName { {p
57b0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61  latform ""} {sta
57c0: 6e 64 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b  ndard false} } {
57d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
57e0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73   # NOTE: Returns
57f0: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66   the full path f
5800: 6f 72 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74  or the file cont
5810: 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 69 74  aining the SQLit
5820: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20  e core..      #
5830: 20 20 20 20 20 20 6e 61 74 69 76 65 20 6c 69 62        native lib
5840: 72 61 72 79 20 63 6f 64 65 20 66 6f 72 20 74 68  rary code for th
5850: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69  is platform.  Fi
5860: 72 73 74 2c 20 63 68 65 63 6b 20 61 6e 64 20 73  rst, check and s
5870: 65 65 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20  ee if..      #
5880: 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20       the SQLite
5890: 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72  core native libr
58a0: 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already
58b0: 62 65 65 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65  been loaded.  Ne
58c0: 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  xt,..      #
58d0: 20 20 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77     fallback to w
58e0: 68 61 74 20 74 68 65 20 66 75 6c 6c 20 70 61 74  hat the full pat
58f0: 68 20 73 68 6f 75 6c 64 20 62 65 2c 20 62 61 73  h should be, bas
5900: 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68  ed on whether th
5910: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
5920: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
5930: 6d 62 6c 79 20 69 73 20 62 65 69 6e 67 20 75 73  mbly is being us
5940: 65 64 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20  ed and the name
5950: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a  of the current..
5960: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6c        #       pl
5970: 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23  atform...      #
5980: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
5990: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
59a0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
59b0: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
59c0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
59d0: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
59e0: 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 53 51               _SQ
5a00: 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
5a10: 46 69 6c 65 4e 61 6d 65 7d 20 66 69 6c 65 4e 61  FileName} fileNa
5a20: 6d 65 5d 20 3d 3d 20 30 20 26 26 20 5c 0d 0a 20  me] == 0 && \..
5a30: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5a40: 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d   length $fileNam 5a50: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 5a60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5a70: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 # NOTE: The S 5a80: 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 QLite core nativ 5a90: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c e library has al 5aa0: 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 ready been loade 5ab0: 64 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 d via.. # 5ac0: 20 20 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 the nativ 5ad0: 65 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f e library pre-lo 5ae0: 61 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 ader. Return th 5af0: 61 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 at file name now 5b00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 5b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 return$fi
5b20: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d  leName..      }.
5b30: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
5b40: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
5b50: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ative]} then {..
5b60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
5b70: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
5b80: 6e 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  n the mixed-mode
5b90: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e   assembly file n
5ba0: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
5bb0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
5bc0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
5bd0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
5be0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
5bf0: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
5c00: 24 70 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d  $platform System 5c10: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 5c20: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ]].. } else 5c30: 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 74 if {$standard} t
5c40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
5c50: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
5c60: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74  : Return the nat
5c70: 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72  ive-only standar
5c80: 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  d SQLite library
5c90: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
5ca0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
5cb0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
5cc0: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
5cd0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
5ce0: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
5cf0: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 5d00: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a sqlite3.dll]].. 5d10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 5d20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5d30: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 5d40: 6e 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c n the native-onl 5d50: 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 y interop assemb 5d60: 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 ly file name... 5d70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5d80: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 5d90: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 ativename \.. 5da0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j 5db0: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 oin [getBinaryDi 5dc0: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f rectory]$platfo
5dd0: 72 6d 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  rm SQLite.Intero
5de0: 70 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d  p.dll]]..      }
5df0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
5e00: 70 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69  proc getCommonDi
5e10: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
5e20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
5e30: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
5e40: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
5e50: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
5e60: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73  the test scripts
5e70: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5e80: 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65  should be locate
5e90: 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20  d.  By default,
5ea0: 74 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e  this just return
5eb0: 73 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  s the Eagle..
5ec0: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
5ed0: 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
5ee0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
5ef0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
5f00: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
5f10: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
5f20: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
5f30: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 5f40: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 5f50: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 5f60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 5f70: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 5f80: 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f e common directo 5f90: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b ry has been set; 5fa0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5fb0: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 5fc0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 5fd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 5fe0: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74$::common_direct
5ff0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
6000: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
6010: 73 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63  s ::vendor_direc
6020: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
6030: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
6040: 6e 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64  ngth $::vendor_d 6050: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 6060: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 6070: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 6080: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 6090: 66 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 f the vendor dir 60a0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 60b0: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 60c0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 60d0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 60e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 60f0: 75 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 urn$::vendor_di
6100: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
6110: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
6120: 78 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72  xists ::tcl_libr
6130: 61 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ary] && \..
6140: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
6150: 67 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  gth $::tcl_libra 6160: 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ry] > 0 && \.. 6170: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 [file is 6180: 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c directory$::tcl
6190: 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20  _library]} then
61a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
61b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
61c0: 65 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20  e variable with
61d0: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  the location of
61e0: 74 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61  the script libra
61f0: 72 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23  ry is..        #
6200: 20 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61         set and a
6210: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72  ppears to be a r
6220: 65 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69  eal directory (i
6230: 2e 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64  .e. not embedded
6240: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6250: 20 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29    within a file)
6260: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65  ; therefore, use
6270: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
6280: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
6290: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a  $::tcl_library.. 62a0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 62b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 62c0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 # NOTE: Fallb 62d0: 61 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 ack to the direc 62e0: 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 tory containing 62f0: 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d the executable.. 6300: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6310: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f return [info 6320: 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 binary].. 6330: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 6340: 20 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 proc getDatabas 6350: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 6360: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 6370: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 6380: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 cedure returns t 6390: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 he directory whe 63a0: 72 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 re the test data 63b0: 62 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 bases.. # 63c0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c should be l 63d0: 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 ocated. By defa 63e0: 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 ult, this just u 63f0: 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 ses the temporar 6400: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 6410: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 directory confi 6420: 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 gured for this s 6430: 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d ystem... #. 6440: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 6450: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 exists ::databa 6460: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 6470: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 6480: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
6490: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f  database_directo
64a0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
64b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
64c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
64d0: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
64e0: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
64f0: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6500: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6510: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6520: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6530: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6540: 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61  return $::databa 6550: 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 se_directory.. 6560: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 6570: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr 6580: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 6590: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 65a0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
65b0: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
65c0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
65d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
65e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
65f0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
6600: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
6610: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6620: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6630: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6640: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6650: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6660: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc 6670: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. 6680: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 6690: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get 66a0: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. 66b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 66c0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 66d0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector 66e0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 66f0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 6700: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 6710: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 6720: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 6730: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 mporary files.. 6740: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho 6750: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 uld be located. 6760: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 By default, thi 6770: 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 s just uses the 6780: 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 temporary.. 6790: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f # directo 67a0: 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f ry configured fo 67b0: 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a r this system... 67c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 67d0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 67e0: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 67f0: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 6800: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6810: 65 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 ength$::tempora
6820: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
6830: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
6840: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6850: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
6860: 6f 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  on of the tempor
6870: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
6880: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
6890: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
68a0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
68b0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
68c0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
68d0: 6e 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64  n $::temporary_d 68e0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 68f0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 6900: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 exists ::scratch 6910: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 6920: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 6930: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 ing length$::sc
6940: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
6950: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
6960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6970: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
6980: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72  ation of the scr
6990: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68  atch directory h
69a0: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
69b0: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
69c0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
69d0: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
69e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
69f0: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69  rn $::scratch_di 6a00: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 6a10: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 6a20: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 return [getTemp 6a30: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 oraryPath].. 6a40: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 6a50: 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 74 4f proc getTestO 6a60: 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 verridesPreamble 6a70: 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 { {extraVarName 6a80: 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 s ""} } {.. 6a90: 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c set varNames [l 6aa0: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ist].... #. 6ab0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 6ac0: 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 f available, sta 6ad0: 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 73 74 rt with the mast 6ae0: 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 er list of test 6af0: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. 6b00: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 6b10: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 6b20: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 6b30: 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 sts ::test_overr 6b40: 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ides] && \.. 6b50: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 [llength$
6b60: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73  ::test_overrides
6b70: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
6b80: 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
6b90: 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a  end varNames $:: 6ba0: 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a test_overrides.. 6bb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 6bc0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6bd0: 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62 : If requested b 6be0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 y our caller, ad 6bf0: 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c d any additional 6c00: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 6c10: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 20 74 # names t 6c20: 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 o copy now... 6c30: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 6c40: 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 61 56 [llength$extraV
6c50: 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68  arNames] > 0} th
6c60: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76  en {..        ev
6c70: 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61  al lappend varNa
6c80: 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e 61 6d  mes $extraVarNam 6c90: 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 es.. }.... 6ca0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6cb0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 6cc0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment 6cd0: 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 to be returned b 6ce0: 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 61 63 y processing eac 6cf0: 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 h.. # 6d00: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 variable name a 6d10: 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 6e 65 nd adding the ne 6d20: 63 65 63 65 73 73 61 72 79 20 73 63 72 69 70 74 cecessary script 6d30: 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a fragments for.. 6d40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 61 # ea 6d50: 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 ch one... # 6d60: 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu 6d70: 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 lt "".... f 6d80: 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 oreach varName$
6d90: 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  varNames {..
6da0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6db0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
6dc0: 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 61   qualified globa
6dd0: 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  l variable name.
6de0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6df0: 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56 61 72       set fullVar
6e00: 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73  Name [appendArgs
6e10: 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d   :: $varName]... 6e20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6e30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does 6e40: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 65 78 the variable ex 6e50: 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e 74 65 ist in this inte 6e60: 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 3f rpreter context? 6e70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6e80: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 6e90: 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 xists$fullVarNa
6ea0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
6eb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6ec0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 65      # NOTE: Appe
6ed0: 6e 64 20 61 20 73 63 72 69 70 74 20 66 72 61 67  nd a script frag
6ee0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75  ment to the resu
6ef0: 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63 6f 72  lt that will cor
6f00: 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20  rectly..
6f10: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 61    #       copy a
6f20: 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c  ny contained val
6f30: 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e  ue to another in
6f40: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78  terpreter contex
6f50: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
6f60: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
6f70: 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 74  d result \n "set
6f80: 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20   " $fullVarName 6f90: 22 20 5c 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c " \{" [set$full
6fa0: 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20  VarName] \}..
6fb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
6fc0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
6fd0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
6fe0: 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   result contains
6ff0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72   one or more scr
7000: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61  ipt fragments, a
7010: 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23  ppend a..      #
7020: 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d         newline..
7030: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7040: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
7050: 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d  th $result] > 0} 7060: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 7070: 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c append result \ 7080: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 7090: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
70a0: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
70b0: 20 20 70 72 6f 63 20 67 65 74 41 70 70 44 6f 6d    proc getAppDom
70c0: 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70  ainPreamble { {p
70d0: 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66 66 69  refix ""} {suffi
70e0: 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  x ""} } {..
70f0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
7100: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
7110: 20 72 65 74 75 72 6e 73 20 61 20 74 65 73 74 20   returns a test
7120: 73 65 74 75 70 20 73 63 72 69 70 74 20 66 72 61  setup script fra
7130: 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  gment suitable f
7140: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  or..      #
7150: 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 20    evaluation by
7160: 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  an interpreter c
7170: 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f  reated in an iso
7180: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
7190: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
71a0: 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 63   domain.  The sc
71b0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65  ript fragment be
71c0: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c  ing returned wil
71d0: 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65 64 20  l be surrounded
71e0: 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  by..      #
71f0: 20 20 74 68 65 20 70 72 65 66 69 78 20 61 6e 64    the prefix and
7200: 20 73 75 66 66 69 78 20 22 73 63 72 69 70 74 20   suffix "script
7210: 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65 63 69  fragments" speci
7220: 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  fied by our call
7230: 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  er,..      #
7240: 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68 65 20     if any.  The
7250: 65 6e 74 69 72 65 20 73 63 72 69 70 74 20 62 65  entire script be
7260: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c  ing returned wil
7270: 6c 20 62 65 20 73 75 62 73 74 69 74 75 74 65 64  l be substituted
7280: 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20 20 20   via..      #
7290: 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20      [subst], in
72a0: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f  the context of o
72b0: 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72  ur caller, befor
72c0: 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  e being returned
72d0: 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ...      #
72e0: 20 54 68 69 73 20 73 74 65 70 20 69 73 20 6e 65   This step is ne
72f0: 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 20  cessary so that
7300: 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e  some limited con
7310: 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  text information
7320: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
7330: 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74   primarily relat
7340: 65 64 20 74 6f 20 74 68 65 20 74 65 73 74 69 6e  ed to the testin
7350: 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 63  g directories, c
7360: 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72 72 65  an be transferre
7370: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
7380: 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
7390: 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61  ter in the isola
73a0: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ted application
73b0: 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69  domain, making i
73c0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
73d0: 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73   able to success
73e0: 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20  fully run tests
73f0: 74 68 61 74 20 72 65 71 75 69 72 65 20 6f 6e 65  that require one
7400: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d   or more of the.
7410: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
7420: 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74  iles in one of t
7430: 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 63  he testing direc
7440: 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 73  tories.  Callers
7450: 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d   should keep in.
7460: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
7470: 69 6e 64 20 74 68 61 74 20 74 68 65 20 74 65 73  ind that the tes
7480: 74 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  t script fragmen
7490: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  t being returned
74a0: 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d   cannot rely on.
74b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
74c0: 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  ny script librar
74d0: 79 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 61  y procedures tha
74e0: 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 64  t are not provid
74f0: 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 0d  ed by the Eagle.
7500: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c  .      #       l
7510: 69 62 72 61 72 79 20 70 61 63 6b 61 67 65 20 28  ibrary package (
7520: 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65  i.e. "init.eagle
7530: 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  "), including th
7540: 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62 79 0d  ose provided by.
7550: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
7560: 68 65 20 45 61 67 6c 65 20 74 65 73 74 20 70 61  he Eagle test pa
7570: 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 68  ckage, unless th
7580: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  e file containin
7590: 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 64  g them is loaded
75a0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
75b0: 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d  manually via som
75c0: 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 73  e other mechanis
75d0: 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75  m (e.g. by inclu
75e0: 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61 74 65  ding appropriate
75f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7600: 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  [package require
7610: 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f  ] or [source] co
7620: 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20 70 72  mmands in the pr
7630: 65 66 69 78 20 6f 72 20 73 75 66 66 69 78 0d 0a  efix or suffix..
7640: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63        #       sc
7650: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 29 2e  ript fragments).
7660: 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69    Also, all vari
7670: 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references
7680: 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a  and all nested..
7690: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
76a0: 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f  mmands (i.e. tho
76b0: 73 65 20 69 6e 20 73 71 75 61 72 65 20 62 72 61  se in square bra
76c0: 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 64  ckets) contained
76d0: 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20   in the final..
76e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72       #       scr
76f0: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77 69 6c  ipt fragment wil
7700: 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67 20 65  l end up being e
7710: 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20  valuated in the
7720: 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a  context of the..
7730: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
7740: 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65  lling interprete
7750: 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 61  r and not the ta
7760: 72 67 65 74 20 69 6e 74 65 72 70 72 65 74 65 72  rget interpreter
7770: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 0d   created in the.
7780: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
7790: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
77a0: 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73  ion domain unles
77b0: 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 67  s the dollar sig
77c0: 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 65  ns and/or square
77d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
77e0: 62 72 61 63 6b 65 74 73 20 61 72 65 20 73 70 65  brackets are spe
77f0: 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 69  cially quoted wi
7800: 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d  th backslashes..
7810: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7820: 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20  return [uplevel
7830: 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61  1 [list subst [a
7840: 70 70 65 6e 64 41 72 67 73 20 24 70 72 65 66 69  ppendArgs $prefi 7850: 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 x {.. if 7860: 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 {[hasRuntimeOpti 7870: 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e on native]} then 7880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 7890: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 ject invoke Inte 78a0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 78b0: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 e AddRuntimeOpti 78c0: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 on native.. 78d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 }.. } [g 78e0: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 etTestOverridesP 78f0: 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 reamble [list pa 7900: 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d th test_channel] 7910: 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 ]$suffix]]]..
7920: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
7930: 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c   tryCopyExternal
7940: 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  File { fileName
7950: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e  {platform ""} {n
7960: 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d  ewFileName ""} }
7970: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f   {..      set so
7980: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65  urceFileName [ge
7990: 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d  tExternalFileNam
79a0: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  e $fileName].... 79b0: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 if {![file 79c0: 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 exists$sourceF
79d0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
79e0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
79f0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 7a00: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 7a10: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 7a20: 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 skipped copying 7a30: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c external file \ 7a40: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
7a50: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
7a60: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
7a70: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a  ot exist\n"]....
7a80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
7a90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
7aa0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
7ab0: 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  gth $newFileName 7ac0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 7ad0: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 set targe 7ae0: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 tFileName [getBi 7af0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 naryFileName$ne
7b00: 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  wFileName $platf 7b10: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c orm].. } el 7b20: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 se {.. se 7b30: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 t targetFileName 7b40: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 7b50: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p 7b60: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. 7b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 }.... set t 7b80: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b argetDirectory [ 7b90: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 file dirname$ta
7ba0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  rgetFileName]...
7bb0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
7bc0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
7bd0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
7be0: 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65  ists $targetDire 7bf0: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c10: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 file mkdir$targ
7c20: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  etDirectory..
7c30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
7c50: 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f   copy -force $so 7c60: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 urceFileName$ta
7c70: 72 67 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d  rgetFileName}] =
7c80: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
7c90: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 7ca0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 7cb0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 7cc0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 "---- copi 7cd0: 65 64 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 ed external file 7ce0: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
7cf0: 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f  eFileName "\" to
7d00: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
7d10: 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e      $targetFileN 7d20: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 7d30: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 7d40: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
7d50: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
7d60: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
7d70: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
7d80: 20 74 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61   to copy externa
7d90: 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  l file from \""
7da0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 7db0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 7dc0: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
7dd0: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
7de0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
7df0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
7e00: 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b  CopyBinaryFile {
7e10: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66   fileName {platf
7e20: 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65  orm ""} {newFile
7e30: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  Name ""} } {..
7e40: 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 69      set sourceFi
7e50: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72  leName [getBinar
7e60: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  yFileName $fileN 7e70: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
7e80: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
7e90: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63  le exists $sourc 7ea0: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e eFileName]} then 7eb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 7ec0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
7ed0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
7ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
7ef0: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69  -- skipped copyi
7f00: 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  ng binary file \
7f10: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  "" $sourceFileNa 7f20: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 7f30: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n 7f40: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a ot exist\n"].... 7f50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a return.. 7f60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 7f70: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 7f80: 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 gth$newFileName
7f90: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
7fa0: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65         set targe
7fb0: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75  tFileName [getBu
7fc0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77  ildFileName $new 7fd0: 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f FileName$platfo
7fe0: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  rm]..      } els
7ff0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
8000: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20   targetFileName
8010: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
8020: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
8030: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d  tform]..      }.
8040: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 72  ...      set tar
8050: 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69  getDirectory [fi
8060: 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67  le dirname $targ 8070: 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 etFileName].... 8080: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 8090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 80a0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 80b0: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ts$targetDirect
80c0: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
80e0: 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74  le mkdir $target 80f0: 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. 8100: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 8110: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 file c 8120: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 opy -force$sour
8130: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67  ceFileName $targ 8140: 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 etFileName}] == 8150: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 8160: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
8170: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
8180: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
8190: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64      "---- copied
81a0: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f   binary file fro
81b0: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil 81c0: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 eName "\" to \"" 81d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 81e0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
81f0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
8200: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
8210: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 8220: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 8230: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8240: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to 8250: 63 6f 70 79 20 62 69 6e 61 72 79 20 66 69 6c 65 copy binary file 8260: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
8270: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
8280: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20           "\" to
8290: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e  \"" $targetFileN 82a0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 82b0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 82c0: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 75 proc tryCopyBu 82d0: 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 ildFile { fileNa 82e0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} 82f0: 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 {newFileName "" 8300: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set 8310: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 sourceFileName 8320: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 8330: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 e$fileName $pla 8340: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tform].... 8350: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist 8360: 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d s$sourceFileNam
8370: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
8380: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 8390: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 83a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 83b0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp 83c0: 65 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 ed copying build 83d0: 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 file \""$sourc
83e0: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
83f0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
8400: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
8410: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  n"]....        r
8420: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  eturn..      }..
8430: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
8440: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46  ing length $newF 8450: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 ileName] > 0} th 8460: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 8470: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 t targetFileName 8480: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 8490: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 ame$newFileName
84a0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. 84b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 84c0: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 set targetF 84d0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina 84e0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
84f0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. 8500: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8510: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 set targetDire 8520: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e ctory [file dirn 8530: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e ame$targetFileN
8540: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ame]....      if
8550: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
8560: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
8570: 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72  file exists $tar 8580: 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 getDirectory]} t 8590: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 85a0: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 file mkdi 85b0: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f r$targetDirecto
85c0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..
85d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
85e0: 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f     file copy -fo
85f0: 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  rce $sourceFileN 8600: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e ame$targetFileN
8610: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
8620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
8630: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8640: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 8660: 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 -- copied build 8670: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
8680: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c  ourceFileName "\
8690: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
86a0: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46          $targetF 86b0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. 86c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 86d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
86e0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
86f0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
8700: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61          "---- fa
8710: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69  iled to copy bui
8720: 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  ld file from \""
8730: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 8740: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8750: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 "\" to \""$targ
8760: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
8770: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
8780: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
8790: 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c  yDeleteBinaryFil
87a0: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c  e { fileName {pl
87b0: 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a  atform ""} } {..
87c0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
87d0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  me [getBinaryFil
87e0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20  eName $fileName 87f0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20$platform]....
8800: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
8810: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 8820: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8830: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
8840: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
8850: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
8860: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64     "---- skipped
8870: 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79   deleting binary
8880: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 8890: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 88a0: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does 88b0: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d not exist\n"]... 88c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. 88d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 88e0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi 88f0: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e le delete$fileN
8900: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
8910: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
8920: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8930: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 8950: 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e 61 72 -- deleted binar 8960: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 y file \""$file
8970: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
8980: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
8990: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 89a0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 89b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 89c0: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 "---- faile 89d0: 64 20 74 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 d to delete bina 89e0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ry file \""$fil
89f0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
8a00: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
8a10: 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65      proc tryDele
8a20: 74 65 42 75 69 6c 64 46 69 6c 65 20 7b 20 66 69  teBuildFile { fi
8a30: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d  leName {platform
8a40: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
8a50: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65  set fileName [ge
8a60: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $8a70: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
8a80: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
8a90: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $8aa0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 8ab0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 8ac0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
8ad0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
8af0: 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  - skipped deleti
8b00: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  ng build file \"
8b10: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 8b20: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 8b30: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 8b40: 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 t\n"].... 8b50: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } 8b60: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 8b70: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 8b80: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d e$fileName}] ==
8b90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
8ba0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 8bb0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 8bc0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 8bd0: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 "---- delet 8be0: 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 ed build file \" 8bf0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
8c00: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
8c10: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
8c20: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 8c30: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 8c40: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 8c50: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 - failed to dele 8c60: 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 te build file \" 8c70: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
8c80: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
8c90: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
8ca0: 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b  ryCopyAssembly {
8cb0: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66   fileName {platf
8cc0: 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 75  orm ""} {pdb tru
8cd0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72  e} } {..      tr
8ce0: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24  yCopyBuildFile $8cf0: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
8d00: 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  rm....      if {
8d10: 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  $pdb} then {.. 8d20: 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 tryCopyBui 8d30: 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 ldFile [appendAr 8d40: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 8d50: 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 [file rootname 8d60: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62$fileName] .pdb
8d70: 5d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  ] $platform.. 8d80: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 8d90: 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 proc tryDele 8da0: 74 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c teAssembly { fil 8db0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform 8dc0: 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7d ""} {pdb true} } 8dd0: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c {.. tryDel 8de0: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 eteBinaryFile$f
8df0: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 8e00: 6d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 m.... if {$
8e10: 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  pdb} then {..
8e20: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
8e30: 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64  naryFile [append
8e40: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
8e50: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
8e60: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p 8e70: 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 db]$platform..
8e80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
8e90: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f  ..    proc tryLo
8ea0: 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c  adAssembly { fil
8eb0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
8ec0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ""} } {..      s
8ed0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
8ee0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $8ef0: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
8f00: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
8f10: 7b 5b 63 61 74 63 68 20 7b 73 65 74 20 61 73 73  {[catch {set ass
8f20: 65 6d 62 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20  embly \..
8f30: 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 6c         [object l
8f40: 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 46 69  oad -loadtype Fi
8f50: 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c 65 4e  le -alias $fileN 8f60: 61 6d 65 5d 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 ame]}] == 0} the 8f70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 8f80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 8f90: 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65 63 Now, add the nec 8fa0: 65 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e 73 essary test cons 8fb0: 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 traint... 8fc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC 8fd0: 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 onstraint [file 8fe0: 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 rootname [file t 8ff0: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ail$fileName]].
9000: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
9010: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72        # NOTE: Gr
9020: 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 6e  ab the image run
9030: 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 6f  time version fro
9040: 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62  m the assembly b
9050: 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20  ecause..
9060: 23 20 20 20 20 20 20 20 73 65 76 65 72 61 6c 20  #       several
9070: 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 74  tests rely on it
9080: 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 69   having a certai
9090: 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  n value...
90a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
90b0: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
90c0: 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 69  ndArgs [file tai
90d0: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c  l $fileName] _ \ 90e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 .. [$
90f0: 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52 75  assembly ImageRu
9100: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a  ntimeVersion]]..
9110: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9120: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
9130: 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74  urn the full pat
9140: 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20  h of the loaded
9150: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  file...        #
9160: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9170: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 9180: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 9190: 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c urn "".. }... 91a0: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51 4c .. proc isSQL 91b0: 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 iteReady {} {.. 91c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 91d0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 91e0: 64 75 72 65 20 6d 75 73 74 20 72 65 74 75 72 6e dure must return 91f0: 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 non-zero only i 9200: 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 f the SQLite nat 9210: 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ive.. # 9220: 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20 74 library and t 9230: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 9240: 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 QLite managed as 9250: 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 sembly are loade 9260: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 9270: 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 9280: 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 se by the test s 9290: 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 uite. Currently 92a0: 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 , this procedure 92b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 92c0: 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 should be called 92d0: 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 20 only after the 92e0: 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 [tryLoadAssembly 92f0: 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 0d ] procedure has. 9300: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b 9310: 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 een called to pr 9320: 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79 73 74 obe for the Syst 9330: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d em.Data.SQLite m 9340: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 0d anaged assembly. 9350: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 9360: 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 nd the [checkFor 9370: 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 72 SQLite] procedur 9380: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 e has been calle 9390: 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a d to probe for.. 93a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 93b0: 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 e SQLite native 93c0: 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77 69 library; otherwi 93d0: 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 se, this procedu 93e0: 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a re will simply.. 93f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c # al 9400: 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72 6f ways return zero 9410: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9420: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 9430: 0d 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 .. [haveC 9440: 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d onstraint System 9450: 2e 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 .Data.SQLite] && 9460: 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 [haveConstraint 9470: 20 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 SQLite].. 9480: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }].. }..... 9490: 20 20 70 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 proc matchMach 94a0: 69 6e 65 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d ine { platform } 94b0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 94c0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d # NOTE: An em 94d0: 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 pty string for t 94e0: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e he platform mean 94f0: 73 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64 s that the build 9500: 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 is not.. # 9510: 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c [primaril 9520: 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c y] a native buil 9530: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 d; therefore, it 9540: 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e always matches. 9550: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9560: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 9570: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d gth$platform] =
9580: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
9590: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
95a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
95b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
95c0: 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65  TE: Does the spe
95d0: 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20  cified platform
95e0: 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20  match up to the
95f0: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f  current process?
9600: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9610: 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65   if {$platform e 9620: 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 q [machineToPlat 9630: 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 form$::tcl_plat
9640: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20  form(machine)]}
9650: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9660: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
9670: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
9680: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
9690: 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61  he specified pla
96a0: 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d  tform does not m
96b0: 61 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65  atch up with the
96c0: 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20   platform..
96d0: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65   #       for the
96e0: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
96f0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
9700: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
9710: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
9720: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
9730: 65 42 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65  eBuilds { channe
9740: 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d  l {select false}
9750: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
9760: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
9770: 63 6b 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73  ck for every pos
9780: 73 69 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62  sible valid comb
9790: 69 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65  ination of value
97a0: 73 20 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20  s used when..
97b0: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74     #       locat
97c0: 69 6e 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c  ing out the buil
97d0: 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f  d output directo
97e0: 72 79 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68  ry, showing each
97f0: 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..
9800: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
9810: 76 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20  variation along
9820: 74 68 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20  the way...
9830: 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  #..      foreach
9840: 20 6e 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61   native [list fa
9850: 6c 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20  lse true] {..
9860: 20 20 20 20 20 66 6f 72 65 61 63 68 20 79 65 61       foreach yea
9870: 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73  r [getBuildYears
9880: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  ] {..          f
9890: 6f 72 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61  oreach configura
98a0: 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f  tion [getBuildCo
98b0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d  nfigurations] {.
98c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
98e0: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74  TE: Figure out t
98f0: 68 65 20 65 66 66 65 63 74 69 76 65 20 62 75 69  he effective bui
9900: 6c 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68  ld platform.  Th
9910: 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  is is..
9920: 20 20 20 23 20 20 20 20 20 20 20 62 61 73 65 64     #       based
9930: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
9940: 6f 74 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d  ot a [primarily]
9950: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20   native build..
9960: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
9970: 20 20 20 69 73 20 62 65 69 6e 67 20 75 73 65 64     is being used
9980: 2e 20 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c  .  For [primaril
9990: 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75  y] non-native bu
99a0: 69 6c 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ilds,..
99b0: 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20     #       this
99c0: 77 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79  will be an empty
99d0: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
99e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
99f0: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
9a00: 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  m [getBuildPlatf
9a10: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a  orm $native].... 9a20: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 9a30: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
9a40: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
9a50: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
9a60: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73  checking for Sys
9a70: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
9a80: 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20  build \"" [expr
9a90: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9aa0: 20 20 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e     {$native ? "n 9ab0: 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b ative/" : ""}] [ 9ac0: 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 expr {[string le 9ad0: 6e 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 ngth \.. 9ae0: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
9af0: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64  m] > 0 ? [append
9b00: 41 72 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f  Args $platform / 9b10: 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c ] : ""}]$year \
9b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9b30: 20 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69    / $configurati 9b40: 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a on "\"... "].... 9b50: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 9b60: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 9b70: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c E: Build the ful 9b80: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 ly qualified dir 9b90: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 ectory where the 9ba0: 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 necessary.. 9bb0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 9bc0: 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 components for S 9bd0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 9be0: 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e e should be foun 9bf0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d... 9c00: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 #.. s 9c10: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f et directory [jo 9c20: 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 inBuildDirectory 9c30: 20 24 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20$native \..
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
9c50: 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f  BuildBaseDirecto
9c60: 72 79 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66  ry] $year$platf
9c70: 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69  orm $configurati 9c80: 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 on].... 9c90: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 9ca0: 20 20 23 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 # NOTE: Do the 9cb0: 20 6e 65 63 65 73 73 61 72 79 20 66 69 6c 65 73 necessary files 9cc0: 20 65 78 69 73 74 3f 20 20 43 75 72 72 65 6e 74 exist? Current 9cd0: 6c 79 2c 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 ly, no other ste 9ce0: 70 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ps.. 9cf0: 23 20 20 20 20 20 20 20 61 72 65 20 74 61 6b 65 # are take 9d00: 6e 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 n to verify this 9d10: 20 62 75 69 6c 64 20 69 73 20 61 63 74 75 61 6c build is actual 9d20: 6c 79 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 ly viable... 9d30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9d40: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 42 75 if {[isBu 9d50: 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 ildAvailable$na
9d60: 74 69 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d  tive $directory] 9d70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 9d80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9d90: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 9da0: 20 57 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 When in "select 9db0: 22 20 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 " mode, automati 9dc0: 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 cally select the 9dd0: 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 first.. 9de0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76 # av 9df0: 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 ailable build of 9e00: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 9e10: 69 74 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 ite and then ret 9e20: 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 urn.. 9e30: 20 20 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64 # immed 9e40: 69 61 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 iately... 9e50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 9e60: 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c if {$sel
9e70: 65 63 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63  ect && [matchMac
9e80: 68 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d  hine $platform]} 9e90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9ea0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 9ec0: 54 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 TE: Manually ove 9ed0: 72 72 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 rride all the bu 9ee0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73 65 ild directory se 9ef0: 6c 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 lection.. 9f00: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 9f10: 20 72 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 related test se 9f20: 74 74 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 ttings in order 9f30: 74 6f 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 to force this bu 9f40: 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ild.. 9f50: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 9f60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 9f70: 74 65 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a te to be used... 9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9f90: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 9fa0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 9fb0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 9fc0: 41 63 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e Active [expr {$n
9fd0: 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20  ative ? \..
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
9ff0: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  AddRuntimeOption
a000: 22 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69  " : "RemoveRunti
a010: 6d 65 4f 70 74 69 6f 6e 22 7d 5d 20 20 6e 61 74  meOption"}]  nat
a020: 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ive....
a030: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
a040: 74 5f 79 65 61 72 20 24 79 65 61 72 0d 0a 20 20  t_year $year.. a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se a060: 74 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 t ::test_platfor a070: 6d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 m$platform..
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
a090: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
a0a0: 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61  ation $configura a0b0: 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tion.... a0c0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
a0d0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
a0e0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
a0f0: 20 20 20 20 20 20 20 20 20 20 22 79 65 73 2c 20            "yes,
a100: 73 65 6c 65 63 74 65 64 20 28 22 20 5b 65 78 70  selected (" [exp
a110: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61  r {$native ? "na a120: 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d tive/" : ""}] \. a130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . a140: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 [expr {[str a150: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
a160: 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70  form] > 0 ? [app
a170: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $a190: 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 platform /] : "" a1a0: 7d 5d 20 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 }]$year / $conf a1b0: 69 67 75 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d iguration ")\n"] a1c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... a1d0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. a1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } a1f0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. a200: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
a210: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20  channel yes\n..
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a230: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
a240: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
a250: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann a260: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 el no\n.. a270: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. a280: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. a290: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... a2a0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. a2b0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro a2c0: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 c checkForSQLite a2d0: 52 65 6c 65 61 73 65 73 20 7b 20 63 68 61 6e 6e Releases { chann a2e0: 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 el {select false a2f0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. a300: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch a310: 65 63 6b 20 66 6f 72 20 70 61 73 74 20 72 65 6c eck for past rel a320: 65 61 73 65 73 20 6f 66 20 53 79 73 74 65 6d 2e eases of System. a330: 44 61 74 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 Data.SQLite in t a340: 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 he directory.. a350: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont a360: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 22 53 79 ained in the "Sy a370: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a380: 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 " environment va a390: 72 69 61 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 riable, if.. a3a0: 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e # presen a3b0: 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. a3c0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi a3d0: 73 74 73 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d sts ::env(System a3e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 .Data.SQLite)] & a3f0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ a400: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
a410: 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61  :env(System.Data
a420: 2e 53 51 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74  .SQLite)] > 0} t
a430: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
a440: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
a450: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
a460: 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65  y qualified dire
a470: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
a480: 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20  necessary..
a490: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f     #       compo
a4a0: 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d  nents for System
a4b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f  .Data.SQLite sho
a4c0: 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20  uld be found...
a4d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a4e0: 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory
a4f0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
a500: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
a510: 20 20 20 20 20 20 20 20 20 20 20 24 3a 3a 65 6e             $::en a520: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 v(System.Data.SQ a530: 4c 69 74 65 29 20 5b 67 65 74 52 65 6c 65 61 73 Lite) [getReleas a540: 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 eVersion]]].... a550: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
a560: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
a570: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
a580: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
a590: 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
a5a0: 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c  SQLite release \
a5b0: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
a5c0: 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22    $directory "\" a5d0: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 ... "].... a5e0: 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 if {[isRelease a5f0: 41 76 61 69 6c 61 62 6c 65 20 24 64 69 72 65 63 Available$direc
a600: 74 6f 72 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20  tory platform]}
a610: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a620: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
a630: 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] a640: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. a650: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c set pl a660: 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a atform unknown.. a670: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... a680: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 if {$se
a690: 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 4d 61  lect && [matchMa
a6a0: 63 68 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d  chine $platform] a6b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. a6c0: 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c set ::buil a6d0: 64 5f 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 d_directory$dir
a6e0: 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20  ectory....
a6f0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha a700: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs a710: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 "yes, selected a720: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c ("$platform ")\
a730: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n"]....
a740: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
a750: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
a760: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
a770: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ a780: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 appendArgs "yes a790: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c ("$platform ")\
a7a0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
a7b0: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
a7c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
a7d0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ a7e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n.... f a7f0: 6f 72 65 61 63 68 20 70 61 74 68 20 5b 6c 73 6f oreach path [lso a800: 72 74 20 2d 64 65 63 72 65 61 73 69 6e 67 20 5b rt -decreasing [ a810: 66 69 6c 65 20 6c 69 73 74 20 24 64 69 72 65 63 file list$direc
a820: 74 6f 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20  tory *]] {..
a830: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
a840: 65 20 65 78 69 73 74 73 20 24 70 61 74 68 5d 20  e exists $path] a850: 26 26 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 && [file isdirec a860: 74 6f 72 79 20 24 70 61 74 68 5d 7d 20 74 68 65 tory$path]} the
a870: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
a880: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe a890: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. a8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . a8b0: 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin a8c0: 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat a8d0: 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 a.SQLite release a8e0: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. a8f0: 20 20 20 20 20 20 20 20 20 20 24 70 61 74 68 20$path
a900: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20  "\"... "]....
a910: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
a920: 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62  isReleaseAvailab
a930: 6c 65 20 24 70 61 74 68 20 70 6c 61 74 66 6f 72  le $path platfor a940: 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 m]} then {.. a950: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { a960: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
a970: 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20  platform] == 0}
a980: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a990: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c            set pl
a9a0: 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a  atform unknown..
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
a9d0: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74       if {$select a9e0: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e && [matchMachin a9f0: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 e$platform]} th
aa00: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
aa10: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75          set ::bu
aa20: 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24 70  ild_directory $p aa30: 61 74 68 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ath.... aa40: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
aa50: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
aa60: 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74  rgs "yes, select
aa70: 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20  ed (" $platform aa80: 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 ")\n"].... aa90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu aaa0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 rn true.. aab0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else aac0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. aad0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
aae0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
aaf0: 22 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72  "yes (" $platfor ab00: 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 m ")\n"].. ab10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. ab20: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els ab30: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. ab40: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
ab50: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20  nel no\n..
ab60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
ab70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
ab80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
ab90: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
aba0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
abb0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append abc0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. abd0: 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f "---- enviro abe0: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 5c nment variable \ abf0: 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL ac00: 69 74 65 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c ite\" is not " \ ac10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 73 .. "s ac20: 65 74 2c 20 73 6b 69 70 70 69 6e 67 20 63 68 65 et, skipping che ac30: 63 6b 20 66 6f 72 20 72 65 6c 65 61 73 65 73 2e ck for releases. ac40: 2e 2e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d ..\n"].. }. ac50: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return ac60: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... ac70: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF ac80: 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 orSQLiteLibrary ac90: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 { channel } {.. aca0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
acb0: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  nel "---- checki
acc0: 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f  ng for SQLite co
acd0: 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d  re library... ".
ace0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
acf0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
ad00: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
ad10: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
ad20: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61  blic System.Data
ad30: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
ad40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
ad50: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 7d 20   SQLiteVersion}
ad60: 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74  version] == 0} t
ad70: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
ad80: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
ad90: 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72  : Check if the r
ada0: 65 74 75 72 6e 65 64 20 76 65 72 73 69 6f 6e 20  eturned version
adb0: 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f  was null.  If so
adc0: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 0d 0a  , make it easy..
add0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
ade0: 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20  to spot...
adf0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
ae00: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
ae10: 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20  $version] == 0} ae20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ae30: 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 set version nu ae40: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ll.. }... ae50: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. ae60: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte ae70: 6d 70 74 20 74 6f 20 71 75 65 72 79 20 74 68 65 mpt to query the ae80: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 Fossil source i ae90: 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 dentifier for th aea0: 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 e SQLite.. aeb0: 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c # core l aec0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 ibrary... aed0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { aee0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. aef0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object af00: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + af10: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d NonPublic System af20: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL af30: 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 ite3 \.. af40: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 6f SQLiteSo af50: 75 72 63 65 49 64 7d 20 73 6f 75 72 63 65 49 64 urceId} sourceId af60: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. af70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. af80: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 # NOTE: We fai af90: 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 led to query the afa0: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 Fossil source i afb0: 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 dentifier... afc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. afd0: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId afe0: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. aff0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. b000: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: b010: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 Check if the re b020: 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f turned Fossil so b030: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier b040: 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 was null. If.. b050: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s b060: 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 o, make it easy b070: 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 to spot... b080: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if b090: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b0a0: 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d$sourceId] == 0}
b0b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b0c0: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
b0d0: 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d  null..        }.
b0e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b0f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
b100: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  s, the SQLite co
b110: 72 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61  re library appea
b120: 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62  rs to be availab
b130: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
b140: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
b150: 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a  raint SQLite....
b160: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c b170: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr b180: 67 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 gs "yes ("$vers
b190: 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49  ion " " $sourceI b1a0: 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 d ")\n"].. b1b0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. b1c0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b1d0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a   no\n..      }..
b1e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
b1f0: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
b200: 65 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e  eInterop { chann
b210: 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  el } {..      tp
b220: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- b230: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for b240: 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 SQLite interop a b250: 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a ssembly... ".... b260: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch b270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. b280: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke b290: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli b2a0: 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 c System.Data.SQ b2b0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a Lite.SQLite3 \.. b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e In b2d0: 74 65 72 6f 70 56 65 72 73 69 6f 6e 7d 20 76 65 teropVersion} ve b2e0: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the b2f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. b300: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: b310: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret b320: 75 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 urned version wa b330: 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 s null. If so, b340: 6d 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 make it easy.. b350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to b360: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 spot... b370: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ b380: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
b390: 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
b3a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b3b0: 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c  set version null
b3c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
b3d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b3e0: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
b3f0: 74 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46  t to query the F
b400: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65  ossil source ide
b410: 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20  ntifier for the
b420: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20  SQLite..
b430: 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62  #       core lib
b440: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23  rary...        #
b450: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
b460: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
b470: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
b480: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
b490: 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44  nPublic System.D
b4a0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
b4b0: 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e3 \..
b4c0: 20 20 20 20 20 20 49 6e 74 65 72 6f 70 53 6f 75        InteropSou
b4d0: 72 63 65 49 64 7d 20 73 6f 75 72 63 65 49 64 5d  rceId} sourceId]
b4e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b4f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
b500: 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c   # NOTE: We fail
b510: 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  ed to query the
b520: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64  Fossil source id
b530: 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20  entifier...
b540: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b550: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75    set sourceId u
b560: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  nknown..
b570: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
b580: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
b590: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74  Check if the ret
b5a0: 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75  urned Fossil sou
b5b0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77  rce identifier w
b5c0: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20  as null.  If..
b5d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f        #       so
b5e0: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74  , make it easy t
b5f0: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20  o spot...
b600: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
b610: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $b620: 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 sourceId] == 0} b630: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. b640: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e set sourceId n b650: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ull.. }.. b660: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. b670: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 # NOTE: Yes b680: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 , the SQLite int b690: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70 erop assembly ap b6a0: 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 pears to be avai b6b0: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... b6c0: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f #.. addCo b6d0: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 49 nstraint SQLiteI b6e0: 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 nterop.... b6f0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b700: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
b710: 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20  s (" $version " b720: 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e "$sourceId ")\n
b730: 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  "]..      } else
b740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
b750: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. b760: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b770: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che b780: 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e ckForSQLiteDefin b790: 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e eConstant { chan b7a0: 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 nel name } {.. b7b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
b7c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
b7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d  ..          "---
b7e0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
b7f0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
b800: 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e  e define constan
b810: 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20  t \"" $name \.. b820: 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 "\"... b830: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b "].... if { b840: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. b850: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i b860: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No b870: 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 nPublic System.D b880: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit b890: 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e3 \.. b8a0: 20 20 20 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 DefineConsta b8b0: 6e 74 73 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 nts} defineConst b8c0: 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ants] == 0} then b8d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { b8e0: 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 [lsearch -exact b8f0: 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43 -nocase$defineC
b900: 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20  onstants $name] b910: 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 != -1} then {.. b920: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. b930: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye b940: 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63 s, this define c b950: 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62 onstant was enab b960: 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e led when the man b970: 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 aged.. b980: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly b990: 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a was compiled... b9a0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. b9b0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr b9c0: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs b9d0: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e defineConstant. b9e0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi b9f0: 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 te.$name]....
ba00: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c ba10: 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 hannel yes\n.. ba20: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. ba30: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs ba40: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
ba50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
ba60: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
ba70: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel ba80: 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 error\n.. ba90: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... baa0: 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d proc getDateTim bab0: 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 eFormat {} {.. bac0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N bad0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced bae0: 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72 ure simply retur baf0: 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22 ns the "default" bb00: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 DateTime format bb10: 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 used.. # bb20: 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74 by the test bb30: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 suite... # bb40: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf bb50: 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74 o exists ::datet bb60: 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c ime_format] && \ bb70: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str bb80: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 ing length$::da
bb90: 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e  tetime_format] >
bba0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
bbb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
bbc0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
bbd0: 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72  e manually overr
bbe0: 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20  idden value for
bbf0: 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72  the DateTime for
bc00: 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  mat...        #.
bc10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
bc20: 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d  $::datetime_form bc30: 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 at.. } else bc40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. bc50: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R bc60: 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 eturn an ISO8601 bc70: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 DateTime format bc80: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 compatible with bc90: 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 SQLite,.. bca0: 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d # System bcb0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e .Data.SQLite, an bcc0: 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72 d suitable for r bcd0: 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69 ound-tripping wi bce0: 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 th the.. bcf0: 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 # DateTime bd00: 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72 class of the fr bd10: 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 amework. If thi bd20: 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67 s value is chang bd30: 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ed,.. # bd40: 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73 various tes bd50: 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 ts may fail... bd60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. bd70: 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d return "yyyy-MM bd80: 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 -dd HH:mm:ss.FFF bd90: 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d FFFFK".. }. bda0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p bdb0: 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f roc enumerableTo bdc0: 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c List { enumerabl bdd0: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 e } {.. set bde0: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a result [list].. bdf0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str be00: 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d ing length$enum
be10: 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20  erable] == 0 ||
be20: 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20 22  $enumerable eq " be30: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 null"} then {.. be40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 return$r
be50: 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a  esult..      }..
be60: 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66  ..      object f
be70: 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69 74  oreach -alias it
be80: 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b  em $enumerable { be90: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s bea0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 tring length$it
beb0: 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  em] > 0} then {.
bec0: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
bed0: 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65 6d  nd result [$item bee0: 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 ToString].. bef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. bf00: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
bf10: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
bf20: 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 68  ..    proc catch
bf30: 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72 69  AndReturn { scri
bf40: 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20 66  pt {stackTrace f
bf50: 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74 72  alse} {strict tr
bf60: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue} } {..      #
bf70: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
bf80: 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63 72  Evaluate the scr
bf90: 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20  ipt provided by
bfa0: 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 68  our caller in th
bfb0: 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20  eir context,..
bfc0: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70 74      #       capt
bfd0: 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20 72  uring both the r
bfe0: 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72 65  esult and the re
bff0: 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...
c000: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63    #..      set c
c010: 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c 65  ode [catch {uple
c020: 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20 72  vel 1 $script} r c030: 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 esult].... c040: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: c050: 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 20 Did the script c060: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 provided by our c070: 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 caller NOT raise c080: 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 an error?.. c090: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
c0a0: 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20  strict && $code c0b0: 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 74 == 0 || !$strict
c0c0: 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d 20   && $code != 1} c0d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c0e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT c0f0: 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 74 E: Success. Ret c100: 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 urn a list with c110: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 the return code c120: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e 0d and the result.. c130: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. c140: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list c150: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d$code $result]. c160: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif c170: 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 68 {$stackTrace} th
c180: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
c190: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
c1a0: 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63   Failure.  Our c
c1b0: 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66 75  aller wants a fu
c1c0: 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28  ll stack trace (
c1d0: 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d  if applicable),.
c1e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
c1f0: 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77   return a list w
c200: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63  ith the return c
c210: 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75  ode and the resu
c220: 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  lt verbatim...
c230: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c240: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63   return [list $c c250: 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 ode$result]..
c260: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
c270: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c280: 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65   # NOTE: Failure
c290: 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f  .  Our caller do
c2a0: 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66 75  es not want a fu
c2b0: 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28  ll stack trace (
c2c0: 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  if..        #
c2d0: 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29 2c      applicable),
c2e0: 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77   return a list w
c2f0: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63  ith the return c
c300: 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a  ode, the error..
c310: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
c320: 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e 74  code for the int
c330: 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74 68  erpreter, and th
c340: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message
c350: 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  up to the..
c360: 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e 74     #       point
c370: 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63 6b   where the stack
c380: 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73 74   trace should st
c390: 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  art...        #.
c3a0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 64  .        set ind
c3b0: 65 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74  ex [string first
c3c0: 20 22 20 20 20 61 74 20 22 20 24 72 65 73 75 6c   "   at " $resul c3d0: 74 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c 69 t]; # HACK: Reli c3e0: 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 20 able?.... c3f0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 return [list$c
c400: 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65  ode $::errorCode c410: 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 21 [expr {$index !
c420: 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20 20  = -1 ? \..
c430: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 72        [string tr
c440: 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65  im [string range
c450: 20 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64 65   $result 0$inde
c460: 78 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d 5d  x]] : $result}]] c470: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } c480: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f ..... proc co c490: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 mpileCSharpWith c4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t c4b0: 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f ext memory symbo c4c0: 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c 74 ls strict result c4d0: 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 sVarName errorsV c4e0: 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 arName fileNames c4f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 .. ar c500: 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d gs } {.. #. c510: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S c520: 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 6e ince we are goin c530: 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d 65 g to use this me c540: 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c thod name a lot, c550: 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 0d assign it to a. c560: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v c570: 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a ariable first... c580: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s c590: 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 65 et add Reference c5a0: 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d dAssemblies.Add. c5b0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. c5c0: 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 # NOTE: Create c5d0: 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e the base comman c5e0: 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e d to evaluate an c5f0: 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72 d add the proper c600: 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 ty settings.. c610: 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that c620: 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 are almost alway c630: 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20 s needed by our c640: 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 2e unit tests (i.e. c650: 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 the System.. c660: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 53 # and S c670: 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d ystem.Data assem c680: 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e bly references). c690: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. c6a0: 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 set command [li c6b0: 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. c6c0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74 compileCSharp$t
c6d0: 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d  ext $memory$sym
c6e0: 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 73  bols $strict res c6f0: 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20 ults errors \.. c700: 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79$add Sy
c710: 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79  stem.dll $add Sy c720: 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 stem.Data.dll$a
c730: 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73 61  dd System.Transa
c740: 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20  ctions.dll \..
c750: 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79 73          $add Sys c760: 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a tem.Xml.dll].... c770: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # c780: 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 NOTE: Add all t c790: 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 he provided file c7a0: 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 names as assemb c7b0: 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a ly references... c7c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 #.. f c7d0: 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName c7e0: 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20$fileNames {..
c7f0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f        lappend co
c800: 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42  mmand $add [getB c810: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
c820: 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
c830: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
c840: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20      # NOTE: Add
c850: 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65  the extra argume
c860: 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20  nts, if any, to
c870: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65  the command to e
c880: 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20  valuate...
c890: 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61  #..      eval la
c8a0: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61  ppend command $a c8b0: 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a rgs.... #.. c8c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c # NOTE: Al c8d0: 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 ias the compiler c8e0: 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 local results a c8f0: 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 nd errors variab c900: 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 les to the.. c910: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab c920: 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 le names provide c930: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e d by our caller. c940: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. c950: 20 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 upvar 1$result
c960: 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73  sVarName results
c970: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
c980: 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65  $errorsVarName e c990: 72 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 rrors.... # c9a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: c9b0: 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e Evaluate the con c9c0: 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c structed [compil c9d0: 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 eCSharp] command c9e0: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d and return the. c9f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 . # r ca00: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d esult... #. ca10: 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d . eval$com
ca20: 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  mand..    }.....
ca30: 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72      proc isMemor
ca40: 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  yDb { fileName }
ca50: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
ca60: 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68     # NOTE: Is th
ca70: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  e specified data
ca80: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72  base file name r
ca90: 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f  eally an in-memo
caa0: 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20  ry database?..
cab0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
cac0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65  urn [expr {$file cad0: 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 Name eq ":memory cae0: 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 :" || \.. caf0: 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 [string range cb00: 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d$fileName 0 12]
cb10: 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72   eq "file::memor
cb20: 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  y:"}]..    }....
cb30: 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c  .    proc isTabl
cb40: 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61  eInDb { name {va
cb50: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20  rName db} } {..
cb60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
cb70: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
cb80: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
cb90: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
cba0: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
cbb0: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
cbc0: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
cbd0: 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  It contains the
cbe0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
cbf0: 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20  ion handle that
cc00: 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23  will be..      #
cc10: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65         used to e
cc20: 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79  xecute the query
cc30: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
cc40: 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ne if the named
cc50: 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20  table is..
cc60: 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20  #       present
cc70: 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65  in that database
cc80: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
cc90: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa cca0: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # ccb0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: ccc0: 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d Use the sqlite_m ccd0: 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64 aster table to d cce0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 etermine if the ccf0: 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a named table is.. cd00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 # pr cd10: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 esent in the dat cd20: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. cd30: 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b . set sql { cd40: 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 .. SELECT cd50: 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73 COUNT(*) FROM s cd60: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 qlite_master WHE cd70: 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 RE type = 'table cd80: 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d ' AND name = ?;. cd90: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... cda0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT cdb0: 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 E: Return non-ze cdc0: 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ro if the named cdd0: 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74 table is present cde0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. cdf0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { ce00: 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 .. [sql e ce10: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 xecute -execute ce20: 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20 scalar$db $sql ce30: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 [list param1 Str ce40: 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d ing$name]] > 0.
ce50: 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d  .      }]..    }
ce60: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
ce70: 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d  imSql { sql } {.
ce80: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72  .      return [r
ce90: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c  egsub -all -- {\
cea0: 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
ceb0: 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20   $sql] " "].. cec0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc ced0: 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c executeSql { sql cee0: 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 {execute none} cef0: 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 {format none} {f cf00: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d ileName ""} } {. cf10: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri cf20: 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e ng length$fileN
cf30: 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ame] == 0} then
cf40: 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d  {set fileName :m
cf50: 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73  emory:}..      s
cf60: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName cf70: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20 "" "" "" "" "" cf80: 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 false false fals cf90: 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d e false db true. cfa0: 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a ... try {.. cfb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ cfc0: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list cfd0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s cfe0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 ql execute -exec cff0: 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f ute$execute -fo
d000: 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62  rmat $format$db
d010: 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d   $sql]].. } d020: 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 finally {.. d030: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 cleanupDb$f
d040: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65  ileName db false
d050: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..
d060: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
d070: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e  .    proc getCon
d080: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66  nectionFlags { f
d090: 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71  ileName flags {q
d0a0: 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
d0b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d0c0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
d0d0: 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61 73  ut which databas
d0e0: 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63  e file name or c
d0f0: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
d100: 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20   these..      #
d110: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
d120: 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75   flags will actu
d130: 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20  ally apply to.
d140: 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65  This is not nece
d150: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ssary..      #
d160: 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f       in quiet mo
d170: 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73 20  de because this
d180: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f  information is o
d190: 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67  nly used for log
d1a0: 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20  ging..      #
d1b0: 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e      and reportin
d1c0: 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20  g purposes...
d1d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
d1e0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. d1f0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st d200: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c ring length$fil
d210: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  eName] > 0} then
d220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
d230: 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65  t database [appe
d240: 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d  ndArgs "file nam
d250: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName d260: 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 \"].. } e d270: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi d280: 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 sts ::dataSource d290: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. d2a0: 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 73 ![array exis d2b0: 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d ts ::dataSource] d2c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. d2d0: 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65 set database d2e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 61 [appendArgs "da d2f0: 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a ta source \""$:
d300: 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d  :dataSource \"].
d310: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
d320: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
d330: 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f   database <unkno
d340: 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  wn>..        }..
d350: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
d360: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
d370: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29  : Show (and log)
d380: 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65   the local conne
d390: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20  ction flags and
d3a0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  the associated..
d3b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61        #       da
d3c0: 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c  ta source or fil
d3d0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23  e name...      #
d3e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu d3f0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. d400: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
d410: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
d420: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
d430: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61        "---- loca
d440: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  l connection fla
d450: 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61  gs for " $databa d460: 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 se \.. d470: 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 " are: " [expr d480: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length d490: 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c$flags] > 0 ? \
d4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 61  ..            [a
d4b0: 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c  ppendArgs \" $fl d4c0: 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 ags \"] : "<none d4d0: 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 >"}] \n].. d4e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. d4f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 # NOTE: If t d500: 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c 6f here are any glo d510: 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 75 bal (per test ru d520: 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c n) connection fl d530: 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20 ags currently.. d540: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 # set d550: 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 28 , use them now ( d560: 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 6e i.e. by combinin d570: 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 20 g them with the d580: 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a 20 ones for this.. d590: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con d5a0: 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 nection)... d5b0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i d5c0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6e nfo exists ::con d5d0: 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 26 nection_flags] & d5e0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ d5f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
d600: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
d610: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  s] > 0} then {..
d620: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
d630: 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
d640: 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 64 65  (and log) the de
d650: 74 65 63 74 65 64 20 67 6c 6f 62 61 6c 20 63 6f  tected global co
d660: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d  nnection flags..
d670: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
d680: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} d690: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. d6a0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
d6b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
d6c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
d6d0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62        "---- glob
d6e0: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  al connection fl
d6f0: 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 20  ags detected: "
d700: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
d710: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
d720: 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f  ists ::connectio
d730: 6e 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20  n_flags] && \..
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
d750: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63  ring length $::c d760: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d onnection_flags] d770: 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20 20 > 0 ? \.. d780: 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA d790: 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 rgs \"$::connec
d7a0: 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20 3a  tion_flags \"] :
d7b0: 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d   "<none>"}] \n].
d7c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
d7d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
d7e0: 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65   # NOTE: Combine
d7f0: 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20   and/or replace
d800: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
d810: 6c 61 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68  lags and then sh
d820: 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ow the..
d830: 23 20 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75  #       new valu
d840: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
d850: 20 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73         set flags
d860: 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24   [combineFlags $d870: 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 flags$::connect
d880: 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20  ion_flags]....
d890: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
d8a0: 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61   # NOTE: Show (a
d8b0: 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 20  nd log) the new
d8c0: 65 66 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 63  effective connec
d8d0: 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20  tion flags...
d8e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
d8f0: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the d900: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t d910: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
d920: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
d930: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d940: 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64    "---- combined
d950: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
d960: 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73  s for " $databas d970: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. d980: 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 " are: " [exp d990: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt d9a0: 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 h$flags] > 0 ?
d9b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
d9c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20   [appendArgs \"
d9d0: 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e  $flags \"] : "<n d9e0: 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 one>"}] \n].. d9f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. da00: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return da10: 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c$flags..    }...
da20: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 46 6c  ..    proc getFl
da30: 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20 7b 66  agsProperty { {f
da40: 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20  lags ""} {quiet
da50: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
da60: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
da70: 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 61  E: Determine wha
da80: 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 28  t the combined (
da90: 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61 6c  global and local
daa0: 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  ) connection..
dab0: 20 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67      #       flag
dac0: 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f 73  s should be, pos
dad0: 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d 0a  sibly quietly...
dae0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
daf0: 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e  et flags [getCon
db00: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20  nectionFlags ""
db10: 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a  $flags$quiet]..
db20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
db30: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20 67   # NOTE: If no g
db40: 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20 63  lobal or local c
db50: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
db60: 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2c 20  were specified,
db70: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
db80: 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65     default conne
db90: 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f 75  ction flags shou
dba0: 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68 65 72  ld be used; ther
dbb0: 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a 20  efore, return..
dbc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 20       #       an
dbd0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 6e 20  empty string in
dbe0: 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20  that case...
dbf0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
dc00: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66  string length $f dc10: 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e lags] == 0} then dc20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu dc30: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rn "".. }.. dc40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. dc50: 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 65 # NOTE: In orde dc60: 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 r to check if th dc70: 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 e default connec dc80: 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 62 tion flags are b dc90: 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 20 eing used.. dca0: 20 23 20 20 20 20 20 20 20 69 74 20 69 73 20 6e # it is n dcb0: 65 63 65 73 73 61 72 79 20 74 6f 20 61 74 74 65 ecessary to atte dcc0: 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e mpt a conversion dcd0: 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 65 to the actual e dce0: 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 numerated.. dcf0: 20 23 20 20 20 20 20 20 20 74 79 70 65 2e 20 20 # type. dd00: 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 68 Failing that, th dd10: 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73 74 20 e check against dd20: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 the default valu dd30: 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 e will be.. dd40: 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 # skipped dd50: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. dd60: 20 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c set error null dd70: 3b 20 23 20 49 47 4e 4f 52 45 44 0d 0a 20 20 20 ; # IGNORED.. dd80: 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f 62 set value [ob dd90: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 6c ject invoke Util dda0: 69 74 79 20 54 72 79 50 61 72 73 65 46 6c 61 67 ity TryParseFlag ddb0: 73 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 20 sEnum "" \.. ddc0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat ddd0: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 a.SQLite.SQLiteC dde0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 onnectionFlags " ddf0: 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74 72 "$flags null tr
de00: 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ue \..
de10: 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  error]....
de20: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
de30: 20 49 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64   If the combined
de40: 20 66 6c 61 67 73 20 73 74 72 69 6e 67 20 63 6f   flags string co
de50: 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  uld not actually
de60: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20   be converted..
de70: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
de80: 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 74  the enumerated t
de90: 79 70 65 20 69 74 20 69 73 20 74 68 65 20 64 65  ype it is the de
dea0: 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 65  fault value, the
deb0: 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 20  n just use..
dec0: 20 20 23 20 20 20 20 20 20 20 69 74 20 76 65 72    #       it ver
ded0: 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 65  batim; otherwise
dee0: 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 61 6e  , just return an
def0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20   empty string.
df00: 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23  In that..      #
df10: 20 20 20 20 20 20 20 63 61 73 65 2c 20 74 68 65         case, the
df20: 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74   default connect
df30: 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 62  ion flags will b
df40: 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 23  e used...      #
df50: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
df60: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75  ing length $valu df70: 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 e] == 0 ||$valu
df80: 65 20 6e 65 20 22 44 65 66 61 75 6c 74 22 7d 20  e ne "Default"}
df90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
dfa0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 57 41 52  #..        # WAR
dfb0: 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 74 75 72  NING: This retur
dfc0: 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 76 61  ns the string va
dfd0: 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 69  lue of the combi
dfe0: 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a  ned flags, not..
dff0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
e000: 20 20 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65     the enumerate
e010: 64 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69  d value.  This i
e020: 73 20 62 79 20 64 65 73 69 67 6e 20 61 6e 64 20  s by design and
e030: 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20  should not..
e040: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
e050: 65 20 63 68 61 6e 67 65 64 20 77 69 74 68 6f 75  e changed withou
e060: 74 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 64  t careful consid
e070: 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74  eration (e.g. it
e080: 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20   would..
e090: 23 20 20 20 20 20 20 20 20 20 20 70 72 65 76 65  #          preve
e0a0: 6e 74 20 74 68 65 20 53 51 4c 69 74 65 43 6f 6e  nt the SQLiteCon
e0b0: 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 72  nection class fr
e0c0: 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61  om allowing inva
e0d0: 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  lid..        #
e0e0: 20 20 20 20 20 20 20 20 5b 22 6d 61 67 69 63 61          ["magica
e0f0: 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e  l"] meta-flags).
e100: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
e110: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70       return [app
e120: 65 6e 64 41 72 67 73 20 22 46 6c 61 67 73 3d 22  endArgs "Flags="
e130: 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20   $flags \;].. e140: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re e150: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a turn "".. }.. e160: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 ... proc setu e170: 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 pDb {.. e180: 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 fileName {mod e190: 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 e ""} {dateTimeF e1a0: 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 ormat ""} {dateT e1b0: 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 imeKind ""} {fla e1c0: 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 gs ""}.. e1d0: 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b {extra ""} { e1e0: 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 qualify true} {d e1f0: 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 elete true} {uri e200: 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 false}.. e210: 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 {temporary e220: 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 true} {varName d e230: 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d b} {quiet false} e240: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. e250: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 # NOTE: Fir e260: 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 st, see if our c e270: 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 aller has reques e280: 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 ted an in-memory e290: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 database... e2a0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 #.. set i e2b0: 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 sMemory [isMemor e2c0: 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a yDb$fileName]..
e2d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e2e0: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77   # NOTE: For now
e2f0: 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62  , all test datab
e300: 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65  ases used by the
e310: 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20   test suite are
e320: 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20  placed..      #
e330: 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64        into the d
e340: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
e350: 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73  y.  Each databas
e360: 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69  e and related fi
e370: 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  les..      #
e380: 20 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73     used by a tes
e390: 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61  t should be clea
e3a0: 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74  ned up by that t
e3b0: 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20  est using the..
e3c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c       #       "cl
e3d0: 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75  eanupDb" procedu
e3e0: 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20  re, below...
e3f0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
e400: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75  $isMemory &&$qu
e410: 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  alify} then {..
e420: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
e430: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
e440: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
e450: 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c  tory] [file tail
e460: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20   $fileName]].. e470: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # e480: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e490: 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 By default, dele e4a0: 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 te any pre-exist e4b0: 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 ing database wit e4c0: 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d h the same file. e4d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e . # n e4e0: 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e ame if it curren e4f0: 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 tly exists... e500: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { e510: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 !$isMemory && $d e520: 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 elete && [file e e530: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
e540: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e550: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
e560: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
e570: 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65  delete any pre-e
e580: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
e590: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66   with the same f
e5a0: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ile..        #
e5b0: 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20       name...
e5c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
e5d0: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  f {[catch {file
e5e0: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName e5f0: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { e600: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. e610: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: e620: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail e630: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 ed to delete the e640: 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 file, report wh e650: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d y... #. e660: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! e670: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
e680: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
e690: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe e6a0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. e6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . e6c0: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: e6d0: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete e6e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c database file \ e6f0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a ""$fileName \..
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e710: 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74 75 70  "\" during setup
e720: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
e730: 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. e740: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. e750: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... e760: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # e770: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t e780: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var e790: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" e7a0: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context e7b0: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # e7c0: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. e7d0: 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 The handle to th e7e0: 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 e opened databas e7f0: 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 e will be stored e800: 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 there... # e810: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 e820: 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20$varName db....
e830: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
e840: 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c  NOTE: Start buil
e850: 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  ding the connect
e860: 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65  ion string.  The
e870: 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70   only required p
e880: 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
e890: 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
e8a0: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69  nection string i
e8b0: 73 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63  s the data sourc
e8c0: 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e  e, which contain
e8d0: 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  s the..      #
e8e0: 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69       database fi
e8f0: 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20  le name itself.
e900: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77   If our caller w
e910: 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52  ants to use a UR
e920: 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20  I as..      #
e930: 20 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75      the data sou
e940: 72 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c  rce, use the Ful
e950: 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  lUri connection
e960: 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20  string property
e970: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
e980: 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61    prevent the da
e990: 74 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67  ta source string
e9a0: 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67   from being mang
e9b0: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  led...      #..
e9c0: 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74       if {$uri} t e9d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s e9e0: 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 et connection {F e9f0: 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d ullUri=${fileNam
ea00: 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  e}}..      } els
ea10: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
ea20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74   connection {Dat
ea30: 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e  a Source=${fileN ea40: 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a ame}}.. }.. ea50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ea60: 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 # NOTE: Since t ea70: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 his procedure ha ea80: 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f s no special kno ea90: 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 wledge of what t eaa0: 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 he default.. eab0: 20 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e # settin eac0: 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 g is for the ToF ead0: 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 ullPath connecti eae0: 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 on string proper eaf0: 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 y, always.. eb00: 20 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 # add the eb10: 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 value we know a eb20: 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e bout to the conn eb30: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a ection string... eb40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 #.. a eb50: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection eb60: 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b {;ToFullPath=${
eb70: 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20  qualify}}....
eb80: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
eb90: 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
eba0: 72 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f  r specified a jo
ebb0: 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20  urnal mode, add
ebc0: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f  the necessary po
ebd0: 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  rtion..      #
ebe0: 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e       of the conn
ebf0: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
ec00: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
ec10: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
ec20: 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30  ength $mode] > 0 ec30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ec40: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect ec50: 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f ion {;Journal Mo ec60: 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 de=${mode}}..
ec70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
ec80: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
ec90: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65  f our caller spe
eca0: 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d  cified a DateTim
ecb0: 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68  e format, add th
ecc0: 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20  e necessary..
ecd0: 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69     #       porti
ece0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63  on of the connec
ecf0: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
ed00: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
ed10: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
ed20: 67 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72  gth $dateTimeFor ed30: 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b mat] > 0} then { ed40: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append ed50: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 connection {;Da ed60: 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 teTimeFormat=${d
ed70: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d  ateTimeFormat}}.
ed80: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
ed90: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
eda0: 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  E: If our caller
edb0: 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74   specified a Dat
edc0: 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74  eTimeKind, add t
edd0: 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72  he necessary por
ede0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
edf0: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
ee00: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
ee10: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
ee20: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
ee30: 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69  ngth $dateTimeKi ee40: 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d nd] > 0} then {. ee50: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append ee60: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 connection {;Dat ee70: 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 eTimeKind=${date
ee80: 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20  TimeKind}}..
ee90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
eea0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
eeb0: 67 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 68  gure out what th
eec0: 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f  e final flags fo
eed0: 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  r this connectio
eee0: 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20  n need to be...
eef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
ef00: 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e  t flags [getConn
ef10: 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c  ectionFlags $fil ef20: 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 71 75 eName$flags $qu ef30: 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d iet].... #. ef40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I ef50: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 f our caller spe ef60: 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 cified some SQLi ef70: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 teConnectionFlag ef80: 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 20 20 s, add the.. ef90: 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 73 73 # necess efa0: 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 ary portion of t efb0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st efc0: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... efd0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s efe0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c tring length$fl
eff0: 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ags] > 0} then {
f000: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
f010: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c   connection {;Fl
f020: 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20  ags=${flags}}.. f030: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... f040: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: f050: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s f060: 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 74 72 pecified an extr f070: 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 a payload to the f080: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 connection.. f090: 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69 6e # strin f0a0: 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 g, append it now f0b0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. f0c0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le f0d0: 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 ngth$extra] > 0
f0e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
f0f0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
f100: 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20  ion \; $extra.. f110: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... f120: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: f130: 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 Open the databa f140: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f se connection no f150: 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f w, placing the o f160: 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c paque handle val f170: 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ue.. # f180: 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 into the varia f190: 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79 ble specified by f1a0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 our caller... f1b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set f1c0: 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 db [sql open -t f1d0: 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 ype SQLite [subs f1e0: 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d t$connection]].
f1f0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f200: 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67    # NOTE: Config
f210: 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72  ure the temporar
f220: 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20  y directory for
f230: 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64  the newly opened
f240: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..
f250: 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74   #       connect
f260: 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f  ion now unless o
f270: 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64  ur caller forbid
f280: 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  s it...      #..
f290: 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70 6f        if {$tempo f2a0: 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 rary && ![info e f2b0: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 xists ::no(setTe f2c0: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory f2d0: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. f2e0: 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 sql execute f2f0: 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20$db [appendArgs
f300: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
f310: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
f320: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c 22  e_directory = \"
f330: 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 44  " [getTemporaryD
f340: 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d  irectory] \"\;].
f350: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
f360: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
f370: 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72 6e  E: Always return
f380: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
f390: 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 63  handle upon succ
f3a0: 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ess...      #..
f3b0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 0d       return $db. f3c0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p f3d0: 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 roc getDbConnect f3e0: 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 ion { {varName d f3f0: 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d b} } {.. #. f400: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R f410: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec f420: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( f430: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th f440: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our f450: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # f460: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e caller. The han f470: 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 dle to the datab f480: 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f ase previously o f490: 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 pened via the.. f4a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 # [se f4b0: 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 tupDb] procedure f4c0: 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 should be store f4d0: 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... f4e0: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 f4f0: 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
f500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
f510: 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74 75   NOTE: This retu
f520: 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 20  rns the ADO.NET
f530: 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  IDbConnection ob
f540: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 6f  ject instance fo
f550: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  r the..      #
f560: 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20 64       specified d
f570: 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 20  atabse handle.
f580: 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74 68  Since getting th
f590: 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 73  is object relies
f5a0: 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20   upon..      #
f5b0: 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 72       Eagle inter
f5c0: 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72 65  nals, great care
f5d0: 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e   should be taken
f5e0: 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f 73   to avoid dispos
f5f0: 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  ing of..      #
f600: 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65 63        this objec
f610: 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 70  t or otherwise p
f620: 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 61  utting it into a
f630: 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65 2e  n invalid state.
f640: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
f650: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
f660: 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  s db]} then {..
f670: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
f680: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
f690: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
f6a0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
f6b0: 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61 67  blic -objectflag
f6c0: 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 5c 0d 0a  s +NoDispose \..
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f6e0: 2d 61 6c 69 61 73 20 49 6e 74 65 72 70 72 65 74  -alias Interpret
f6f0: 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e  er.GetActive.con
f700: 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64  nections Item $d f710: 62 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 b} \.. f720: 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d 3d result] == f730: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. f740: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f750: 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 # NOTE: Succe f760: 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f ss, return the o f770: 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e paque object han f780: 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 dle... f790: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 #.. ret f7a0: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
f7b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
f7c0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
f7d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
f7e0: 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68  ilure, report wh
f7f0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  y...          #.
f800: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
f810: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel f820: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= f840: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai f850: 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 led to get conne f860: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 ction handle for f870: 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d database \"" \. f880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 .$
f890: 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  db "\", error: "
f8a0: 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n f8b0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. f8c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... f8d0: 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 . proc freeDb f8e0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 Connection { {va f8f0: 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e rName connection f900: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. f910: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re f920: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci f930: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e f940: 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 .g. "connection" f950: 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 ) in the.. f960: 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 # context f970: 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 of our caller. f980: 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 The opaque objec f990: 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 t handle for an f9a0: 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 ADO.NET.. # f9b0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio f9c0: 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 n previously ret f9d0: 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 urned by [getDbC f9e0: 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c onnection] shoul f9f0: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 d be.. # fa00: 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 stored there fa10: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. fa20: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
fa30: 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  me connection...
fa40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fa50: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
fa60: 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70  to remove the op
fa70: 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
fa80: 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65  le from the inte
fa90: 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23  rpreter..      #
faa0: 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69         now.  Thi
fab0: 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73  s [object dispos
fac0: 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74  e] call will not
fad0: 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73   actually dispos
fae0: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
faf0: 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69  #       underlyi
fb00: 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73  ng object becaus
fb10: 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65  e the +NoDispose
fb20: 20 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e   flag was set on
fb30: 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20   it..      #
fb40: 20 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69     during creati
fb50: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  on of the opaque
fb60: 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d   object handle..
fb70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fb80: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
fb90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20   connection] &&
fba0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61  \..          [ca
fbb0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70  tch {object disp
fbc0: 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d  ose $connection} fbd0: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. fbe0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. fbf0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s fc00: 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to fc10: 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 remove the hand fc20: 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d le, report why.. fc30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. fc40: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
fc50: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
fc60: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
fc70: 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
fc80: 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
fc90: 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  move connection
fca0: 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e  handle \"" $conn fcb0: 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ection \.. fcc0: 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 "\", error fcd0: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
fce0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
fcf0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
fd00: 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e   addDbConnection
fd10: 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76   { connection {v
fd20: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
fd30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
fd40: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
fd50: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
fd60: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
fd70: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
fd80: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
fd90: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d  #       caller..
fda0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fdb0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName fdc0: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. fdd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 # NOTE: Cr fde0: 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 eate a correctly fdf0: 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 formatted name fe00: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 for the database fe10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a connection to.. fe20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be fe30: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 added to the li fe40: 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 st managed by th fe50: 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 e Eagle interpre fe60: 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ter... #.. fe70: 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a set db [obj fe80: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag fe90: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. fea0: 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e Eagle. feb0: 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 _Components.Priv fec0: 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 ate.FormatOps Da fed0: 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 tabaseObjectName fee0: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a$connection \..
fef0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
ff00: 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65  Connection [obje
ff10: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
ff20: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive
ff30: 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20  NextId]]....
ff40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
ff50: 45 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62  E: Add the datab
ff60: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  ase connection p
ff70: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
ff80: 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73  aller to the lis
ff90: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
ffa0: 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20   of those known
ffb0: 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74  to the Eagle int
ffc0: 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
ffd0: 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74   #..      object
ffe0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
fff0: 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70  NonPublic Interp
10000 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e  reter.GetActive.
10010 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20  connections Add
10020 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62  \..          $db 10030 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20$connection..
10040 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
10050 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c   cleanupDb { fil
10060 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64  eName {varName d
10070 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65  b} {collect true
10080 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d  } {qualify true}
10090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
100a0 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74         {delete t
100b0 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
100c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
100d0 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63   Attempt to forc
100e0 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67  e all pending "g
100f0 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20  arbage" objects
10100 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c  to be collected,
10110 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
10120 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65  including SQLite
10130 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and
10140 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20  backup objects;
10150 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f  this should allo
10160 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  w..      #
10170 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying
10180 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
10190 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20   be deleted...
101a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
101b0 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20  {$collect} then 101c0 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 {.. colle 101d0 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 ctGarbage$::tes
101e0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20  t_channel..
101f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
10200 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
10210 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
10220 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
10230 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
10240 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
10250 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
10260 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c  ller.  The handl
10270 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
10280 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
10290 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20  ned via the..
102a0 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75     #       [setu
102b0 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73  pDb] procedure s
102c0 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20  hould be stored
102d0 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
102e0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $102f0 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 10300 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10310 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 OTE: Close the c 10320 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 onnection to the 10330 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 database now. 10340 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f This should allo 10350 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 w us.. # 10360 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 to delete th 10370 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 e underlying dat 10380 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 abase file... 10390 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 103a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d [info exists db] 103b0 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 && [catch {sql 103c0 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 close$db} error
103d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
103e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
103f0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
10400 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
10410 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72   the database, r
10420 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
10430 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
10440 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 10450 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10460 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10470 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 10480 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 ailed to close d 10490 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 atabase \""$db
104a0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  "\", error: " \.
104b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c  .            \n\
104c0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 104d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 104e0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 104f0 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 First, see if ou 10500 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 r caller has req 10510 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d uested an in-mem 10520 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 ory database... 10530 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 10540 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 t isMemory [isMe 10550 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 moryDb$fileName
10560 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
10570 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
10580 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20  d the full path
10590 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
105a0 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20  file name.  For
105b0 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20  now, all test..
105c0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
105d0 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20  abase files are
105e0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65  stored in the te
105f0 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
10600 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
10610 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor 10620 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
10630 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
10640 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
10650 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
10660 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
10670 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 10680 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... 10690 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 106a0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 106b0 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 the file still 106c0 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 exists... # 106d0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 .. if {!$is
106e0 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74  Memory && $delet 106f0 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 e && [file exist 10700 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
10710 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
10720 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10730 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64   Skip deleting d
10740 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 66  atabase files if
10750 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74   somebody sets t
10760 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20  he global..
10770 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61     #       varia
10780 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69  ble to prevent i
10790 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
107a0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
107b0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c  o exists ::no(cl
107c0 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74  eanupDbFile)]} t
107d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
107e0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
107f0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
10800 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74   delete the test
10810 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
10820 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ow...          #
10830 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
10840 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68  [set code [catch
10850 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f 10860 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d ileName} error]] 10870 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10880 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10890 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 108a0 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 108b0 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c o delete the fil 108c0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 108d0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 108e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 108f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
10900 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10920 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
10930 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
10940 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
10950 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 10970 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 \" during cleanu 10980 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 p, error: " \n\t 10990 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
109a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
109b0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
109c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
109d0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
109e0 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20  that we skipped
109f0 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c  deleting the fil
10a00 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e...          #.
10a10 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63  .          set c
10a20 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20  ode 0....
10a30 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 10a40 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 10a50 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 10a60 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 10a70 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c ING: skipped del 10a80 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 eting database f 10a90 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
10aa0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
10ab0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
10ac0 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20  eanup\n"]..
10ad0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
10ae0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
10af0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10b00 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e   The file does n
10b10 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73  ot exist, succes
10b20 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s!..        #..
10b30 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20         set code
10b40 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  0..      }....
10b50 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65      return $code 10b60 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 10b70 70 72 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65 proc setupDbInte 10b80 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 rruptCallback { 10b90 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d channel log } {. 10ba0 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
10bb0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74  annel "---- sett
10bc0 69 6e 67 20 75 70 20 64 65 62 75 67 67 65 72 20  ing up debugger
10bd0 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61  interrupt callba
10be0 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ck... "....
10bf0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
10c00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10c10 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
10c20 75 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64  ure the script d
10c30 65 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20  ebugger and the
10c40 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
10c50 65 74 65 72 20 61 72 65 0d 0a 20 20 20 20 20 20  eter are..
10c60 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70 20    #       setup
10c70 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
10c80 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
10c90 20 20 20 20 20 20 20 64 65 62 75 67 20 73 65 74         debug set
10ca0 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a 0d 0a  up true true....
10cb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10cc0 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20     # NOTE: Load
10cd0 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 61  the necessary pa
10ce0 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20  ckages into the
10cf0 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
10d00 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
10d10 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20  ..        debug
10d20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20  eval {..
10d30 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72    package requir
10d40 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20  e Eagle..
10d50 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69     package requi
10d60 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79  re Eagle.Library
10d70 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b  ..          pack
10d80 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
10d90 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e.Test..
10da0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
10db0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10dc0 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73 61  Copy the necessa
10dd0 72 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74  ry variables int
10de0 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69  o the isolated i
10df0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
10e00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10e10 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73  debug invoke 0 s
10e20 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  et ::test_channe
10e30 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f  l $channel; # NO 10e40 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e TE: For [tputs]. 10e50 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug 10e60 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 invoke 0 set ::t 10e70 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 est_log$log; #
10e80 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d  NOTE: For [tlog]
10e90 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  .....        #..
10ea0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10eb0 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c  Install the call
10ec0 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f 20 62  back script to b
10ed0 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74  e evaluated in t
10ee0 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20  he isolated..
10ef0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74       #       int
10f00 65 72 70 72 65 74 65 72 20 77 68 65 6e 20 74 68  erpreter when th
10f10 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  is interpreter i
10f20 73 20 69 6e 74 65 72 72 75 70 74 65 64 20 62 79  s interrupted by
10f30 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 20 20   script..
10f40 20 23 20 20 20 20 20 20 20 63 61 6e 63 65 6c 6c   #       cancell
10f50 61 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20  ation, etc...
10f60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10f70 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61  debug callback a
10f80 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d  pply {{sender e}
10f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
10fa0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
10fb0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73  E: Check if this
10fc0 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65   callback is one
10fd0 20 74 68 61 74 20 77 65 20 63 61 72 65 20 61 62   that we care ab
10fe0 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  out...
10ff0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
11000 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 5b  {"Canceled" in [
11010 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72  split [$e Interr 11020 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d 7d 20 uptType] ", "]} 11030 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11040 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 11050 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 # NOTE: Itera 11060 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 te through all d 11070 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 11080 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 ons known to the 11090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 110a0 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 6e 74 parent int 110b0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 110c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 110d0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 110e0 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 110f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11100 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f [object invo 11110 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 11120 62 6c 69 63 20 24 65 20 49 6e 74 65 72 70 72 65 blic$e Interpre
11130 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d  ter.connections]
11140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
11150 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
11160 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
11170 70 74 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79  pt to cancel any
11180 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20   SQL queries in
11190 70 72 6f 67 72 65 73 73 20 6f 6e 20 74 68 69 73  progress on this
111a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
111b0 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65  #       database
111c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...
111d0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
111f0 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72 20 56  {[catch {$pair V 11200 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 72 alue.Cancel} err 11210 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 11220 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 11230 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
11240 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
11250 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
11260 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
11270 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
11280 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66  o cancel query f
11290 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22  or connection \"
112a0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
112b0 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20           [$pair 112c0 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a Key] "\", error: 112d0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
112e0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
112f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
11300 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
11310 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20  .        }}..
11320 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30     } error] == 0
11330 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11340 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
11350 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63  interruptCallbac
11360 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20  k.sqlite3....
11370 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11380 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. 11390 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 113a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
113b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e  l [appendArgs "n
113c0 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  o, error: " \n\t
113d0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 113e0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 113f0 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 proc cleanup 11400 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 File { fileName 11410 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b {collect true} { 11420 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b force false} } { 11430 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11440 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 11450 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 to force all pe 11460 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 nding "garbage" 11470 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f objects to be co 11480 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 llected,.. 11490 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e # includin 114a0 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 g SQLite stateme 114b0 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f nts and backup o 114c0 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f bjects; this sho 114d0 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 uld allow.. 114e0 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 # the und 114f0 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 erlying database 11500 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 file to be dele 11510 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ted... #.. 11520 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 if {$collec
11530 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
11540 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67     collectGarbag
11550 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  e $::test_channe 11560 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 l.. }.... 11570 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 11580 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 11590 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 e file still exi 115a0 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sts... #.. 115b0 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 115c0 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
115d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
115e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
115f0 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69  OTE: Skip deleti
11600 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66  ng test files if
11610 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74   somebody sets t
11620 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
11630 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
11640 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69      to prevent i
11650 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
11660 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63         if {$forc 11670 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 e || ![info exis 11680 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 ts ::no(cleanupF 11690 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ile)]} then {.. 116a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 116b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 116c0 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 tempt to delete 116d0 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f the test file no 116e0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d w... #. 116f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 11700 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 set code [catch 11710 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
11720 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d  leName} error]]}
11730 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11740 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11750 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73      # NOTE: We s
11760 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f  omehow failed to
11770 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65   delete the file
11780 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20  , report why...
11790 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
117a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
117b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 117c0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 117e0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 117f0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 11800 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 est file \""$fi
11810 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
11820 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
11830 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72  ring cleanup, er
11840 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 11850 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 11860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 11870 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 11880 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 11890 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 NOTE: Show that 118a0 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 we skipped delet 118b0 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 ing the file... 118c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 118d0 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 118e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 .... tp 118f0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
11900 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
11910 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
11920 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
11930 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
11940 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24   test file \"" $11950 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. 11960 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du 11970 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d ring cleanup\n"] 11980 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 11990 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 119a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 119b0 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 # NOTE: The file 119c0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c does not exist, 119d0 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 success!.. 119e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 119f0 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 t code 0.. 11a00 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 11a10 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a n$code..    }..
11a20 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c  ...    proc coll
11a30 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 61  ectGarbage { cha
11a40 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e  nnel {millisecon
11a50 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20  ds 1000} {quiet
11a60 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
11a70 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a   if {[catch {obj
11a80 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65  ect invoke GC Ge
11a90 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c  tTotalMemory fal
11aa0 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30  se} result] == 0
11ab0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11ac0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 11ad0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 11ae0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11af0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
11b10 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65  -- memory in use
11b20 20 62 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f   by the CLR befo
11b30 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e  re collection...
11b40 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
11b50 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79      $result " by 11b60 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 11b70 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 11b80 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 11b90 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
11ba0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
11bb0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
11bc0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
11bd0 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73  et CLR memory us
11be0 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  age, error: " \.
11bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c  .            \n\
11c00 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 11c10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 11c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11c60 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 11c70 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11c80 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 TE: Repeatedly a 11c90 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 ttempt to collec 11ca0 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 t garbage until 11cb0 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d the allotted num 11cc0 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ber.. # 11cd0 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e of millisecon 11ce0 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 ds has elapsed. 11cf0 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 Always attempt 11d00 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 to collect garba 11d10 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ge.. # 11d20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e at least once. 11d30 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11d40 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 set start [cloc 11d50 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 k seconds].. 11d60 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 set stop [expr 11d70 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c {$start + ($mil 11d80 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 liseconds / 1000 11d90 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20 )}].... do 11da0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 11db0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 11dc0 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 tempt to force a 11dd0 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f full garbage co 11de0 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 llection now. R 11df0 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 eport any.. 11e00 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 # error 11e10 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 that is encount 11e20 65 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e ered if we fail. 11e30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11e40 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 11e50 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 {object invoke G 11e60 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 C GetTotalMemory 11e70 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74 true} error]} t 11e80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 11e90 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11ea0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
11ec0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
11ed0 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20  ed full garbage
11ee0 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f  collection, erro
11ef0 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
11f00 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f        \n\t $erro 11f10 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d r \n].. } 11f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 11f30 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e now [clock secon 11f40 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 69 ds].. } whi 11f50 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e le {$start <= $n 11f60 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 ow &&$now < $st 11f70 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 op}.... ### 11f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11fc0 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 ######.... 11fd0 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje 11fe0 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 ct invoke GC Get 11ff0 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 TotalMemory fals 12000 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d e} result] == 0} 12010 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12020 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
12030 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
12040 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 12050 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 12060 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 12070 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 - memory in use 12080 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72 by the CLR after 12090 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 collection... " 120a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 120b0 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65$result " byte
120c0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  s\n"]..        }
120d0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
120e0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
120f0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 12100 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 12110 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 12120 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 12130 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 CLR memory usag 12140 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 e, error: " \.. 12150 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 12160 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
12170 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
12180 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69      proc getSQLi
12190 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b  teHandleCounts {
121a0 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20   channel {quiet
121b0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
121c0 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
121d0 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  st]....      if
121e0 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  {[haveConstraint
121f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12200 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74    defineConstant
12210 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
12220 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  ite.COUNT_HANDLE
12230 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12240 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
12250 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20 63  NOTE: Add each c
12260 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
12270 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75  ount to the resu
12280 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20  lting list...
12290 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
122a0 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69  foreach name [li
122b0 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75  st connectionCou
122c0 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e  nt statementCoun
122d0 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b  t backupCount] {
122e0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
122f0 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e  value [object in
12300 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
12310 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
12320 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
12330 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
12340 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24  eNativeMethods $12350 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 name].... 12360 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
12370 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12380 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 12390 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 123a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 123b0 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c "---- critical 123c0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 handle count \" 123d0 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 "$name "\" is "
123e0 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20   $value \n].. 123f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 12400 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re 12410 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 sult$value..
12420 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
12430 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d  elseif {!$quiet} 12440 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12450 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 12460 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 TE: The actual h 12470 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 andle counts are 12480 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 not available; 12490 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d therefore, just. 124a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 124b0 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 return an empty 124c0 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 list... 124d0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 124e0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
124f0 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
12500 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62  counts unavailab
12510 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  le\n"..      }..
12520 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $12530 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c result.. }... 12540 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 .. proc shutd 12550 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e ownSQLite { chan 12560 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 nel {force false 12570 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 } {quiet false} 12580 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 12590 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 # NOTE: Make 125a0 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 sure that SQLit 125b0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 125c0 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 s completely shu 125d0 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 tdown. This.. 125e0 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 75 # is u 125f0 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 61 sed by tests tha 12600 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 t change configu 12610 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 ration options a 12620 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 nd/or those.. 12630 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that 12640 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 need to make sur 12650 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 e logging is ini 12660 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a tialized (i.e. j 12670 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 ust in case.. 12680 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S 12690 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 126a0 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a ry was initializ 126b0 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 ed in the proces 126c0 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 s prior to.. 126d0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 # the SQ 126e0 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 LiteLog class be 126f0 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 ing able to setu 12700 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 p its logging ca 12710 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 llback)... 12720 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 # Normally 12730 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e , this should on 12740 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 ly be performed 12750 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 if SQLite is loa 12760 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 ded and.. # 12770 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 ready for 12780 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 use by the test 12790 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 suite... # 127a0 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 .. if {$for
127b0 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52  ce || [isSQLiteR
127c0 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  eady]} then {..
127d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
127e0 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f    # BUGFIX: Befo
127f0 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e  re calling the n
12800 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66  ative shutdown f
12810 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75  unction, make su
12820 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20  re both..
12830 20 23 20 20 20 20 20 20 20 20 20 6f 66 20 74 68   #         of th
12840 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64  e PRAGMA related
12850 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73   directory names
12860 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20   are freed...
12870 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12880 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
12890 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e  rectories $chann 128a0 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 el true.... 128b0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f if {[catch {o 128c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 128d0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 128e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 128f0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 12900 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 12910 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 eMethods \.. 12920 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 sqli 12930 74 65 33 5f 73 68 75 74 64 6f 77 6e 7d 20 72 65 te3_shutdown} re 12940 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 12950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 12960 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
12970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
12980 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 12990 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 129b0 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f -- call sqlite3_ 129c0 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b shutdown()... ok 129d0 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d : "$result \n].
129e0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
129f0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
12a00 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$12a10 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 12a20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 12a30 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
12a40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
12a50 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
12a60 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74  all sqlite3_shut
12a70 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a  down()... error:
12a80 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result 12a90 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 12aa0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 12ab0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 12ac0 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 proc reportS 12ad0 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b QLiteResources { 12ae0 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 channel {quiet 12af0 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 false} {collect 12b00 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. 12b10 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 12b20 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75 74 70 75 : Skip all outpu 12b30 74 20 69 66 20 77 65 20 61 72 65 20 72 75 6e 6e t if we are runn 12b40 69 6e 67 20 69 6e 20 22 71 75 69 65 74 22 20 6d ing in "quiet" m 12b50 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ode... #.. 12b60 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f if {[haveCo 12b70 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 nstraint \.. 12b80 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 define 12b90 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e Constant.System. 12ba0 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 Data.SQLite.INTE 12bb0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c ROP_VIRTUAL_TABL 12bc0 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 E] && \.. 12bd0 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 [haveConstrai 12be0 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 nt \.. 12bf0 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 defineConsta 12c00 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt.System.Data.S 12c10 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45 4d 4f QLite.TRACK_MEMO 12c20 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 RY_BYTES]} then 12c30 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! 12c40 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
12c50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
12c60 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c 12c70 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e urrent memory in 12c80 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 use by SQLiteMe 12c90 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 mory... ".. 12ca0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 12cb0 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje 12cc0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 12cd0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 12cf0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12d00 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c e.SQLiteMemory \ 12d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12d20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 bytesAllocated 12d30 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 12d40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12d50 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
12d60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
12d70 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 12d80 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
12d90 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
12da0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
12db0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
12dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
12dd0 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
12de0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
12df0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 12e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 12e10 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
12e20 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 12e30 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 12e40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 12e50 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
12e60 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
12e70 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 12e80 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d nnel "---- maxim 12e90 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 um memory in use 12ea0 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 by SQLiteMemory 12eb0 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d ... ".. } 12ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 12ed0 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 [catch {object i 12ee0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 12ef0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 12f00 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 12f10 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 12f20 4c 69 74 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 LiteMemory \.. 12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 ma 12f40 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 ximumBytesAlloca 12f50 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 ted} memory] == 12f60 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 12f70 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
12f80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12f90 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 12fa0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 12fb0 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
12fc0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
12fd0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
12fe0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
12ff0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
13000 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n....          i
13010 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 13020 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 13030 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
13040 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 13050 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 13060 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 13070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 13080 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
13090 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
130a0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 130b0 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 -- current memor 130c0 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi 130d0 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d te... ".. } 130e0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 130f0 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 atch {object inv 13100 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 13110 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 13120 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 13130 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 13140 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d NativeMethods \. 13150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 . s 13160 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 qlite3_memory_us 13170 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 ed} memory] == 0 13180 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13190 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
131a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
131b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 131c0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
131d0 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
131e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
131f0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13200 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
13210 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65   NOTE: Maybe the
13220 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
13230 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61  rary is unavaila
13240 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble?..        #.
13250 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d  .        set mem
13260 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20  ory unknown....
13270 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 13280 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 13290 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
132a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
132b0 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 132c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 132d0 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 .... set re 132e0 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 sult$memory; #
132f0 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d  NOTE: Return mem
13300 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75  ory in-use to ou
13310 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20  r caller.....
13320 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 13330 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 13340 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
13350 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d  ---- maximum mem
13360 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51  ory in use by SQ
13370 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20  Lite... "..
13380 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
13390 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69  [catch {object i
133a0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
133b0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
133c0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
133d0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
133e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
133f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
13400 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f   sqlite3_memory_
13410 68 69 67 68 77 61 74 65 72 20 30 7d 20 6d 65 6d  highwater 0} mem
13420 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
13430 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
13440 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 13450 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 13460 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
13470 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62  Args $memory " b 13480 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 13490 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 134a0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 134b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 134c0 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 Maybe the SQLite 134d0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 core library is 134e0 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 unavailable?.. 134f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13500 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 13510 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 13520 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
13530 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
13540 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 13550 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
13560 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y \n]..        }
13570 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
13580 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d     if {$collect} 13590 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 135a0 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 collectGarbage 135b0 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20$channel..
135c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  }....      if {!
135d0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 135e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
135f0 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
13600 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
13610 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e  se by the CLR...
13620 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   "..      }....
13630 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
13640 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47  {object invoke G
13650 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79  C GetTotalMemory
13660 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 79 5d 20   false} memory]
13670 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
13680 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
13690 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74  g is integer -st
136a0 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74  rict $memory]} t 136b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 136c0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
136d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
136e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 136f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
13700 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d  mory " bytes\n"]
13710 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
13720 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
13730 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d  .          set m
13740 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d  emory invalid...
13750 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
13760 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 13770 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 13780 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
13790 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 137a0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 137b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 137c0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 137d0 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 137e0 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 137f0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
13800 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
13810 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 13820 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
13830 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
13840 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
13850 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 13860 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 13870 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor 13880 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 13890 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 s { channel {res 138a0 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. 138b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 138c0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 138d0 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 138e0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 138f0 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c unction is avail 13900 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a able... #.. 13910 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
13920 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
13930 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
13940 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 71   for function sq
13950 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
13960 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a  directory... "..
13970 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13980 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 61   # NOTE: This ca
13990 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ll to the sqlite
139a0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
139b0 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 75  ctory function u
139c0 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ses the..      #
139d0 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20 76         invalid v
139e0 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20 66  alue 0 for the f
139f0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 20  irst argument.
13a00 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 73  This code is des
13a10 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20  igned..      #
13a20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69 66       to check if
13a30 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e   calling the fun
13a40 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65  ction will raise
13a50 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 69   an exception (i
13a60 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  .e...      #
13a70 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 72 65     the actual re
13a80 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
13a90 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61  tion does not ma
13aa0 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 20  tter as long as
13ab0 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  no..      #
13ac0 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63    directory is c
13ad0 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 20  hanged)...
13ae0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  #..      if {[ca
13af0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
13b00 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
13b10 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
13b20 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
13b30 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
13b40 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
13b50 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
13b70 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
13b80 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c  directory 0 null
13b90 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
13ba0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13bb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c      # NOTE: Call
13bc0 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
13bd0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
13be0 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  ory function doe
13bf0 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23  s not..        #
13c00 20 20 20 20 20 20 20 63 61 75 73 65 20 61 6e 20         cause an
13c10 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65  exception; there
13c20 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65  fore, it must be
13c30 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e   available (i.e.
13c40 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
13c50 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74    even though it
13c60 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61   should return a
13c70 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20   failure return
13c80 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20  code in this..
13c90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
13ca0 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  se)...        #.
13cb0 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
13cc0 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77  traint sqlite3_w
13cd0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
13ce0 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70  ry....        tp
13cf0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes 13d00 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d \n.... #. 13d10 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 13d20 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 Does our caller 13d30 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 want to reset t 13d40 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d he directories?. 13d50 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 13d60 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 if {$reset}
13d70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13d80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
13d90 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20   NOTE: Now make
13da0 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73  sure the databas
13db0 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20  e and temporary
13dc0 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d  directories are.
13dd0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
13de0 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64     reset their d
13df0 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77  efault values, w
13e00 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e  hich should be n
13e10 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20  ull for both...
13e20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
13e30 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74   Since the sqlit
13e40 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
13e50 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20  ectory function
13e60 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20  is available,..
13e70 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
13e80 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
13e90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
13ea0 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20   for {set index
13eb0 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20  1} {$index < 3} 13ec0 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a {incr index} {.. 13ed0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 13ee0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 13f00 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 13f10 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 13f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 13f30 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 13f40 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 13f50 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 tiveMethods \.. 13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13f70 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 sqlite3_win32 13f80 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 24 _set_directory$
13f90 69 6e 64 65 78 20 6e 75 6c 6c 7d 20 5c 0d 0a 20  index null} \..
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13fb0 20 20 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d     result] == 0}
13fc0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13fd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 13fe0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 13ff0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 14000 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 14010 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f l sqlite3_win32_ 14020 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 set_directory(" 14030 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20$index \..
14040 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e              ", n
14050 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72  ull)... ok: " $r 14060 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 14070 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 14080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 14090 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
140a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
140c0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65  ---- call sqlite
140d0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
140e0 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c  ctory(" $index \ 140f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14100 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 ", null)... 14110 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
14120 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
14130 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
14140 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
14150 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
14160 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
14170 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d  $channel no\n... 14180 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14190 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does 141a0 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 our caller want 141b0 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 to reset the di 141c0 72 65 63 74 6f 72 69 65 73 3f 20 20 54 68 69 73 rectories? This 141d0 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 can only.. 141e0 20 20 20 23 20 20 20 20 20 20 20 62 65 20 70 65 # be pe 141f0 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 rformed if SQLit 14200 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 e is loaded and 14210 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 ready for use by 14220 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 the test.. 14230 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 # suite 14240 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14250 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 if {$reset
14260 20 26 26 20 5b 69 73 53 51 4c 69 74 65 52 65 61   && [isSQLiteRea
14270 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  dy]} then {..
14280 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14290 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20      # NOTE: Now
142a0 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  make sure the da
142b0 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
142c0 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73  rary directories
142d0 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20   are..
142e0 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68  #       reset th
142f0 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
14300 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64  es, which should
14310 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74   be null for bot
14320 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  h...          #
14330 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20        Since the
14340 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
14350 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63  t_directory func
14360 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20  tion does not..
14370 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
14380 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 61 76   appear to be av
14390 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65  ailable, use the
143a0 20 61 73 73 6f 63 69 61 74 65 64 20 50 52 41 47   associated PRAG
143b0 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20  MA commands..
143c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
143d0 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  nstead...
143e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
143f0 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72  foreach director
14400 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f  y [list data_sto
14410 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d  re_directory tem
14420 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
14430 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  y] {..
14440 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e    set sql [appen
14450 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20  dArgs "PRAGMA "
14460 24 64 69 72 65 63 74 6f 72 79 20 22 20 3d 20 5c  $directory " = \ 14470 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 "\";"].... 14480 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 14490 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 {executeSql$sq
144a0 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d  l} result] == 0}
144b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
144c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 144d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 144e0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 144f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 "---- exe 14500 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 cute PRAGMA "$d
14510 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b  irectory "... ok
14520 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  : \"" \..
14530 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75             $resu 14540 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 lt \"\n].. 14550 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 14570 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
14580 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
145a0 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 47  --- execute PRAG
145b0 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  MA " $directory 145c0 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d "... error: " \. 145d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 145e0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
145f0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
14600 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
14610 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
14620 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
14630 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
14640 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68 65 20  nally, show the
14650 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
14660 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
14670 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20  d temporary..
14680 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
14690 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20 63 61  tories.  This ca
146a0 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72  n only be perfor
146b0 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  med if SQLite is
146c0 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
146d0 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79         and ready
146e0 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
146f0 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
14700 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
14710 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d  [isSQLiteReady]}
14720 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14730 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f   foreach directo
14740 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74  ry [list data_st
14750 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65  ore_directory te
14760 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
14770 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ry] {..
14780 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 14790 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d [appendArgs "--- 147a0 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24 64 69 - checking "$di
147b0 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d  rectory "... "].
147c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
147d0 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73   sql [appendArgs
147e0 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 65   "PRAGMA " $dire 147f0 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 ctory \;].... 14800 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 14810 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 h {executeSql$s
14820 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c  ql scalar} resul
14830 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
14840 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
14850 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 14860 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 endArgs "ok: \"" 14870 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a$result \"\n]..
14880 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
14890 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
148a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 148b0 61 70 70 65 6e 64 41 72 67 73 20 22 65 72 72 6f appendArgs "erro 148c0 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c r: " \n\t$resul
148d0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
148e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
148f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
14900 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61 64 53  ..    proc loadS
14910 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67  QLiteTestSetting
14920 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66  s { channel {suf
14930 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74 20 66  fix ""} {quiet f
14940 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
14950 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
14960 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74  : Skip loading t
14970 68 65 20 73 65 74 74 69 6e 67 73 20 69 66 20 74  he settings if t
14980 68 65 69 72 20 75 73 61 67 65 20 68 61 73 20 62  heir usage has b
14990 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20  een disabled...
149a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
149b0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
149c0 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73 74 53  ::no(sqliteTestS
149d0 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20  ettings)]} then
149e0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
149f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f        # NOTE: Lo
14a00 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73  ad custom per-us
14a10 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f  er and/or per-ho
14a20 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
14a30 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23   now...        #
14a40 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
14a50 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c  nfo exists ::tcl
14a60 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 5d  _platform(user)]
14a70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14a80 20 20 20 20 73 65 74 20 75 73 65 72 53 65 74 74      set userSett
14a90 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69  ingsFileName [fi
14aa0 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d  le join [getComm
14ab0 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a  onDirectory] \..
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
14ad0 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e  ppendArgs settin
14ae0 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a  gs $suffix .$::
14af0 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65  tcl_platform(use
14b00 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20  r) .eagle]]....
14b10 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
14b20 6c 65 20 65 78 69 73 74 73 20 24 75 73 65 72 53  le exists $userS 14b30 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 14b40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14b50 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
14b60 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
14b70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $14b80 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 14b90 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 14ba0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 14bb0 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 oading per-user 14bc0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 test settings fi 14bd0 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 le \"" \.. 14be0 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65$use
14bf0 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  rSettingsFileNam
14c00 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20  e \"...\n]..
14c10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
14c20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
14c30 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 5b  tch {uplevel 1 [
14c40 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75 73 65  list source $use 14c50 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 14c60 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 e]} \.. 14c70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error 14c80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 14c90 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
14ca0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
14cc0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 14cd0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14cf0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 14d00 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 ailed to load pe 14d10 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73 20 r-user settings 14d20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14d40 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
14d50 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72  eName "\", error
14d60 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 14d70 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 14d80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 14d90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 14da0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 14db0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
14dc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14dd0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 14de0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 14df0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 14e00 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 14e10 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 ipped loading pe 14e20 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74 r-user test sett 14e30 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 14e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14e50 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73$userSettings
14e60 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74  FileName "\", it
14e70 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
14e80 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
14e90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
14ea0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
14eb0 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
14ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ee0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
14f00 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  .        if {[in
14f10 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f  fo exists ::tcl_
14f20 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d  platform(host)]}
14f30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14f40 20 20 20 73 65 74 20 68 6f 73 74 53 65 74 74 69     set hostSetti
14f50 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  ngsFileName [fil
14f60 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f  e join [getCommo
14f70 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20  nDirectory] \..
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70               [ap
14f90 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67  pendArgs setting
14fa0 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74  s $suffix .$::t
14fb0 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74  cl_platform(host
14fc0 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20  ) .eagle]]....
14fd0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
14fe0 65 20 65 78 69 73 74 73 20 24 68 6f 73 74 53 65  e exists $hostSe 14ff0 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d ttingsFileName]} 15000 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15010 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
15020 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15030 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 15040 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 15050 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 15060 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f "---- lo 15070 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 ading per-host t 15080 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c est settings fil 15090 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 150a0 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74$host
150b0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
150c0 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20   \"...\n]..
150d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
150e0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
150f0 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 5b 6c  ch {uplevel 1 [l
15100 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73 74  ist source $host 15110 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 15120 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ]} \.. 15130 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 5d error] 15140 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15150 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
15160 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
15180 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 15190 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 151b0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 151c0 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 iled to load per 151d0 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20 66 -host settings f 151e0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
15200 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
15210 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a  Name "\", error:
15220 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 15230 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 15240 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 15250 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 }.. } 15260 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 15270 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
15280 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15290 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 152a0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 152b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 152c0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 152d0 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 pped loading per 152e0 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 -host test setti 152f0 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15310 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46$hostSettingsF
15320 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20  ileName "\", it
15330 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e  does not exist\n
15340 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
15350 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
15360 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
15370 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
15380 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65    proc runSQLite
15390 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d 20  TestPrologue {}
153a0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
153b0 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72    # NOTE: Skip r
153c0 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f  unning our custo
153d0 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68  m prologue if th
153e0 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62  e main one has b
153f0 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  een..      #
15400 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20     skipped...
15410 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
15420 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
15430 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c  no(prologue.eagl
15440 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
15450 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15460 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65  # NOTE: Load the
15470 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72 61   "before-constra
15480 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72  ints" custom per
15490 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
154a0 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23  -host..        #
154b0 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74         test sett
154c0 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
154d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
154e0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
154f0 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
15500 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 15510 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d nnel .before]... 15520 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 15530 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 # NOTE: Dete 15540 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 20 rmine the names 15550 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 70 6c of the native pl 15560 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 atform and archi 15570 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 tecture... 15580 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 15590 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 platform [getBu 155a0 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 ildPlatform true 155b0 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 ].. set a 155c0 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 rchitecture [arc 155d0 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 hitectureForPlat 155e0 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d form$platform].
155f0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15600 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
15610 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  ow the platform
15620 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65  and architecture
15630 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 6c 6f   used to help lo
15640 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20 20 20  cate the..
15650 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65    #       native
15660 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a 20   build files...
15670 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15680 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 15690 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 156a0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 156b0 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f 72 "---- platfor 156c0 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e m for locating n 156d0 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 ative build file 156e0 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 s is \"" \.. 156f0 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
15700 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  m \"\n]....
15710 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 15720 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 15730 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 15740 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69 74 "---- archit 15750 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 61 74 ecture for locat 15760 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 ing native build 15770 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d files is \"" \. 15780 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 .$ar
15790 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c 6e 5d  chitecture \"\n]
157a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
157b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
157c0 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 63  uild a list of c
157d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
157e0 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
157f0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
15800 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69         set confi
15810 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  gFileNames [list
15820 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15830 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
15840 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d 0a  te.dll.config]..
15850 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
15860 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
15870 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61 75 78  ld a list of aux
15880 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64 20 44  iliary Managed D
15890 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61  ebugging Assista
158a0 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20 20 20  nts (MDA)..
158b0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69     #       confi
158c0 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74  guration files t
158d0 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a  hat we handle...
158e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
158f0 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66 69 67     set mdaConfig
15900 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20  FileNames [list
15910 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  \..            I
15920 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61  nstaller.exe.mda
15930 2e 63 6f 6e 66 69 67 20 74 65 73 74 2e 65 78 65  .config test.exe
15940 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20  .mda.config \..
15950 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 6c             testl
15960 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  inq.exe.mda.conf
15970 69 67 20 74 65 73 74 65 66 36 2e 65 78 65 2e 6d  ig testef6.exe.m
15980 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20  da.config]....
15990 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
159a0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
159b0 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74 65 72  he list of exter
159c0 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 74 20 77  nal files that w
159d0 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20  e handle.  Some
159e0 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  of..        #
159f0 20 20 20 20 74 68 65 73 65 20 66 69 6c 65 73 20      these files
15a00 6d 61 79 20 62 65 20 6e 61 74 69 76 65 20 61 6e  may be native an
15a10 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 61 73 73  d/or managed ass
15a20 65 6d 62 6c 69 65 73 20 74 68 61 74 20 61 72 65  emblies that are
15a30 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
15a40 20 20 72 65 71 75 69 72 65 64 20 74 6f 20 70 65    required to pe
15a50 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 20 74 65  rform various te
15a60 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  sts...        #.
15a70 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 78 74  .        set ext
15a80 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b  ernalFileNames [
15a90 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
15aa0 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45      [file join E
15ab0 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c  ntityFramework l
15ac0 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b  ib [string map [
15ad0 6c 69 73 74 20 46 78 20 22 22 5d 20 5b 73 74 72  list Fx ""] [str
15ae0 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ing \..
15af0 20 20 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74     map [list net
15b00 46 78 34 35 31 20 6e 65 74 46 78 34 35 5d 20 5b  Fx451 netFx45] [
15b10 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d  getBuildNetFx]]]
15b20 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b   EntityFramework
15b30 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .dll]]....
15b40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
15b50 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c  OTE: Build the l
15b60 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73  ist of native as
15b70 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61  sembly files tha
15b80 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 54 68  t we handle.  Th
15b90 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
15ba0 20 20 20 72 65 61 73 6f 6e 20 74 68 65 20 22 53     reason the "S
15bb0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
15bc0 65 2e 64 6c 6c 22 20 66 69 6c 65 20 69 73 20 69  e.dll" file is i
15bd0 6e 63 6c 75 64 65 64 20 68 65 72 65 20 69 73 0d  ncluded here is.
15be0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
15bf0 20 62 65 63 61 75 73 65 20 69 74 20 63 6f 75 6c   because it coul
15c00 64 20 62 65 20 74 68 65 20 6d 69 78 65 64 2d 6d  d be the mixed-m
15c10 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
15c20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15c30 20 20 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65    set nativeFile
15c40 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  Names [list \..
15c50 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
15c60 65 33 2e 64 6c 6c 20 53 51 4c 69 74 65 2e 49 6e  e3.dll SQLite.In
15c70 74 65 72 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d  terop.dll System
15c80 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
15c90 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
15ca0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
15cb0 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f  Build the list o
15cc0 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  f managed assemb
15cd0 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  ly files that we
15ce0 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
15cf0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
15d00 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65   managedFileName
15d10 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  s [list \..
15d20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
15d30 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79  ta.SQLite.dll Sy
15d40 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15d50 2e 4c 69 6e 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20  .Linq.dll \..
15d60 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
15d70 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
15d80 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dll]....
15d90 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
15da0 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20 74 65  E: Remove any te
15db0 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  st constraints t
15dc0 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
15dd0 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d 0a   native and/or..
15de0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
15df0 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
15e00 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
15e10 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f 72  andle unless for
15e20 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20 20  bidden from..
15e30 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 69       #       doi
15e40 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20  ng so...
15e50 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
15e60 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
15e70 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65 43 6f  o(sqliteRemoveCo
15e80 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65  nstraints)]} the
15e90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
15ea0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
15eb0 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  $configFileNames 15ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15ed0 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 15ee0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 15ef0 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 e_$fileName]..
15f00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
15f10 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
15f20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e  fileName $mdaCon 15f30 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 15f40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f remo 15f50 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 15f60 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 pendArgs file_$
15f70 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
15f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
15f90 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
15fa0 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69  Name $externalFi 15fb0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 15fc0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 15fd0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 15fe0 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 20 rgs file_ [file 15ff0 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
16000 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
16010 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
16020 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 16030 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 16040 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f remo 16050 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 16060 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 pendArgs file_$
16070 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
16080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
16090 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
160a0 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c  Name $managedFil 160b0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 160c0 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 160d0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 160e0 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
160f0 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
16100 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
16110 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
16120 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61    # NOTE: Skip a
16130 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ll System.Data.S
16140 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69  QLite related fi
16150 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c  le handling (del
16160 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  eting,..
16170 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c  #       copying,
16180 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66   and loading) if
16190 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
161a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
161b0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
161c0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69  ts ::no(sqliteFi
161d0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
161e0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
161f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
16200 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c  ip trying to del
16210 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66  ete any files if
16220 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
16230 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16240 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
16250 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
16260 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  teSqliteFiles)]}
16270 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16280 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
16290 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
162a0 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69  teSqliteConfigFi
162b0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
162d0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63  each fileName $c 162e0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 162f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16300 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 tryDeleteBinar 16310 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d yFile$fileName.
16320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
16330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
16350 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
16360 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
16370 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29  teExternalFiles)
16380 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
16390 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
163a0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f   fileName $mdaCo 163b0 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 163c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 163d0 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 tryDeleteBuildF 163e0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 ile$fileName..
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16410 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
16420 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61   $externalFileNa 16430 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 16440 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 16450 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 BinaryFile$file
16460 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
16470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
16480 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
16490 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
164a0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
164b0 65 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c  eSqliteNativeFil
164c0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
164d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
164e0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
164f0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49  no(deleteSqliteI
16500 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20  mplicitFiles)]}
16510 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16520 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
16530 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65  fileName $native 16540 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 16560 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 16570 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
16580 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
165a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
165b0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
165c0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
165d0 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
165e0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16600 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
16610 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
16620 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29  tePlatformFiles)
16630 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
16640 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
16650 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 16660 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 16670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 16680 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 16690 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c eName$nativeFil
166a0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
166b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
166c0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
166d0 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
166e0 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
166f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
16700 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16720 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
16730 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
16740 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69  teArchitectureFi
16750 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16770 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $16780 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 architecture] > 16790 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 167b0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e each fileName$n
167c0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b  ativeFileNames {
167d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
167e0 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41        tryDeleteA
167f0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 16800 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d e$architecture.
16810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16820 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
16830 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
16840 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
16850 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16860 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
16870 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
16880 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e 61 67 65  leteSqliteManage
16890 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  dFiles)]} then {
168a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
168b0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
168c0 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d   $managedFileNam 168d0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 168e0 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 tryDeleteA 168f0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
16900 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
16910 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
16920 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
16930 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
16940 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
16950 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 22   Check for the "
16960 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75 6e 74  autoSelect" runt
16970 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20  ime option.  If
16980 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20  present,..
16990 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74 65      #       atte
169a0 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  mpt to automatic
169b0 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20  ally select the
169c0 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65 0d  first available.
169d0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
169e0 20 20 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65     build (or "re
169f0 6c 65 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74  lease") of SQLit
16a00 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74  e and System.Dat
16a10 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20  a.SQLite..
16a20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20      #       for
16a30 75 73 65 20 77 69 74 68 20 74 68 65 20 74 65 73  use with the tes
16a40 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...
16a50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
16a60 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65   if {[hasRuntime
16a70 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63  Option autoSelec
16a80 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  t]} then {..
16a90 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68          if {![ch
16aa0 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c  eckForSQLiteBuil
16ab0 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ds $::test_chann 16ac0 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b el true]} then { 16ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16ae0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 checkForSQLiteRe 16af0 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 leases$::test_c
16b00 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20  hannel true..
16b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
16b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16b30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16b40 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74    # NOTE: Skip t
16b50 72 79 69 6e 67 20 74 6f 20 76 65 72 69 66 79 20  rying to verify
16b60 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
16b70 6f 72 79 20 69 66 20 69 6e 73 74 72 75 63 74 65  ory if instructe
16b80 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  d;..          #
16b90 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c        otherwise,
16ba0 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61 63   make sure it ac
16bb0 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20 6f 72  tually exists or
16bc0 20 68 61 6c 74 20 74 68 65 20 65 6e 74 69 72 65   halt the entire
16bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
16be0 20 20 20 20 74 65 73 74 69 6e 67 20 70 72 6f 63      testing proc
16bf0 65 73 73 20 69 66 20 69 74 20 64 6f 65 73 20 6e  ess if it does n
16c00 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20  ot exist...
16c10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16c20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
16c30 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42  sts ::no(verifyB
16c40 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29 5d 7d  uildDirectory)]}
16c50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16c60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16c70 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 20 74      # NOTE: At t
16c80 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 20 62  his point, the b
16c90 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 4d  uild directory M
16ca0 55 53 54 20 65 78 69 73 74 20 61 73 20 61 0d 0a  UST exist as a..
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
16cc0 20 20 20 20 76 61 6c 69 64 20 64 69 72 65 63 74      valid direct
16cd0 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65 73 74  ory for the test
16ce0 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f 20 63  ing process to c
16cf0 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20  ontinue...
16d00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16d10 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f       set directo
16d20 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65  ry [getBuildDire
16d30 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20  ctory]....
16d40 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
16d50 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f   exists $directo 16d60 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 ry] || \.. 16d70 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 ![file 16d80 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 isdirectory$di
16d90 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
16da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16db0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
16dc0 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72   # NOTE: Just pr
16dd0 69 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20  ior to actually
16de0 68 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74  halting the test
16df0 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20  ing process,..
16e00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
16e10 20 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72      add an error
16e20 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67   to the test log
16e30 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
16e40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16e50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 16e60 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 16e70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 16e90 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 --- could not ve 16ea0 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 rify build direc 16eb0 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 tory \""$direct
16ec0 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
16ed0 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c           "\", al
16ee0 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
16ef0 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  \n"]....
16f00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16f10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
16f20 61 69 73 69 6e 67 20 61 20 73 63 72 69 70 74 20  aising a script
16f30 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20  error from this
16f40 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c  point should hal
16f50 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..
16f60 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73   #       the tes
16f70 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20  ting process...
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
16fa0 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ror [appendArgs
16fb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16fc0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not
16fd0 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72  verify build dir
16fe0 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65  ectory \"" $dire 16ff0 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 ctory \.. 17000 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 17010 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 all testing halt 17020 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ed"].. 17030 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 17040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 17050 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 17060 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 17070 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 o copy any files 17080 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d if instructed.. 17090 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 170a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 170b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 170c0 6f 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d opySqliteFiles)] 170d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 170e0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 170f0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 17100 79 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c ySqliteConfigFil 17110 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 17120 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 17130 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f ach fileName$co
17140 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  nfigFileNames {.
17150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
17160 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c   tryCopyBuildFil
17170 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  e $fileName.. 17180 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 17190 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 171a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 171b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 171c0 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 78 74 65 o(copySqliteExte 171d0 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 rnalFiles)]} the 171e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 171f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 17200 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 # NOTE: Copy 17210 20 74 68 65 20 4d 61 6e 61 67 65 64 20 44 65 62 the Managed Deb 17220 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 ugging Assistant 17230 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 s (MDA) configur 17240 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 ation.. 17250 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c # fil 17260 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c 65 20 e for the Eagle 17270 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 shell to the bui 17280 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 ld output direct 17290 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ory,.. 172a0 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 6c # whil 172b0 65 20 75 73 69 6e 67 20 65 61 63 68 20 6f 66 20 e using each of 172c0 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 the names of the 172d0 20 76 61 72 69 6f 75 73 20 6c 65 67 61 63 79 20 various legacy 172e0 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 test.. 172f0 20 20 20 20 23 20 20 20 20 20 20 20 65 78 65 63 # exec 17300 75 74 61 62 6c 65 73 2e 20 20 54 68 69 73 20 77 utables. This w 17310 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 ill help to make 17320 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 sure that all t 17330 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. 17340 20 20 23 20 20 20 20 20 20 20 6c 65 67 61 63 79 # legacy 17350 20 74 65 73 74 73 20 72 75 6e 20 77 69 74 68 20 tests run with 17360 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 exactly the same 17370 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d set of Managed. 17380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 17390 20 20 20 20 20 20 20 44 65 62 75 67 67 69 6e 67 Debugging 173a0 20 41 73 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 Assistants conf 173b0 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 igured... 173c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 173d0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 173e0 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e fileName$mdaCon
173f0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17410 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c  tryCopyBinaryFil
17420 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65  e EagleShell.exe
17430 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 22 22 20 24  .mda.config "" $17440 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 17450 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 17460 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 17470 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 ch fileName$ext
17480 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b  ernalFileNames {
17490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
174a0 20 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61    tryCopyExterna
174b0 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d  lFile $fileName. 174c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 174d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 174e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 174f0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 17500 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 17510 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 NativeFiles)]} t 17520 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 17530 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 17540 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 17550 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 SqliteImplicitFi 17560 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 17580 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 17590 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
175a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
175b0 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
175c0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d  embly $fileName. 175d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 175e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 175f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 17600 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 17610 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 17620 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 SqliteNonImplici 17630 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b tFiles)]} then { 17640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17650 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 17660 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 17670 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 itePlatformFiles 17680 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 17690 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 176a0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
176b0 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
176c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
176d0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
176e0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69  leName $nativeFi 176f0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 17710 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 ryCopyAssembly$
17720 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo 17730 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm.. 17740 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 17750 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 17770 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 17780 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 ::no(copySqliteA 17790 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 rchitectureFiles 177a0 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 177c0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 ring length$arc
177d0 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20  hitecture] > 0}
177e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
177f0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
17800 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69  h fileName $nati 17810 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 veFileNames {.. 17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17830 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 17840 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 ly$fileName $ar 17850 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 chitecture.. 17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 17870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 17880 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 17890 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 178a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 178b0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 178c0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 178d0 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 iteManagedFiles) 178e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 178f0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 17900 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 fileName$manag
17910 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  edFileNames {..
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17930 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24  ryCopyAssembly $17940 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 17950 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17960 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 17970 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 17980 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 17990 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 179a0 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20 ing to load any 179b0 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 files if instruc 179c0 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ted... 179d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 179e0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 179f0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 :no(loadSqliteFi 17a00 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 17a10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 17a20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 17a30 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c o(loadSqliteImpl 17a40 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 icitFiles)]} the 17a50 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 17a60 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 17a70 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 17a80 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 QLite.dll.. 17a90 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 tryLoad 17aa0 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 17ab0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 17ac0 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 17ad0 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d tryLoadAssem 17ae0 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e bly System.Data. 17af0 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a SQLite.EF6.dll.. 17b00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 17b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 17b20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 17b30 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f :no(loadSqliteNo 17b40 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d nImplicitFiles)] 17b50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17b60 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 17b70 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 17b80 6f 61 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 oadSqlitePlatfor 17b90 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 mFiles)] && \.. 17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17bb0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 17bc0 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20$platform] > 0}
17bd0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17be0 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41          tryLoadA
17bf0 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44  ssembly System.D
17c00 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24  ata.SQLite.dll $17c10 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. 17c20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 17c30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 17c40 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 17c50 6f 28 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 o(loadSqliteArch 17c60 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 itectureFiles)] 17c70 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 17c80 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 17c90 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 length$architec
17ca0 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ture] > 0} then
17cb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
17cc0 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62     tryLoadAssemb
17cd0 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
17ce0 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69  QLite.dll $archi 17cf0 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 tecture.. 17d00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 17d10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 17d20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 17d30 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 17d40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 17d50 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
17d60 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
17d70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
17d80 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
17d90 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 33  ion of \"sqlite3
17da0 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20  .dll\"... " \..
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
17dc0 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42  le version [getB
17dd0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71  inaryFileName sq
17de0 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  lite3.dll]] \n].
17df0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
17e00 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
17e10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $17e20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 17e30 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 17e40 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 17e50 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 17e60 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 f \"SQLite.Inter 17e70 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d op.dll\"... " \. 17e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 17e90 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 file version [ge 17ea0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 17eb0 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 SQLite.Interop.d 17ec0 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ll]] \n].. 17ed0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 17ee0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 17ef0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
17f00 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
17f10 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
17f20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
17f30 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
17f40 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
17f50 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20  dll\"... " \..
17f60 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
17f70 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
17f80 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
17f90 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
17fa0 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  dll]] \n]..
17fb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
17fc0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
17fd0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 17fe0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 17ff0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 18000 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 18010 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 version of \"Sy 18020 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 18030 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 .Linq.dll\"... " 18040 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18050 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 [file version 18060 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 18070 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 me System.Data.S 18080 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d QLite.Linq.dll]] 18090 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 180a0 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 180b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 180c0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
180d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
180e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
180f0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
18100 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e  ion of \"System.
18110 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
18120 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20  dll\"... " \..
18130 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
18140 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
18150 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
18160 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
18170 45 46 36 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20  EF6.dll]] \n]..
18180 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
18190 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
181a0 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform 181b0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 181c0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 181d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 181e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
181f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
18200 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18210 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
18220 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c  rsion of \"" $pl 18230 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 atform \.. 18240 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c 69 "/sqli 18250 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b te3.dll\"... " [ 18260 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18280 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 18290 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 me sqlite3.dll$
182a0 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a  platform]] \n]..
182b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
182c0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
182d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
182e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 182f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 18300 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18310 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 18320 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c rsion of \""$pl
18330 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20  atform \..
18340 20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69            "/SQLi
18350 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22  te.Interop.dll\"
18360 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73  ... " [file vers
18370 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
18380 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72         [getBinar
18390 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65  yFileName SQLite
183a0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c  .Interop.dll $pl 183b0 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 atform]] \n].. 183c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 183d0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 183e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 183f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
18400 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
18410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18420 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
18430 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74  ion of \"" $plat 18440 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 form \.. 18450 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d "/System 18460 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 18470 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 \"... " [file ve 18480 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 18490 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e [getBin 184a0 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 aryFileName Syst 184b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 184c0 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c ll$platform]] \
184d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
184e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
184f0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
18500 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 18510 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 18520 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 18530 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 18540 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
18550 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
18560 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
18570 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
18580 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
18590 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65  "" $architecture 185a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 185b0 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c "/sqlite3.dl 185c0 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 l\"... " [file v 185d0 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ersion \.. 185e0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 [getBi 185f0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c naryFileName sql 18600 69 74 65 33 2e 64 6c 6c 20 24 61 72 63 68 69 74 ite3.dll$archit
18610 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20  ecture]] \n]..
18620 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
18630 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
18640 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
18650 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 18660 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 18670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 18680 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 18690 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 ion of \""$arch
186a0 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20  itecture \..
186b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 51              "/SQ
186c0 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
186d0 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65  \"... " [file ve
186e0 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  rsion \..
186f0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e           [getBin
18700 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69  aryFileName SQLi
18710 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24  te.Interop.dll $18720 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c architecture]] \ 18730 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 18740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 ... cat 18750 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 18760 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
18770 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
18780 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
18790 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
187a0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
187b0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c   $architecture \ 187c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 187d0 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e "/System.Data. 187e0 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 187f0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 " [file version 18800 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18810 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c [getBinaryFil 18820 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 18830 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 a.SQLite.dll$ar
18840 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d  chitecture]] \n]
18850 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
18860 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
18870 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
18880 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the
18890 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20  list of managed
188a0 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74  assemblies for t
188b0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
188c0 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ss..        #
188d0 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f      and report o
188e0 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  n the System.Dat
188f0 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64  a.SQLite related
18900 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20   ones...
18910 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61  #..        set a
18920 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63  ssemblies [objec
18930 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61  t invoke AppDoma
18940 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e  in.CurrentDomain
18950 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d   GetAssemblies].
18960 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  ...        objec
18970 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62  t foreach assemb
18980 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b  ly $assemblies { 18990 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 189a0 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b [string match \{ 189b0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 189c0 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 te*$assembly]}
189d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
189e0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 189f0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 18a00 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 18a10 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 18a20 6f 75 6e 64 20 6c 6f 61 64 65 64 20 61 73 73 65 ound loaded asse 18a30 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c mbly: "$assembl
18a40 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  y \n]..
18a50 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
18a60 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
18a70 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
18a80 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 18a90 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 18aa0 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 "---- define 18ab0 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 constants for \" 18ac0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 18ad0 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 te\"... ".... 18ae0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 18af0 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke 18b00 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 18b10 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 18b20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 18b30 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 18b40 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e e3 DefineConstan 18b50 74 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ts} \.. 18b60 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 defineC 18b70 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 onstants] == 0} 18b80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 18b90 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
18ba0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
18bb0 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73  dArgs [formatLis
18bc0 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20  t [lsort \..
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65 66              $def 18be0 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e ineConstants] <n 18bf0 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 one>] \n].. 18c00 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 18c10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 18c20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
18c30 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20   unknown\n..
18c40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
18c50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
18c60 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
18c70 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 18c80 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 18c90 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f "---- so 18ca0 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 urce version of 18cb0 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 18cc0 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d Lite.dll\"... ". 18cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 18ce0 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object 18cf0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 18d00 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 18d20 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 18d30 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 18d40 6e 20 50 72 6f 76 69 64 65 72 56 65 72 73 69 6f n ProviderVersio 18d50 6e 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 n} \.. 18d60 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 5d version] 18d70 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 18d80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 18d90 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
18da0 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
18db0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
18dc0 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20      set version
18dd0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  null..
18de0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
18df0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 18e00 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 18e10 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d gs$version \n].
18e20 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
18e30 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
18e40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 18e50 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 18e60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 18e70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 18e80 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 18e90 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
18ea0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
18ec0 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b  --- source check
18ed0 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e  out of \"System.
18ee0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c  Data.SQLite.dll\
18ef0 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  "... "....
18f00 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
18f10 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
18f20 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
18f30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18f40 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
18f50 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
18f60 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65  nnection Provide
18f70 72 53 6f 75 72 63 65 49 64 7d 20 5c 0d 0a 20 20  rSourceId} \..
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18f90 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
18fa0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
18fb0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
18fc0 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64  length $sourceId 18fd0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 18ff0 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d t sourceId null. 19000 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 19010 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 19020 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
19030 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73  l [appendArgs $s 19040 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 ourceId \n].. 19050 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 19060 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 19070 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
19080 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
19090 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
190a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
190b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
190c0 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61  E: Check the ava
190d0 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61  ilable builds (a
190e0 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f  nd "releases") o
190f0 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20  f SQLite and..
19100 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79        #       Sy
19110 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
19120 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
19130 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
19140 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65  LiteBuilds $::te 19150 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 st_channel.. 19160 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 19170 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 teReleases$::te
19180 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
19190 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
191a0 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65   # NOTE: Now, we
191b0 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66   need to know if
191c0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
191d0 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69   library is avai
191e0 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23  lable..        #
191f0 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63         (i.e. bec
19200 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64  ause the managed
19210 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  -only System.Dat
19220 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c  a.SQLite assembl
19230 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23  y can..        #
19240 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68         load with
19250 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c  out it; however,
19260 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e   it cannot do an
19270 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69  ything useful wi
19280 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23  thout..        #
19290 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20         it).  If
192a0 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65  we are using the
192b0 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
192c0 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65  mbly and we alre
192d0 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ady..        #
192e0 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61       found it (a
192f0 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75  bove), this shou
19300 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65  ld always succee
19310 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
19320 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
19330 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a  QLiteLibrary $:: 19340 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 19350 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19360 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 19370 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 if the SQLite i 19380 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 19390 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 is available... 193a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 193b0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 193c0 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f Interop$::test_
193d0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
193e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
193f0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20  NOTE: Check the
19400 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database
19410 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69  and temporary di
19420 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20  rectories...
19430 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
19440 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72  heckForSQLiteDir
19450 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74  ectories $::test 19460 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 19470 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 19480 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 19490 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 o determine if v 194a0 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 arious compile-t 194b0 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 ime options need 194c0 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 ed for.. 194d0 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e # test con 194e0 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e straints were en 194f0 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 abled for the ma 19500 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 naged assembly. 19510 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 There.. 19520 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 # are some 19530 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 compile-time op 19540 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 tions that must 19550 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 also have been e 19560 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 nabled.. 19570 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 # for the 19580 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 interop assembly 19590 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 in order to be 195a0 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 effective. For 195b0 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 those.. # 195c0 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 options, 195d0 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d it will be assum 195e0 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65 ed that it was e 195f0 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 nabled for the i 19600 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 nterop.. 19610 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 19620 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c if it was enabl 19630 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 ed for the manag 19640 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 ed assembly... 19650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19660 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 foreach defineC 19670 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d onstant [list \. 19680 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45 . CHE 19690 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 CK_STATE COUNT_H 196a0 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 ANDLE DEBUG INTE 196b0 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f ROP_CODEC INTERO 196c0 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 P_DEBUG \.. 196d0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 INTEROP_E 196e0 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f XTENSION_FUNCTIO 196f0 4e 53 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 NS INTEROP_LEGAC 19700 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f Y_CLOSE INTEROP_ 19710 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 LOG \.. 19720 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f INTEROP_TEST_ 19730 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f EXTENSION INTERO 19740 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 P_VIRTUAL_TABLE 19750 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d NET_20 NET_35 \. 19760 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 . NET 19770 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 _40 NET_45 NET_4 19780 35 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 51 NET_COMPACT_2 19790 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 0 PLATFORM_COMPA 197a0 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 CTFRAMEWORK \.. 197b0 20 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f PRELO 197c0 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 AD_NATIVE_LIBRAR 197d0 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53 Y RETARGETABLE S 197e0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c QLITE_STANDARD \ 197f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48 .. TH 19800 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 ROW_ON_DISPOSED 19810 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e TRACE TRACE_CONN 19820 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e ECTION TRACE_HAN 19830 44 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 DLE \.. 19840 20 20 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 TRACE_PRELOAD 19850 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52 TRACE_SHARED TR 19860 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 52 ACE_STATEMENT TR 19870 41 43 45 5f 57 41 52 4e 49 4e 47 20 5c 0d 0a 20 ACE_WARNING \.. 19880 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 4b TRACK 19890 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 _MEMORY_BYTES US 198a0 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f E_ENTITY_FRAMEWO 198b0 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 52 4f 50 RK_6 USE_INTEROP 198c0 5f 44 4c 4c 20 5c 0d 0a 20 20 20 20 20 20 20 20 _DLL \.. 198d0 20 20 20 20 55 53 45 5f 50 52 45 50 41 52 45 5f USE_PREPARE_ 198e0 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 V2 WINDOWS] {.. 198f0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 19900 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 19910 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 eck if the compi 19920 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 le-time option i 19930 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 s listed in the 19940 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 list of.. 19950 20 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69 # "defi 19960 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 ne constants" ke 19970 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 pt track of by t 19980 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d he managed assem 19990 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 bly... 199a0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 #.. che 199b0 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e ckForSQLiteDefin 199c0 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 eConstant$::tes
199d0 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e  t_channel $defin 199e0 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 eConstant.. 199f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 19a00 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 19a10 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 E: Check the cur 19a20 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e rent build year. 19a30 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 Basically, thi 19a40 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 s indicates.. 19a50 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 # whi 19a60 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 ch version of MS 19a70 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 Build and/or Vis 19a80 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75 ual Studio was u 19a90 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 sed to.. 19aa0 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 # compile 19ab0 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e the assembly bin 19ac0 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 aries under test 19ad0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 19ae0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
19af0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
19b00 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
19b10 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
19b20 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
19b30 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22   build year... "
19b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
19b50 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65  year [getBuildYe
19b60 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64  ar]..        add
19b70 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
19b80 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72  ndArgs buildYear
19b90 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20  . $year].. 19ba0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
19bb0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
19bc0 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c  rgs \" $year \"\ 19bd0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. 19be0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 19bf0 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 Check the curre 19c00 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 nt build configu 19c10 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 ration. This sh 19c20 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 ould normally.. 19c30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 19c40 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 e either "Debug" 19c50 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a or "Release"... 19c60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19c70 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
19c80 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
19c90 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
19ca0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
19cb0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
19cc0 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ild configuratio
19cd0 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  n... "....
19ce0 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74    set configurat
19cf0 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e  ion [getBuildCon
19d00 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20  figuration]..
19d10 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
19d20 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62  nt [appendArgs b
19d30 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
19d40 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  n. $configuratio 19d50 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 n].. tput 19d60 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
19d70 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  l [appendArgs \"
19d80 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   $configuration 19d90 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 \"\n].... 19da0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 19db0 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 TE: Try to setup 19dc0 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 an interrupt ca 19dd0 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 llback using the 19de0 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 script debugger 19df0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 19e00 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 that will canc 19e10 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 el all SQL queri 19e20 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 es in progress f 19e30 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d or all database. 19e40 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 19e50 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f connections kno 19e60 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 wn to this inter 19e70 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 preter... 19e80 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 19e90 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 19ea0 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 no(sqliteInterru 19eb0 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 ptCallback)]} th 19ec0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19ed0 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 setupDbInterrupt 19ee0 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 Callback$::test
19ef0 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74  _channel $::test 19f00 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d _log.. }. 19f10 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 19f20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 19f30 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 eck for the nati 19f40 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f ve runtime optio 19f50 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d n, which would m 19f60 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 ean we are.. 19f70 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e # usin 19f80 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 g the mixed-mode 19f90 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 assembly... 19fa0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 19fb0 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 heckForRuntimeOp 19fc0 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 tion$::test_cha
19fd0 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20  nnel native....
19fe0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19ff0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
1a000 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74  if the test suit
1a010 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74  e should count t
1a020 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e  he number of con
1a030 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  nections..
1a040 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65    #       "opene
1a050 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20  d" and "closed"
1a060 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68  from the pool wh
1a070 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69  en determining i
1a080 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20  f a test..
1a090 20 20 23 20 20 20 20 20 20 20 70 61 73 73 65 64    #       passed
1a0a0 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69  .  Disabling thi
1a0b0 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f  s behavior is so
1a0c0 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72  metimes necessar
1a0d0 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20  y (e.g...
1a0e0 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20   #       during
1a0f0 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 73 74  the release test
1a100 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65 63  ing process) bec
1a110 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20 73  ause there are s
1a120 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20  everal..
1a130 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68  #       tests th
1a140 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22  at rely on the "
1a150 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c  opened from pool
1a160 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72  " count being gr
1a170 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23  eater..        #
1a180 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f         than zero
1a190 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d  .  These tests m
1a1a0 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74  ay fail due to t
1a1b0 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69  he non-determini
1a1c0 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20  stic..        #
1a1d0 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f        behavior o
1a1e0 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76  f the CLR GC, ev
1a1f0 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69 73  en when there is
1a200 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63   no bug in the c
1a210 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ode..        #
1a220 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74 65       being teste
1a230 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
1a240 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52         checkForR
1a250 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a  untimeOption $:: 1a260 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 test_channel noP 1a270 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 oolCounts.... 1a280 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a290 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 # NOTE: Report t 1a2a0 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 he resource usag 1a2b0 65 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 e prior to runni 1a2c0 6e 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 ng any tests... 1a2d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a2e0 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 reportSQLiteRe 1a2f0 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f sources$::test_
1a300 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
1a310 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1a320 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c  NOTE: Grab the l
1a330 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f  ist of native mo
1a340 64 75 6c 65 73 20 66 6f 72 20 74 68 65 20 63 75  dules for the cu
1a350 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e  rrent process an
1a360 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
1a370 20 20 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65     report on the
1a380 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1a390 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73  ite related ones
1a3a0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1a3b0 20 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65        set module
1a3c0 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  s [object invoke
1a3d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a3e0 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
1a3f0 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43 75  cs.Process.GetCu
1a400 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64  rrentProcess Mod
1a410 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ules]....
1a420 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
1a430 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d  -alias module $m 1a440 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 odules {.. 1a450 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1a460 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 # NOTE: The mod 1a470 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 65 ule file name he 1a480 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61 re must be norma 1a490 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 lized... 1a4a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 1a4b0 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 1a4c0 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f e normalize [$mo
1a4d0 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d  dule FileName]].
1a4e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
1a4f0 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2d  {[string match -
1a500 6e 6f 63 61 73 65 20 2a 2f 73 71 6c 69 74 65 33  nocase */sqlite3
1a510 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  .dll $fileName]} 1a520 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1a530 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1a540 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1a550 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1a560 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1a570 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c  found loaded SQL
1a580 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  ite native libra
1a590 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a  ry module: " \..
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a5b0 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20  $fileName \n].. 1a5c0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei 1a5d0 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 f {[string match 1a5e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a5f0 20 20 2d 6e 6f 63 61 73 65 20 2a 2f 53 51 4c 69 -nocase */SQLi 1a600 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 te.Interop.dll$
1a610 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
1a620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1a630 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1a640 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1a650 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a660 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 "---- found 1a670 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69 6e loaded SQLite in 1a680 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d terop assembly m 1a690 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 odule: " \.. 1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c$fil
1a6b0 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20  eName \n]..
1a6c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1a6d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
1a6e0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1a6f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1a700 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 1a710 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d "---- com 1a720 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e pile-time option 1a730 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 s for SQLite cor 1a740 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a e library... ".. 1a750 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1a760 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 [catch {object i 1a770 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 1a780 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 1a7a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1a7b0 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 43 6f SQLite3 SQLiteCo 1a7c0 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 7d 20 5c 0d mpileOptions} \. 1a7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1a7e0 20 20 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e compileOption 1a7f0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 1a800 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1a810 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1a820 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
1a830 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
1a840 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1a850 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74       $compileOpt 1a860 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e ions] <none>] \n 1a870 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 1a880 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1a890 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1a8a0 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e  _channel unknown
1a8b0 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  \n..          }.
1a8c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1a8d0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1a8e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a8f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 1a900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a910 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 "---- compile-ti 1a920 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 me options for S 1a930 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 1a940 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... 1a950 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1a960 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo 1a970 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1a980 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1a990 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1a9a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1a9b0 69 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 ite3 InteropComp 1a9c0 69 6c 65 4f 70 74 69 6f 6e 73 7d 20 5c 0d 0a 20 ileOptions} \.. 1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1a9e0 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d compileOptions] 1a9f0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1aa00 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1aa10 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1aa20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f   [appendArgs [fo
1aa30 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20  rmatList [lsort
1aa40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1aa50 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f     $compileOptio 1aa60 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d ns] <none>] \n]. 1aa70 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 1aa80 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1aa90 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1aaa0 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
1aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1aac0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1aad0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1aae0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20   NOTE: Show the
1aaf0 61 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73  active test cons
1ab00 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20  traints...
1ab10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
1ab20 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1ab30 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 1ab40 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 ---- constraints 1ab50 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 1ab60 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b [formatList [ 1ab70 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 lsort [getConstr 1ab80 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 aints]] <none>] 1ab90 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 1aba0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1abb0 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20 : Save the test 1abc0 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 constraints for 1abd0 75 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63 use by threads c 1abe0 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a reated in this.. 1abf0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ac00 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 application doma 1ac10 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 in. This is nec 1ac20 65 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61 essary because a 1ac30 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 ll the Eagle.. 1ac40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74 # "t 1ac50 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 est context" inf 1ac60 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d ormation is per- 1ac70 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 thread... 1ac80 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 1ac90 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1aca0 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 test_constraints 1acb0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1acc0 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f set ::test_ 1acd0 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 constraints$::e
1ace0 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74  agle_tests(const
1acf0 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20  raints)..
1ad00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
1ad10 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1ad20 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72   Load the "after
1ad30 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75  -constraints" cu
1ad40 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e  stom per-user an
1ad50 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20  d/or per-host..
1ad60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
1ad70 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77  est settings now
1ad80 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1ad90 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
1ada0 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65  [list loadSQLite
1adb0 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a  TestSettings $:: 1adc0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 test_channel .af 1add0 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ter].... 1ade0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1adf0 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 E: Show when our 1ae00 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 tests actually 1ae10 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 began (now)... 1ae20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ae30 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1ae40 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1ae50 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1ae60 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44    "---- System.D
1ae70 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73  ata.SQLite tests
1ae80 20 62 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a 20   began at " \..
1ae90 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63             [cloc
1aea0 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20  k format [clock
1aeb0 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20  seconds]] \n]..
1aec0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1aed0 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51  ..    proc runSQ
1aee0 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65  LiteTestEpilogue
1aef0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
1af00 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
1af10 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63  ip running our c
1af20 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69  ustom epilogue i
1af30 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68  f the main one h
1af40 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23  as been..      #
1af50 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d         skipped..
1af60 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1af70 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1af80 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e  s ::no(epilogue.
1af90 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
1afa0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1afb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
1afc0 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20   when our tests
1afd0 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 28  actually ended (
1afe0 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  now)...        #
1aff0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
1b000 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1b010 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1b020 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1b030 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1b040 69 74 65 20 74 65 73 74 73 20 65 6e 64 65 64 20 ite tests ended 1b050 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 at " \.. 1b060 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 [clock forma 1b070 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 t [clock seconds 1b080 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 ]] \n].... 1b090 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 #.. # B 1b0a0 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 UGFIX: Before ch 1b0b0 65 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c ecking the final 1b0c0 20 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 resources in us 1b0d0 65 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b e by SQLite, mak 1b0e0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 1b0f0 20 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f sure both o 1b100 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c f the PRAGMA rel 1b110 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e ated directory n 1b120 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d ames are freed.. 1b130 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1b140 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 1b150 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a teDirectories$:
1b160 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72  :test_channel tr
1b170 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ue....        #.
1b180 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1b190 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65   Also report the
1b1a0 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20   resource usage
1b1b0 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68  after running th
1b1c0 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20  e tests...
1b1d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70    #..        rep
1b1e0 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63  ortSQLiteResourc
1b1f0 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  es $::test_chann 1b200 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d el.... #. 1b210 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1b220 20 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 Report the crit 1b230 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e ical handle coun 1b240 74 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 ts after running 1b250 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 the tests... 1b260 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b270 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 getSQLiteHandleC 1b280 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 ounts$::test_ch
1b290 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a  annel..      }..
1b2a0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23      }.....    ##
1b2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2f0 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23  #########..    #
1b300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b310 23 23 23 23 23 23 23 23 23 23 23 23 20 45 4e 44  ############ END
1b320 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23   Eagle ONLY ####
1b330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b340 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20  ##########..
1b350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b390 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d  ###########..  }
1b3a0 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
1b3b0 45 3a 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65  E: Save the name
1b3c0 20 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72   of the director
1b3d0 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69  y containing thi
1b3e0 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20  s file...  #..
1b3f0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1b400 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  s common_directo
1b410 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
1b420 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65   set common_dire
1b430 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e  ctory [file dirn
1b440 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74  ame [info script
1b450 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a  ]]..  }....  #..
1b460 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64    # NOTE: Provid
1b470 65 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  e the System.Dat
1b480 61 2e 53 51 4c 69 74 65 20 74 65 73 74 20 70 61  a.SQLite test pa
1b490 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e 74  ckage to the int
1b4a0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a  erpreter...  #..
1b4b0 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64    package provid
1b4c0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
1b4d0 4c 69 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d  Lite.Test 1.0..}
1b4e0 0d 0a                                            ..