System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 184bef09d3d626b877e711c7147c802d53953626:

• File Tests/common.eagle — part of check-in [e68410521b] at 2014-09-03 04:11:16 on branch featureWork — Updates to the test suite infrastructure to handle Eagle integration changes. (user: mistachkin size: 119261) [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 20 28 69 2e 65 2e  test years (i.e.
1170: 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20   all)...
1180: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1190: 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30  n [list 2005 200
11a0: 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 33  8 2010 2012 2013
11b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
11c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
11d0: 65 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d 20  etBuildNetFx {}
11e0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
11f0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
1200: 20 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20 46   the test .NET F
1210: 72 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e 67  ramework setting
1220: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
1230: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
1240: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
1250: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
1260: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
1270: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1280: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1290: 65 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20 5c  est_net_fx] && \
12a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
12b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 12c0: 73 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d 20 st_net_fx] > 0} 12d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12f0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 1300: 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 fied test .NET F 1310: 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 ramework... 1320: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 1330: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 74 turn$::test_net
1340: 5f 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  _fx..      } els
1350: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1360: 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59   year [getBuildY
1370: 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ear]....
1380: 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d  switch -exact --
1390: 20 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20 20   $year {.. 13a0: 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 20 20 20 2005 {.. 13b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 13c0: 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 etFx20.. 13d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 13e0: 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 008 {.. 13f0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 1400: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 5.. }.. 1410: 20 20 20 20 20 20 20 20 20 20 32 30 31 30 20 7b 2010 { 1420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1430: 74 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 20 turn netFx40.. 1440: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1450: 20 20 20 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 2012 {.. 1460: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 1470: 6e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 netFx45.. 1480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1490: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 2013 {.. 14a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 14b0: 34 35 31 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 451.. } 14c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 66 61 .. defa 14d0: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ult {.. 14e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 14f0: 35 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 5; # TODO: Good 1500: 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 "fallback" defau 1510: 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lt?.. } 1520: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1530: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1540: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1550: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 1560: 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 e should return 1570: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 non-zero if the 1580: 63 6f 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d configured test. 1590: 0a 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 . # pla 15a0: 74 66 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 tform is most li 15b0: 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 kely the default 15c0: 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e for this machin 15d0: 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 e... #.. p 15e0: 72 6f 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 roc isDefaultBui 15f0: 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 ldPlatform { {ve 1600: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b rbose false} } { 1610: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1620: 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 # NOTE: Running 1630: 20 6f 6e 20 57 6f 57 36 34 20 69 73 20 6e 65 76 on WoW64 is nev 1640: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 er the default p 1650: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 1660: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 1670: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 RunningWoW64]} t 1680: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1690: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
16a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
16b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 16c0: 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 16d0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 "---- dete 16e0: 63 74 65 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 cted non-default 16f0: 20 70 6c 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 platform (WoW64 1700: 29 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d )\n".. }. 1710: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1720: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. 1730: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1740: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 # NOTE: This ha 1750: 73 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 s a good chance 1760: 6f 66 20 62 65 69 6e 67 20 74 68 65 20 64 65 66 of being the def 1770: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a ault platform... 1780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1790: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
17a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
17b0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17c0: 65 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 el "---- detecte 17d0: 64 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f d default platfo 17e0: 72 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rm\n".. }.. 17f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 1800: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 1810: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c proc getBuildPl 1820: 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 atform { native 1830: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 1840: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1850: 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 st_platform] && 1860: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 1870: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
1880: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  est_platform] >
1890: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
18a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18b0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
18c0: 65 63 69 66 69 65 64 20 74 65 73 74 20 70 6c 61  ecified test pla
18d0: 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20  tform.  If this
18e0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20  variable is not
18f0: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  set,..        #
1900: 20 20 20 20 20 20 74 68 65 20 64 65 66 61 75 6c        the defaul
1910: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be
1920: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63  based on the mac
1930: 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72  hine architectur
1940: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
1950: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65         return [e
1960: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24  xpr {$native ?$
1970: 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20  ::test_platform
1980: 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20  : ""}]..      }
1990: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
19a0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68  ists ::test_mach
19b0: 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ine] && \..
19c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
19d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68  gth $::test_mach 19e0: 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ine] > 0} then { 19f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 1a10: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 native builds, 1a20: 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 return the platf 1a30: 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 orm name corresp 1a40: 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 onding to.. 1a50: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 # the t 1a60: 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 est machine arch 1a70: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 itecture; otherw 1a80: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ise, return an e 1a90: 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 mpty.. # 1aa0: 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 string... 1ab0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ac0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 1ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 74 ..$nat
1ae0: 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f  ive ? [machineTo
1af0: 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74  Platform $::test 1b00: 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a _machine] : "".. 1b10: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 }].. 1b20: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 1b30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 o exists ::tcl_p 1b40: 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 latform(machine) 1b50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1b60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b70: 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 NOTE: For native 1b80: 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 builds, return 1b90: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d the platform nam 1ba0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 e corresponding 1bb0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 to.. # 1bc0: 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 the machine 1bd0: 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 architecture; ot 1be0: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 herwise, return 1bf0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1c00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c10: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1c20: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 r {..$
1c30: 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e  native ? [machin
1c40: 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74  eToPlatform $::t 1c50: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach 1c60: 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 20 ine)] : "".. 1c70: 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 }].. } 1c80: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1c90: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1ca0: 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 72 E: No machine ar 1cb0: 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 76 chitecture is av 1cc0: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 ailable, return 1cd0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1ce0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1cf0: 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e It is importan 1d00: 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 t to return an e 1d10: 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 mpty string here 1d20: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 because the.. 1d30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 1d40: 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f sult of this pro 1d50: 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 cedure may be us 1d60: 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f ed with [file jo 1d70: 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d in]... #. 1d80: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1d90: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 "".. }.. 1da0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1db0: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 1dc0: 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 ation {} {.. 1dd0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1de0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 63 E: See if the "c 1df0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65 onfiguration" se 1e00: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f tting has been o 1e10: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 verridden by the 1e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1e30: 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 user (e.g. on th 1e40: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e e command line). 1e50: 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e This helps con 1e60: 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 trol exactly.. 1e70: 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 # whic 1e80: 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69 65 h set of binarie 1e90: 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 s we are testing 1ea0: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 (i.e. those bui 1eb0: 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 lt in the.. 1ec0: 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67 22 # "Debug" 1ed0: 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62 75 or "Release" bu 1ee0: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 1ef0: 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 ns). To overrid 1f00: 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 e this.. # 1f10: 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 value via 1f20: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 1f30: 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e , enter a comman 1f40: 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 d similar to one 1f50: 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 of.. # 1f60: 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 the following 1f70: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 1f80: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 1f90: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 1fa0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 1fb0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 1fc0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 1fd0: 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20 n Debug".. 1fe0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 1ff0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 2000: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 2010: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 2020: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 2030: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 2040: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 2050: 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 n Release".. 2060: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c # -fil 2070: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e e .\path\to\all. 2080: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a eagle.. #.. 2090: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 20a0: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 gleShell.exe -fi 20b0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 20c0: 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d .eagle -preTest. 20d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 20e0: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c "unset -nocompl 20f0: 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 ain test_configu 2100: 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 ration".. # 2110: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 2120: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 2130: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 configuration] & 2140: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 2150: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2160: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
2170: 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ion] > 0} then {
2180: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2190: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
21a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
21b0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
21c0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default
21d0: 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20  value used..
21e0: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20      #       for
21f0: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73  this variable is
2200: 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c 65   typically "Rele
2210: 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79 20  ase", as set by
2220: 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20  the test..
2230: 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 20    #       suite
2240: 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20  itself...
2250: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
2260: 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  rn $::test_confi 2270: 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 2280: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 2290: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 22a0: 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 OTE: Normally, w 22b0: 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 e will never hit 22c0: 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61 75 this case becau 22d0: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 se the value of 22e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 22f0: 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69 67 test config 2300: 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 uration variable 2310: 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 62 is always set b 2320: 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 2330: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2340: 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 itself; howeve 2350: 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76 65 r, it can be ove 2360: 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74 68 rridden using th 2370: 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d e unset command. 2380: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2390: 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 from the -preTe 23a0: 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 st option to the 23b0: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 23c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 23d0: 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 return$::eagle
23e0: 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67  _platform(config
23f0: 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  uration)..
2400: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
2410: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f   proc getBuildCo
2420: 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20  nfigurations {}
2430: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
2440: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
2450: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 73   the list of tes
2460: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t configurations
2470: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2480: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
2490: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
24a0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
24b0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
24c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
24d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
24e0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
24f0: 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ns] && \..
2500: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a      [llength $:: 2510: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 2520: 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ons] > 0} then { 2530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2540: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 2550: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 2560: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 2570: 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 igurations... 2580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2590: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 return$::test_c
25a0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20  onfigurations..
25b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
25c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
25e0: 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f  e default list o
25f0: 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61  f test configura
2600: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  tions...
2610: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
2620: 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52 65  n [list Debug Re
2630: 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  lease]..      }.
2640: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
2650: 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 65  roc getBuildBase
2660: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
2670: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
2680: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
2690: 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 63  t the base direc
26a0: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74  tory where all t
26b0: 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c 64  he builds should
26c0: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
26d0: 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69     located.  Thi
26e0: 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 69  s will be the di
26f0: 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f 6e  rectory that con
2700: 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 6c  tains the actual
2710: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2720: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72  build output dir
2730: 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 72  ectory (e.g. par
2740: 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a  ent of "bin")...
2750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
2760: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
2770: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
2780: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
2790: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
27a0: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f  length $::build_ 27b0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 27c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 27d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27e0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 27f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c tion of the buil 2800: 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 d base directory 2810: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 2820: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 2830: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 2840: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 2850: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 2860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2870: 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65  :build_base_dire
2880: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
2890: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
28a0: 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72  sts ::common_dir
28b0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
28c0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
28d0: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e  length $::common 28e0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 28f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2900: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2910: 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 TE: Next, fallba 2920: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 ck to the parent 2930: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 directory of th 2940: 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 e one containing 2950: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2960: 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 this file (i.e 2970: 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 . "common.eagle" 2980: 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e ), if available. 2990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 29a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 29b0: 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d e dirname$::com
29c0: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 0d 0a  mon_directory]..
29d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
29e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 70  [info exists ::p
29f0: 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ath] && \..
2a00: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
2a10: 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30  gth $::path] > 0 2a20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2a30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a40: 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 OTE: Finally, fa 2a50: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 llback to the pa 2a60: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f rent directory o 2a70: 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d f the EagleTest. 2a80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2a90: 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 67 6c path. The Eagl 2aa0: 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 67 75 eTest package gu 2ab0: 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 74 68 arantees that th 2ac0: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 is variable.. 2ad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 6c # wil 2ae0: 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 l be set to the 2af0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 directory contai 2b00: 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 66 ning the first f 2b10: 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 ile to.. 2b20: 23 20 20 20 20 20 20 20 65 78 65 63 75 74 65 20 # execute 2b30: 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c the [runTestProl 2b40: 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c 69 62 ogue] script lib 2b50: 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 2e 0d rary procedure.. 2b60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2b70: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 2b80: 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 dirname$::path
2b90: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
2ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2bb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
2bc0: 20 70 61 74 68 20 69 73 20 61 76 61 69 6c 61 62   path is availab
2bd0: 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d  le, return an em
2be0: 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54 68 69  pty string.  Thi
2bf0: 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  s point..
2c00: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
2c10: 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64 2e 0d  not be reached..
2c20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2c30: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
2c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
2c50: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51  ..    proc getSQ
2c60: 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
2c70: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
2c80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
2c90: 67 75 72 65 20 6f 75 74 20 74 68 65 20 64 69 72  gure out the dir
2ca0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c  ectory where all
2cb0: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 20 66   the test data f
2cc0: 69 6c 65 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20  iles should..
2cd0: 20 20 20 23 20 20 20 20 20 20 20 62 65 20 6c 6f     #       be lo
2ce0: 63 61 74 65 64 2e 20 20 54 68 69 73 20 73 68 6f  cated.  This sho
2cf0: 75 6c 64 20 62 65 20 74 68 65 20 22 64 61 74 61  uld be the "data
2d00: 22 20 64 69 72 65 63 74 6f 72 79 20 62 65 6e 65  " directory bene
2d10: 61 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ath the..      #
2d20: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
2d30: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
2d40: 61 63 74 75 61 6c 20 74 65 73 74 20 73 63 72 69  actual test scri
2d50: 70 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  pts...      #..
2d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
2d70: 65 20 6a 6f 69 6e 20 24 3a 3a 70 61 74 68 20 64  e join $::path d 2d80: 61 74 61 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a ata].. }..... 2d90: 20 20 20 20 70 72 6f 63 20 69 73 52 75 6e 6e 69 proc isRunni 2da0: 6e 67 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 ngWoW64 {} {.. 2db0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2dc0: 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 OTE: For now, ju 2dd0: 73 74 20 75 73 65 20 74 68 65 20 65 78 69 73 74 st use the exist 2de0: 69 6e 67 20 74 65 73 74 20 63 6f 6e 73 74 72 61 ing test constra 2df0: 69 6e 74 20 66 6f 72 20 64 65 74 65 63 74 69 6e int for detectin 2e00: 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 g.. # 2e10: 20 61 20 57 6f 57 36 34 20 70 72 6f 63 65 73 73 a WoW64 process 2e20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 2e30: 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f return [haveCo 2e40: 6e 73 74 72 61 69 6e 74 20 77 6f 77 36 34 5d 0d nstraint wow64]. 2e50: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 2e60: 72 6f 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 41 roc isMixedModeA 2e70: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 ssembly { fileNa 2e80: 6d 65 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 me {varName ""} 2e90: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 2ea0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 2eb0: 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 t, make sure the 2ec0: 20 74 65 73 74 20 73 75 69 74 65 20 69 6e 66 72 test suite infr 2ed0: 61 73 74 72 75 63 74 75 72 65 20 69 73 20 61 6c astructure is al 2ee0: 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 lowed to.. 2ef0: 23 20 20 20 20 20 20 20 75 73 65 20 74 68 65 20 # use the 2f00: 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d [exec] command.. 2f10: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2f20: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2f30: 73 20 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 26 s ::no(exec)] && 2f40: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a ![info exists : 2f50: 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d 20 :no(corFlags)]} 2f60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2f70: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2f80: 45 3a 20 49 66 20 74 68 65 20 6c 6f 63 61 74 69 E: If the locati 2f90: 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 69 on of CorFlags i 2fa0: 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 s present in the 2fb0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 environment,.. 2fc0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 2fd0: 73 65 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 se it; otherwise 2fe0: 20 61 73 73 75 6d 65 20 69 74 20 69 73 20 69 6e assume it is in 2ff0: 20 74 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 the PATH... 3000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 3010: 65 74 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 70 et corFlags [exp 3020: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5b r {.. [ 3030: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e info exists ::en 3040: 76 28 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 24 v(CorFlags)] ?$
3050: 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 20  ::env(CorFlags)
3060: 3a 20 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20 20  : "CorFlags"..
3070: 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20        }]....
3080: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
3090: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
30a0: 6f 20 65 78 65 63 75 74 65 20 43 6f 72 46 6c 61  o execute CorFla
30b0: 67 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66  gs on the specif
30c0: 69 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ied file...
30d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
30e0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
30f0: 20 20 20 20 20 20 65 78 65 63 20 2d 2d 20 24 63        exec -- $c 3100: 6f 72 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e 61 orFlags [file na 3110: 74 69 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 tivename$fileNa
3120: 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  me]..        } e
3130: 78 65 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  xec] == 0} then
3140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
3150: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
3160: 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62  : If requested b
3170: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 74  y our caller, at
3180: 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69  tempt to determi
3190: 6e 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ne the..
31a0: 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f    #       platfo
31b0: 72 6d 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  rm for the speci
31c0: 66 69 65 64 20 66 69 6c 65 20 61 73 20 77 65 6c  fied file as wel
31d0: 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  l...          #.
31e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
31f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 3200: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 arName] > 0} the 3210: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 3220: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3230: 23 20 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 68 # NOTE: Store th 3240: 65 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 68 e platform in th 3250: 65 20 6e 61 6d 65 64 20 76 61 72 69 61 62 6c 65 e named variable 3260: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 in the.. 3270: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 3280: 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c text of our call 3290: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er... 32a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 32b0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
32c0: 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20   platform....
32d0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
32e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
32f0: 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  Attempt to extra
3300: 63 74 20 74 68 65 20 50 45 20 6c 69 6e 65 20 66  ct the PE line f
3310: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64  rom the captured
3320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
3330: 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49        output.  I
3340: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20  f this value is
3350: 22 50 45 33 32 22 20 6f 72 20 22 50 45 33 32 2b  "PE32" or "PE32+
3360: 22 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ", the..
3370: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
3380: 6d 62 6c 79 20 66 69 6c 65 20 69 73 20 33 32 2d  mbly file is 32-
3390: 62 69 74 20 6f 72 20 36 34 2d 62 69 74 2c 20 72  bit or 64-bit, r
33a0: 65 73 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20 20  espectively;..
33b0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
33c0: 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 73    otherwise, its
33d0: 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77 6e   type is unknown
33e0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
3400: 74 20 70 61 74 74 65 72 6e 20 7b 5e 50 45 20 20  t pattern {^PE
3410: 20 20 20 20 20 20 3a 20 28 50 45 33 32 7c 50 45        : (PE32|PE
3420: 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20  32\+)\s+$}.... 3430: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 if {[r 3440: 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 egexp -line --$
3450: 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64 75  pattern $exec du 3460: 6d 6d 79 20 70 65 33 32 5d 7d 20 74 68 65 6e 20 mmy pe32]} then 3470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 3480: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3490: 20 20 23 20 48 41 43 4b 3a 20 54 68 69 73 20 5b # HACK: This [ 34a0: 73 77 69 74 63 68 5d 20 61 73 73 75 6d 65 73 20 switch] assumes 34b0: 74 68 61 74 20 33 32 2d 62 69 74 20 65 78 65 63 that 32-bit exec 34c0: 75 74 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 20 utables are.. 34d0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 34e0: 20 20 20 61 6c 77 61 79 73 20 78 38 36 20 61 6e always x86 an 34f0: 64 20 74 68 61 74 20 36 34 2d 62 69 74 20 65 78 d that 64-bit ex 3500: 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 61 6c ecutables are al 3510: 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ways.. 3520: 20 20 20 20 23 20 20 20 20 20 20 20 78 36 34 2e # x64. 3530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 3540: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3550: 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d switch -exact - 3560: 2d 20 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 20 -$pe32 {..
3570: 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32 20             PE32
3580: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
3590: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
35a0: 6d 20 57 69 6e 33 32 0d 0a 20 20 20 20 20 20 20  m Win32..
35b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32              PE32
35d0: 2b 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  + {..
35e0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
35f0: 6f 72 6d 20 78 36 34 0d 0a 20 20 20 20 20 20 20  orm x64..
3600: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
3610: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
3620: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ult {..
3630: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
3640: 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20  tform ""..
3650: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
3660: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
3670: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
3680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
3690: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22    set platform "
36a0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  "..            }
36b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
36c0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
36d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
36e0: 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  Attempt to extra
36f0: 63 74 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c 69  ct the ILONLY li
3700: 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74  ne from the capt
3710: 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ured..
3720: 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20  #       output.
3730: 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69   If this value i
3740: 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 70 65 63  s zero, the spec
3750: 69 66 69 65 64 20 66 69 6c 65 20 6d 75 73 74 0d  ified file must.
3760: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
3770: 20 20 20 62 65 20 61 20 6d 69 78 65 64 2d 6d 6f     be a mixed-mo
3780: 64 65 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74 68  de assembly; oth
3790: 65 72 77 69 73 65 2c 20 69 74 20 63 6f 6e 74 61  erwise, it conta
37a0: 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20  ins only..
37b0: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61      #       mana
37c0: 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d  ged components..
37d0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
37e0: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74          set patt
37f0: 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20  ern {^ILONLY
3800: 3a 20 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a  : (0|1)\s+$}.... 3810: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 3820: 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 regexp -line -- 3830: 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64$pattern $exec d 3840: 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 ummy ilOnly]} th 3850: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 3860: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 3870: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 3880: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 69 if {!$i
3890: 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  lOnly} then {..
38a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38b0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  n true..
38c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
38d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
38e0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
38f0: 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 73 75  : If the test su
3900: 69 74 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 5b  ite cannot use [
3910: 65 78 65 63 5d 20 6f 72 20 65 78 65 63 75 74 69  exec] or executi
3920: 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d 0a  on of CorFlags..
3930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 61        #       fa
3940: 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 66 61 6c  iled, return fal
3950: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
3960: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3970: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3980: 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76 61 69  proc isBuildAvai
3990: 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65 20 64  lable { native d
39a0: 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d  irectory {varNam
39b0: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e ""} } {..
39c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
39d0: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
39e0: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65  y qualified file
39f0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 72   name for the pr
3a00: 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a  imary assembly..
3a10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
3a20: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73  ntaining the Sys
3a30: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
3a40: 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e  managed componen
3a50: 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20 20 23  ts.  It..      #
3a60: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
3a70: 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68 69 73   noted that this
3a80: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6d   assembly file m
3a90: 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 20  ay also contain
3aa0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
3ab0: 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e     native compon
3ac0: 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74 69 76  ents, if a nativ
3ad0: 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20 75 73  e build is in us
3ae0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
3af0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
3b00: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
3b10: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir 3b20: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 3b30: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 3b40: 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a SQLite.dll]].... 3b50: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 if {![file 3b60: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
3b70: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
3b80: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3b90: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
3ba0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
3bb0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 61  TE: Attempt to a
3bc0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 74  utomatically det
3bd0: 65 63 74 20 69 66 20 74 68 65 20 70 72 69 6d 61  ect if the prima
3be0: 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ry assembly..
3bf0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61     #       conta
3c00: 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 20 63  ins any native c
3c10: 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 6e 65  omponents, if ne
3c20: 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20  cessary...
3c30: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
3c40: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 74  ring length $nat 3c50: 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ive] == 0} then 3c60: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 3c70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
3c80: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  arName] > 0} the
3c90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75  n {..          u
3ca0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 3cb0: 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20$varName..
3cc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
3cd0: 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d 69 78  et native [isMix
3ce0: 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 24  edModeAssembly $3cf0: 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e 61 6d fileName$varNam
3d00: 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  e]..      }....
3d10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
3d20: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 72 69  NOTE: If the pri
3d30: 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 61 6c  mary assembly al
3d40: 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  so contains the
3d50: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
3d60: 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  s,..      #
3d70: 20 20 77 65 20 68 61 76 65 20 65 76 65 72 79 74    we have everyt
3d80: 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20  hing we need...
3d90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
3da0: 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20   {$native} then 3db0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 3dc0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. 3dd0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 3de0: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 3df0: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif 3e00: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f ied file name fo 3e10: 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 r the interop as 3e20: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 sembly.. # 3e30: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 containing 3e40: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 the System.Data 3e50: 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 .SQLite native c 3e60: 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 omponents. If t 3e70: 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 his.. # 3e80: 20 20 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 file exists, 3e90: 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 we should have e 3ea0: 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 verything we nee 3eb0: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 3ec0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 3ed0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 3ee0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
3ef0: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
3f00: 20 20 20 20 53 51 4c 69 74 65 2e 49 6e 74 65 72      SQLite.Inter
3f10: 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20  op.dll]]....
3f20: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
3f30: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 3f40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 3f50: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 3f60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 3f70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 3f80: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu 3f90: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d alified file nam 3fa0: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 e for the SQLite 3fb0: 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 core.. # 3fc0: 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 49 library. I 3fd0: 66 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 73 f this file exis 3fe0: 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 ts, we should ha 3ff0: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 ve everything we 4000: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 4010: 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a need... #.. 4020: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 4030: 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e me [file nativen 4040: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 ame [file join$
4050: 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20  directory \..
4060: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e 64         sqlite3.d
4070: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ll]]....      if
4080: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $4090: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 40a0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 40b0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. 40c0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 40d0: 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f 72 # NOTE: One or 40e0: 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63 6f 6d more native com 40f0: 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64 20 62 ponents needed b 4100: 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 4110: 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 Lite.. # 4120: 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e 67 2e are missing. 4130: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4140: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. 4150: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 4160: 63 20 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c c isReleaseAvail 4170: 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f 72 79 able { directory 4180: 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 {varName ""} } 4190: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 {.. if {[st 41a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
41b0: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
41c0: 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72  {..        upvar
41d0: 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72   1 $varName$var
41e0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  Name..      }...
41f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69  .      return [i
4200: 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20  sBuildAvailable
4210: 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 24 76  "" $directory$v
4220: 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a  arName]..    }..
4230: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e  ...    proc join
4240: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b  BuildDirectory {
4250: 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 65 61   native path yea
4260: 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69  r platform confi
4270: 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20  guration } {..
4280: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
4290: 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20  OTE: Figure out
42a0: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20  and then return
42b0: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
42c0: 69 65 64 20 70 61 74 68 20 74 6f 20 74 68 65 20  ied path to the
42d0: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20  build..      #
42e0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 62       directory b
42f0: 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20  ased on all the
4300: 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64  arguments provid
4310: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
4320: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
4330: 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74    if {$native} t 4340: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 4350: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e eturn [file join 4360: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72$path bin $year 4370: 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66$platform $conf 4380: 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 iguration].. 4390: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 43a0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 43b0: 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 join$path bin
43c0: 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75 72 61  $year$configura
43d0: 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20  tion bin]..
43e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
43f0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 44    proc getBuildD
4400: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20  irectory {} {..
4410: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
4420: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65  NOTE: See if the
4430: 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d   "native" runtim
4440: 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65  e option has bee
4450: 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20 75  n set.  If so, u
4460: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  se the..      #
4470: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
4480: 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  for the mixed-mo
4490: 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e 6b  de assembly (a.k
44a0: 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20 69  .a. the native i
44b0: 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23 20  nterop..      #
44c0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29 2e        assembly).
44d0: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73    To enable this
44e0: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20   option via the
44f0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e  command line, en
4500: 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20 20  ter a..      #
4510: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69 6d       command sim
4520: 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74  ilar to one of t
4530: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c  he following (al
4540: 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d  l on one line):.
4550: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4560: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
4570: 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69  ll.exe -initiali
4580: 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69 6f  ze -runtimeOptio
4590: 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  n native..
45a0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
45b0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
45c0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
45d0: 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 20 65      #       To e
45e0: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f  nable this optio
45f0: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  n via the comman
4600: 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f 20  d line prior to
4610: 74 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a 20  the "beta 16"..
4620: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c       #       rel
4630: 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20 74  ease of Eagle, t
4640: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d  he following com
4650: 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65  mand must be use
4660: 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20 20  d instead..
4670: 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20 61   #       (also a
4680: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
4690: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
46a0: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
46b0: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c  ell.exe -initial
46c0: 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61 6c  ize -postInitial
46d0: 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ize..      #
46e0: 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e 76       "object inv
46f0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
4700: 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e  GetActive AddRun
4710: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
4720: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e"..      #
4730: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
4740: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
4750: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
4760: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
4770: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79  :build_directory
4780: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
4790: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
47a0: 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74   $::build_direct 47b0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { 47c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 47d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The 47e0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 location of the 47f0: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 4800: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 4810: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 4820: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 4830: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 4840: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 4850: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
4860: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79  :build_directory
4870: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
4880: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4890: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
48a0: 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e  the "native" run
48b0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73  time option is s
48c0: 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  et, the mixed-mo
48d0: 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  de assembly..
48e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is
48f0: 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20 49  being tested.  I
4900: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68 65  n that case, the
4910: 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69   path to the bui
4920: 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ld directory..
4930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69        #       wi
4940: 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 70  ll contain the p
4950: 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e 64  latform name and
4960: 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69 65   all the binarie
4970: 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20 20  s under test..
4980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
4990: 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74 20  ould be present
49a0: 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f 72  in that director
49b0: 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74 69  y.  If the "nati
49c0: 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20  ve" runtime..
49d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74       #       opt
49e0: 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c 20  ion is not set,
49f0: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
4a00: 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e 73  ory will be cons
4a10: 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20 20  idered to be..
4a20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 70        #       "p
4a30: 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c 22  latform-neutral"
4a40: 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61 62  , with the notab
4a50: 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20  le exception of
4a60: 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  any native..
4a70: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
4a80: 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c 69  mbly (e.g. "SQLi
4a90: 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 29  te.Interop.dll")
4aa0: 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 64 75   copied there du
4ab0: 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  ring the..
4ac0: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
4ad0: 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e 20  process itself.
4ae0: 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 70 72   If the build pr
4af0: 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64 6f  ocess somehow do
4b00: 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  es not..
4b10: 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 68 65  #       copy the
4b20: 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79   native assembly
4b30: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
4b40: 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 20  rm, most of the
4b50: 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20 23  tests..        #
4b60: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 73 75         in the su
4b70: 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20  ite will simply
4b80: 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65 6e  be skipped.  Gen
4b90: 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c  erally speaking,
4ba0: 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   there..
4bb0: 23 20 20 20 20 20 20 20 61 72 65 20 74 77 6f 20  #       are two
4bc0: 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74 68  ways to build th
4bd0: 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e 20  e binaries when
4be0: 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75 6e  preparing to run
4bf0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
4c00: 20 20 20 20 20 20 74 65 73 74 20 73 75 69 74 65        test suite
4c10: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  :..        #..
4c20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 31 2e        #       1.
4c30: 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 61 72   Build the separ
4c40: 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64 20  ate managed and
4c50: 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69 65  native assemblie
4c60: 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20 20  s using some..
4c70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
4c80: 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c 61   commands simila
4c90: 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23  r to:..        #
4ca0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4cb0: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24       build.bat $4cc0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4d {Configuration}M 4cd0: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c 61 anagedOnly${Pla
4ce0: 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20  tform}..
4cf0: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64  #          build
4d00: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61  .bat ${Configura 4d10: 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 20 tion}NativeOnly 4d20: 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20${Platform}..
4d30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4d40: 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65  #          Where
4d50: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ${Configuration 4d60: 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62 } is either "Deb 4d70: 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 ug" or "Release" 4d80: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 and.. # 4d90: 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66${Platf
4da0: 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22  orm} is either "
4db0: 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e  Win32" or "x64".
4dc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4dd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 32 2e 20       #       2.
4de0: 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64 2d  Build the mixed-
4df0: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75 73  mode assembly us
4e00: 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69  ing a command si
4e10: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20  milar to:..
4e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
4e30: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62           build.b
4e40: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69  at ${Configurati 4e50: 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d on}${Platform}.
4e60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4e70: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57      #          W
4e80: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61  here ${Configura 4e90: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 tion} is either 4ea0: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 "Debug" or "Rele 4eb0: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 ase" and.. 4ec0: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 #${P
4ed0: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68  latform} is eith
4ee0: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78  er "Win32" or "x
4ef0: 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 63 6f  64".  If this co
4f00: 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20  mmand is..
4f10: 20 20 23 20 20 20 20 20 20 20 20 20 20 75 73 65    #          use
4f20: 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74 73  d, various tests
4f30: 20 74 68 61 74 20 72 65 71 75 69 72 65 20 73 75   that require su
4f40: 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e 61  pplementary mana
4f50: 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ged..        #
4f60: 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 69          assembli
4f70: 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20 6d  es (e.g. LINQ) m
4f80: 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 75 6e  ay be skipped un
4f90: 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61 72  less those binar
4fa0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ies..        #
4fb0: 20 20 20 20 20 20 20 20 61 72 65 20 73 75 62 73          are subs
4fc0: 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64 20  equently copied
4fd0: 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63 74  into the correct
4fe0: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
4ff0: 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20   by..        #
5000: 20 20 20 20 20 20 20 20 22 74 65 73 74 5f 61 6c          "test_al
5010: 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20 20  l.bat")...
5020: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
5030: 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20 61       Note that a
5040: 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20  ll of the build
5050: 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 77  commands above w
5060: 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20 75  ill default to u
5070: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20  sing..        #
5080: 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 73 74        the latest
5090: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75   version of MSBu
50a0: 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61 6e  ild available an
50b0: 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 61 72  d the "test_year
50c0: 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 23  " may..        #
50d0: 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 62         need to b
50e0: 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f 72  e adjusted accor
50f0: 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61 6c  dingly to actual
5100: 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74 20  ly run the test
5110: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
5120: 23 20 20 20 20 20 20 20 52 65 66 65 72 20 74 6f  #       Refer to
5130: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69 6e   the comments in
5140: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20   [getBuildYear]
5150: 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61  for more informa
5160: 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20 20  tion on..
5170: 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f 20   #       how to
5180: 73 65 74 20 74 68 69 73 20 76 61 72 69 61 62 6c  set this variabl
5190: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
51a0: 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
51b0: 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74  e [hasRuntimeOpt
51c0: 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20  ion native]....
51d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a         return [j
51e0: 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72  oinBuildDirector
51f0: 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75  y $native [getBu 5200: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 ildBaseDirectory 5210: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 5220: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 [getBuildYear] 5230: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 [getBuildPlatfor 5240: 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42 m$native] [getB
5250: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
5260: 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  n]]..      }..
5270: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5280: 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69   getReleaseVersi
5290: 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  on {} {..      #
52a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
52b0: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 72  Figure out the r
52c0: 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66  elease version f
52d0: 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20  or use with the
52e0: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d  build directory.
52f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
5300: 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  hen checking for
5310: 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61   available relea
5320: 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ses...      #..
5330: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
5340: 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f  xists ::release_
5350: 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20  version] && \..
5360: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5370: 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61   length $::relea 5380: 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d se_version] > 0} 5390: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 53a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 53b0: 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20 TE: The release 53c0: 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e version has been 53d0: 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65 overridden; the 53e0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a refore, use it.. 53f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5400: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 verbatim... 5410: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 5420: 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f turn$::release_
5430: 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d  version..      }
5440: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
5450: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
5460: 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76  TE: No release v
5470: 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  ersion is availa
5480: 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ble, return an e
5490: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20  mpty string...
54a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 49 74        #       It
54b0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
54c0: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
54d0: 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 65 63   string here bec
54e0: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20  ause the..
54f0: 20 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74    #       result
5500: 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75   of this procedu
5510: 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 20 77  re may be used w
5520: 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e  ith [file join].
5530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5540: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
5550: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5560: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
5570: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66  uildFileName { f
5580: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
5590: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
55a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
55b0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70  : Returns the sp
55c0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  ecified file nam
55d0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  e as if it were
55e0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a  located in the..
55f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
5600: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64  ild directory, d
5610: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69  iscarding any di
5620: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74  rectory informat
5630: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20  ion present..
5640: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68     #       in th
5650: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70  e file name as p
5660: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
5670: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
5680: 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
5690: 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  t [file nativena
56a0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
56b0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
56c0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 20 24  uildDirectory] $56d0: 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 platform [file t 56e0: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d ail$fileName]]]
56f0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
5700: 20 20 20 23 20 48 41 43 4b 3a 20 57 68 65 6e 20     # HACK: When
5710: 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34  running on WoW64
5720: 2c 20 61 73 73 75 6d 65 20 74 68 65 20 74 65 73  , assume the tes
5730: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72  t executables ar
5740: 65 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20  e present..
5750: 20 23 20 20 20 20 20 20 20 77 69 74 68 20 74 68   #       with th
5760: 65 20 22 33 32 22 20 73 75 66 66 69 78 20 6f 6e  e "32" suffix on
5770: 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d   them...      #.
5780: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75  .      if {[isRu
5790: 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 26 26 20 5b  nningWoW64] && [
57a0: 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 24  file extension $57b0: 72 65 73 75 6c 74 5d 20 65 71 20 22 2e 65 78 65 result] eq ".exe 57c0: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 57d0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61 set result [a 57e0: 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 ppendArgs [file 57f0: 72 6f 6f 74 6e 61 6d 65 20 24 72 65 73 75 6c 74 rootname$result
5800: 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 20 20 20 20  ] 32.exe]..
5810: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
5820: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 5830: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 5840: 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 etExternalDirect 5850: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 5860: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 5870: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 5880: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 returns the dire 5890: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 ctory where the 58a0: 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 79 0d external binary. 58b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 . # f 58c0: 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 74 65 64 iles are located 58d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 58e0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 58f0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 5900: 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 dirname [file di 5910: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 6e 61 rname [info bina 5920: 72 79 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c ry]]]].. }... 5930: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 .. proc getBi 5940: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d naryDirectory {} 5950: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 5960: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 5970: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e procedure return 5980: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 s the directory 5990: 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 61 where the test a 59a0: 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 pplication.. 59b0: 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 # itself 59c0: 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 6c 65 (i.e. the Eagle 59d0: 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61 74 shell) is locat 59e0: 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 ed. This will b 59f0: 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 20 20 e used as.. 5a00: 20 23 20 20 20 20 20 20 20 74 68 65 20 64 65 73 # the des 5a10: 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 tination for the 5a20: 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d 2e 44 copied System.D 5a30: 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 ata.SQLite nativ 5a40: 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 e and.. # 5a50: 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 managed ass 5a60: 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 62 65 emblies (i.e. be 5a70: 63 61 75 73 65 20 74 68 69 73 20 69 73 20 6f 6e cause this is on 5a80: 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 6c 61 e of the few pla 5a90: 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ces.. # 5aa0: 20 20 20 77 68 65 72 65 20 74 68 65 20 43 4c 52 where the CLR 5ab0: 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 66 will actually f 5ac0: 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 ind and load the 5ad0: 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 m properly)... 5ae0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 5af0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 5b00: 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 binary_directory 5b10: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 5b20: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 5b30: 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63$::binary_direc
5b40: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
5b50: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
5b60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
5b70: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  e location of th
5b80: 65 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f  e binary directo
5b90: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
5ba0: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
5bb0: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
5bc0: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61  re, use it verba
5bd0: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  tim...        #.
5be0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
5bf0: 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74  $::binary_direct 5c00: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 5c10: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 e {.. ret 5c20: 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 urn [info binary 5c30: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 5c40: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 5c50: 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 etExternalFileNa 5c60: 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 me { fileName } 5c70: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 5c80: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 5c90: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 5ca0: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 file name as if 5cb0: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 it were located 5cc0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 5cd0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 5ce0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 containing the e 5cf0: 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 xternal binaries 5d00: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 5d10: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 5d20: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 5d30: 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 6e 61 join [getExterna 5d40: 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c lDirectory]$fil
5d50: 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  eName]]..    }..
5d60: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
5d70: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20  inaryFileName {
5d80: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f  fileName {platfo
5d90: 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  rm ""} } {..
5da0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
5db0: 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73  E: Returns the s
5dc0: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61  pecified file na
5dd0: 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65  me as if it were
5de0: 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d   located in the.
5df0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
5e00: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2c  inary directory,
5e10: 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20   discarding any
5e20: 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d  directory inform
5e30: 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20  ation present..
5e40: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in
5e50: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  the file name as
5e60: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
5e70: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
5e80: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
5e90: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
5ea0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66   \..          [f
5eb0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
5ec0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 5ed0: 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 latform [file ta 5ee0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d il$fileName]]].
5ef0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
5f00: 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72  roc getCoreBinar
5f10: 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70 6c 61  yFileName { {pla
5f20: 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61 6e 64  tform ""} {stand
5f30: 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ard false} } {..
5f40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5f50: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74   NOTE: Returns t
5f60: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72  he full path for
5f70: 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69   the file contai
5f80: 6e 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20  ning the SQLite
5f90: 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20  core..      #
5fa0: 20 20 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61      native libra
5fb0: 72 79 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73  ry code for this
5fc0: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73   platform.  Firs
5fd0: 74 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65  t, check and see
5fe0: 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   if..      #
5ff0: 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f     the SQLite co
6000: 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72  re native librar
6010: 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  y has already be
6020: 65 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74  en loaded.  Next
6030: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
6040: 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61   fallback to wha
6050: 74 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20  t the full path
6060: 73 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64  should be, based
6070: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d   on whether the.
6080: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
6090: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
60a0: 6c 79 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  ly is being used
60b0: 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
60c0: 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20   the current..
60d0: 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74      #       plat
60e0: 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  form...      #..
60f0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
6100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
6110: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
6120: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
6130: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
6140: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
6150: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6160: 73 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  s _SQLiteNativeM
6170: 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20  oduleFileName..
6180: 20 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d       } fileName]
6190: 20 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67   == 0 && [string
61a0: 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d   length $fileNam 61b0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 61c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 61d0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 # NOTE: The S 61e0: 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 QLite core nativ 61f0: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c e library has al 6200: 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 ready been loade 6210: 64 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 d via.. # 6220: 20 20 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 the nativ 6230: 65 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f e library pre-lo 6240: 61 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 ader. Return th 6250: 61 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 at file name now 6260: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 6270: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 return$fi
6280: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d  leName..      }.
6290: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
62a0: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
62b0: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ative]} then {..
62c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
62d0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
62e0: 6e 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  n the mixed-mode
62f0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e   assembly file n
6300: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
6310: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
6320: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
6330: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
6340: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
6350: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
6360: 24 70 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d  $platform System 6370: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 6380: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ]].. } else 6390: 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 74 if {$standard} t
63a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
63b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
63c0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74  : Return the nat
63d0: 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72  ive-only standar
63e0: 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  d SQLite library
63f0: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
6400: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6410: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
6420: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
6430: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
6440: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
6450: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 6460: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a sqlite3.dll]].. 6470: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 6480: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6490: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 64a0: 6e 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c n the native-onl 64b0: 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 y interop assemb 64c0: 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 ly file name... 64d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 64e0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 64f0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 ativename \.. 6500: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j 6510: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 oin [getBinaryDi 6520: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f rectory]$platfo
6530: 72 6d 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  rm SQLite.Intero
6540: 70 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d  p.dll]]..      }
6550: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
6560: 70 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69  proc getCommonDi
6570: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
6580: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
6590: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
65a0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
65b0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
65c0: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73  the test scripts
65d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
65e0: 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65  should be locate
65f0: 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20  d.  By default,
6600: 74 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e  this just return
6610: 73 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  s the Eagle..
6620: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
6630: 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
6640: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
6650: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
6660: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
6670: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
6680: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
6690: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 66a0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 66b0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 66c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 66d0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 66e0: 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f e common directo 66f0: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b ry has been set; 6700: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6710: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 6720: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 6730: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6740: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74$::common_direct
6750: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
6760: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
6770: 73 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63  s ::vendor_direc
6780: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
6790: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
67a0: 6e 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64  ngth $::vendor_d 67b0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 67c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 67d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 67e0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 67f0: 66 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 f the vendor dir 6800: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 6810: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 6820: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 6830: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 6840: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 6850: 75 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 urn$::vendor_di
6860: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
6870: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
6880: 78 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72  xists ::tcl_libr
6890: 61 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ary] && \..
68a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
68b0: 67 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  gth $::tcl_libra 68c0: 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ry] > 0 && \.. 68d0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 [file is 68e0: 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c directory$::tcl
68f0: 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20  _library]} then
6900: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
6910: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
6920: 65 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20  e variable with
6930: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  the location of
6940: 74 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61  the script libra
6950: 72 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23  ry is..        #
6960: 20 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61         set and a
6970: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72  ppears to be a r
6980: 65 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69  eal directory (i
6990: 2e 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64  .e. not embedded
69a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
69b0: 20 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29    within a file)
69c0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65  ; therefore, use
69d0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
69e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
69f0: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a  $::tcl_library.. 6a00: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 6a10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6a20: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 # NOTE: Fallb 6a30: 61 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 ack to the direc 6a40: 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 tory containing 6a50: 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d the executable.. 6a60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6a70: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f return [info 6a80: 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 binary].. 6a90: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 6aa0: 20 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 proc getDatabas 6ab0: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 6ac0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 6ad0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 6ae0: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 cedure returns t 6af0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 he directory whe 6b00: 72 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 re the test data 6b10: 62 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 bases.. # 6b20: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c should be l 6b30: 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 ocated. By defa 6b40: 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 ult, this just u 6b50: 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 ses the temporar 6b60: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 6b70: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 directory confi 6b80: 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 gured for this s 6b90: 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d ystem... #. 6ba0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 6bb0: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 exists ::databa 6bc0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 6bd0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 6be0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
6bf0: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f  database_directo
6c00: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
6c10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
6c20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
6c30: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
6c40: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
6c50: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6c60: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6c70: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6c80: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6c90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6ca0: 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61  return $::databa 6cb0: 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 se_directory.. 6cc0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 6cd0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr 6ce0: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 6cf0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 6d00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
6d10: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
6d20: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
6d30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6d40: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
6d50: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
6d60: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
6d70: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
6d80: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6d90: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6da0: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
6db0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6dc0: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc 6dd0: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. 6de0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 6df0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get 6e00: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. 6e10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 6e20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 6e30: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector 6e40: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 6e50: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 6e60: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 6e70: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 6e80: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 6e90: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 mporary files.. 6ea0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho 6eb0: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 uld be located. 6ec0: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 By default, thi 6ed0: 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 s just uses the 6ee0: 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 temporary.. 6ef0: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f # directo 6f00: 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f ry configured fo 6f10: 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a r this system... 6f20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 6f30: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 6f40: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 6f50: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 6f60: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6f70: 65 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 ength$::tempora
6f80: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
6f90: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
6fa0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6fb0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
6fc0: 6f 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  on of the tempor
6fd0: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
6fe0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
6ff0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
7000: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
7010: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
7020: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
7030: 6e 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64  n $::temporary_d 7040: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 7050: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 7060: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 exists ::scratch 7070: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 7080: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 7090: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 ing length$::sc
70a0: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
70b0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
70c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
70d0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
70e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72  ation of the scr
70f0: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68  atch directory h
7100: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
7110: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
7120: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
7130: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
7140: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
7150: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69  rn $::scratch_di 7160: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 7170: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 7180: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 return [getTemp 7190: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 oraryPath].. 71a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 71b0: 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 74 4f proc getTestO 71c0: 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 verridesPreamble 71d0: 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 { {extraVarName 71e0: 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 s ""} } {.. 71f0: 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c set varNames [l 7200: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ist].... #. 7210: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 7220: 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 f available, sta 7230: 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 73 74 rt with the mast 7240: 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 er list of test 7250: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. 7260: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 7270: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 7280: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 7290: 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 sts ::test_overr 72a0: 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ides] && \.. 72b0: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 [llength$
72c0: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73  ::test_overrides
72d0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
72e0: 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
72f0: 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a  end varNames $:: 7300: 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a test_overrides.. 7310: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 7320: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 7330: 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62 : If requested b 7340: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 y our caller, ad 7350: 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c d any additional 7360: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 7370: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 20 74 # names t 7380: 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 o copy now... 7390: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 73a0: 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 61 56 [llength$extraV
73b0: 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68  arNames] > 0} th
73c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76  en {..        ev
73d0: 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61  al lappend varNa
73e0: 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e 61 6d  mes $extraVarNam 73f0: 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 es.. }.... 7400: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7410: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 7420: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment 7430: 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 to be returned b 7440: 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 61 63 y processing eac 7450: 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 h.. # 7460: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 variable name a 7470: 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 6e 65 nd adding the ne 7480: 63 65 63 65 73 73 61 72 79 20 73 63 72 69 70 74 cecessary script 7490: 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a fragments for.. 74a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 61 # ea 74b0: 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 ch one... # 74c0: 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu 74d0: 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 lt "".... f 74e0: 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 oreach varName$
74f0: 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  varNames {..
7500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7510: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
7520: 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 61   qualified globa
7530: 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  l variable name.
7540: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
7550: 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56 61 72       set fullVar
7560: 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73  Name [appendArgs
7570: 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d   :: $varName]... 7580: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 7590: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does 75a0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 65 78 the variable ex 75b0: 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e 74 65 ist in this inte 75c0: 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 3f rpreter context? 75d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 75e0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 75f0: 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 xists$fullVarNa
7600: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
7610: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7620: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 65      # NOTE: Appe
7630: 6e 64 20 61 20 73 63 72 69 70 74 20 66 72 61 67  nd a script frag
7640: 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75  ment to the resu
7650: 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63 6f 72  lt that will cor
7660: 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20  rectly..
7670: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 61    #       copy a
7680: 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c  ny contained val
7690: 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e  ue to another in
76a0: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78  terpreter contex
76b0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
76c0: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
76d0: 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 74  d result \n "set
76e0: 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20   " $fullVarName 76f0: 22 20 5c 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c " \{" [set$full
7700: 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20  VarName] \}..
7710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
7720: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7730: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
7740: 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73   result contains
7750: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72   one or more scr
7760: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61  ipt fragments, a
7770: 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23  ppend a..      #
7780: 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d         newline..
7790: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
77a0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
77b0: 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d  th $result] > 0} 77c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 77d0: 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c append result \ 77e0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 77f0: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
7800: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
7810: 20 20 70 72 6f 63 20 67 65 74 41 70 70 44 6f 6d    proc getAppDom
7820: 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70  ainPreamble { {p
7830: 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66 66 69  refix ""} {suffi
7840: 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  x ""} } {..
7850: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
7860: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
7870: 20 72 65 74 75 72 6e 73 20 61 20 74 65 73 74 20   returns a test
7880: 73 65 74 75 70 20 73 63 72 69 70 74 20 66 72 61  setup script fra
7890: 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66  gment suitable f
78a0: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  or..      #
78b0: 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 20    evaluation by
78c0: 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  an interpreter c
78d0: 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f  reated in an iso
78e0: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
78f0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
7900: 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 63   domain.  The sc
7910: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65  ript fragment be
7920: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c  ing returned wil
7930: 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65 64 20  l be surrounded
7940: 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  by..      #
7950: 20 20 74 68 65 20 70 72 65 66 69 78 20 61 6e 64    the prefix and
7960: 20 73 75 66 66 69 78 20 22 73 63 72 69 70 74 20   suffix "script
7970: 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65 63 69  fragments" speci
7980: 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  fied by our call
7990: 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  er,..      #
79a0: 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68 65 20     if any.  The
79b0: 65 6e 74 69 72 65 20 73 63 72 69 70 74 20 62 65  entire script be
79c0: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c  ing returned wil
79d0: 6c 20 62 65 20 73 75 62 73 74 69 74 75 74 65 64  l be substituted
79e0: 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20 20 20   via..      #
79f0: 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20      [subst], in
7a00: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f  the context of o
7a10: 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72  ur caller, befor
7a20: 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  e being returned
7a30: 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ...      #
7a40: 20 54 68 69 73 20 73 74 65 70 20 69 73 20 6e 65   This step is ne
7a50: 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 20  cessary so that
7a60: 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e  some limited con
7a70: 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  text information
7a80: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
7a90: 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74   primarily relat
7aa0: 65 64 20 74 6f 20 74 68 65 20 74 65 73 74 69 6e  ed to the testin
7ab0: 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 63  g directories, c
7ac0: 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72 72 65  an be transferre
7ad0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
7ae0: 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
7af0: 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61  ter in the isola
7b00: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ted application
7b10: 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69  domain, making i
7b20: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7b30: 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73   able to success
7b40: 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20  fully run tests
7b50: 74 68 61 74 20 72 65 71 75 69 72 65 20 6f 6e 65  that require one
7b60: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d   or more of the.
7b70: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
7b80: 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74  iles in one of t
7b90: 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 63  he testing direc
7ba0: 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 73  tories.  Callers
7bb0: 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d   should keep in.
7bc0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
7bd0: 69 6e 64 20 74 68 61 74 20 74 68 65 20 74 65 73  ind that the tes
7be0: 74 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  t script fragmen
7bf0: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64  t being returned
7c00: 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d   cannot rely on.
7c10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
7c20: 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  ny script librar
7c30: 79 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 61  y procedures tha
7c40: 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 64  t are not provid
7c50: 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 0d  ed by the Eagle.
7c60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c  .      #       l
7c70: 69 62 72 61 72 79 20 70 61 63 6b 61 67 65 20 28  ibrary package (
7c80: 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65  i.e. "init.eagle
7c90: 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  "), including th
7ca0: 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62 79 0d  ose provided by.
7cb0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
7cc0: 68 65 20 45 61 67 6c 65 20 74 65 73 74 20 70 61  he Eagle test pa
7cd0: 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 68  ckage, unless th
7ce0: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  e file containin
7cf0: 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 64  g them is loaded
7d00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7d10: 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d  manually via som
7d20: 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 73  e other mechanis
7d30: 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75  m (e.g. by inclu
7d40: 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61 74 65  ding appropriate
7d50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7d60: 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  [package require
7d70: 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f  ] or [source] co
7d80: 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20 70 72  mmands in the pr
7d90: 65 66 69 78 20 6f 72 20 73 75 66 66 69 78 0d 0a  efix or suffix..
7da0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63        #       sc
7db0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 29 2e  ript fragments).
7dc0: 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69    Also, all vari
7dd0: 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references
7de0: 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a  and all nested..
7df0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
7e00: 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f  mmands (i.e. tho
7e10: 73 65 20 69 6e 20 73 71 75 61 72 65 20 62 72 61  se in square bra
7e20: 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 64  ckets) contained
7e30: 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20   in the final..
7e40: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72       #       scr
7e50: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77 69 6c  ipt fragment wil
7e60: 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67 20 65  l end up being e
7e70: 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20  valuated in the
7e80: 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a  context of the..
7e90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
7ea0: 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65  lling interprete
7eb0: 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 61  r and not the ta
7ec0: 72 67 65 74 20 69 6e 74 65 72 70 72 65 74 65 72  rget interpreter
7ed0: 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 0d   created in the.
7ee0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
7ef0: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
7f00: 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73  ion domain unles
7f10: 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 67  s the dollar sig
7f20: 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 65  ns and/or square
7f30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7f40: 62 72 61 63 6b 65 74 73 20 61 72 65 20 73 70 65  brackets are spe
7f50: 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 69  cially quoted wi
7f60: 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d  th backslashes..
7f70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7f80: 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20  return [uplevel
7f90: 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61  1 [list subst [a
7fa0: 70 70 65 6e 64 41 72 67 73 20 24 70 72 65 66 69  ppendArgs $prefi 7fb0: 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 x {.. if 7fc0: 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 {[hasRuntimeOpti 7fd0: 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e on native]} then 7fe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 7ff0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 ject invoke Inte 8000: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 8010: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 e AddRuntimeOpti 8020: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 on native.. 8030: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 }.. } [g 8040: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 etTestOverridesP 8050: 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 reamble [list pa 8060: 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d th test_channel] 8070: 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 ]$suffix]]]..
8080: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
8090: 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c   tryCopyExternal
80a0: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  File {..
80b0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c      fileName {pl
80c0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46  atform ""} {newF
80d0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72  ileName ""} {ver
80e0: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  bose false} } {.
80f0: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
8100: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78  eFileName [getEx
8110: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24  ternalFileName $8120: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 8130: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 8140: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
8150: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
8160: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb 8170: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 8180: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
8190: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
81a0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
81b0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
81c0: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20  skipped copying
81d0: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22  external file \"
81e0: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 81f0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 8200: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 "\", it does 8210: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. 8220: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 8230: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. 8240: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 8250: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
8260: 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d  ewFileName] > 0}
8270: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8280: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
8290: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
82a0: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e  leName $newFileN 82b0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
82c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
82d0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
82e0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
82f0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 8300: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
8310: 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  m]..      }....
8320: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44       set targetD
8330: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
8340: 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69  irname $targetFi 8350: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 8360: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 8370: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c if {![fil 8380: 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 e exists$target
8390: 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  Directory]} then
83a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   {..          fi
83b0: 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74  le mkdir $target 83c0: 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. 83d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 }.. fi 83e0: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
83f0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $8400: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. 8410: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t 8420: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 8430: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
8440: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
8450: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8460: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78 74  "---- copied ext
8470: 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20  ernal file from
8480: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  \"" $sourceFileN 8490: 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c ame "\" to \"" \ 84a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 ..$t
84b0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22  argetFileName \"
84c0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  \n]..      } els
84d0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
84e0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 84f0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 8500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 8510: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f --- failed to co 8520: 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 py external file 8530: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
8540: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
8550: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20           "\" to
8560: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e  \"" $targetFileN 8570: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 8580: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 8590: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69 proc tryCopyBi 85a0: 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20 20 naryFile {.. 85b0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName 85c0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { 85d0: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 newFileName ""} 85e0: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 {verbose false} 85f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 } {.. set s 8600: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 ourceFileName [g 8610: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 8620: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74$fileName $plat 8630: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 form].... i 8640: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists 8650: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
8660: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
8670: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} 8680: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8690: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
86a0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
86b0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
86c0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70        "---- skip
86d0: 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61  ped copying bina
86e0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75  ry file \"" $sou 86f0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. 8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 8710: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex 8720: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. 8730: 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 }.. retu 8740: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rn.. }.... 8750: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 8760: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 length$newFile
8770: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
8780: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  {..        set t
8790: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
87a0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
87b0: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c  $newFileName$pl
87c0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
87d0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
87e0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
87f0: 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ame [getBuildFil
8800: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20  eName $fileName 8810: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20$platform]..
8820: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74    }....      set
8830: 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79   targetDirectory
8840: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $8850: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d targetFileName]. 8860: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 8870: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 tch {.. i 8880: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists 8890: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72$targetDirector
88a0: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
88b0: 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72        file mkdir
88c0: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72   $targetDirector 88d0: 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 y.. }.. 88e0: 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 file copy 88f0: 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 -force$sourceFi
8900: 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69  leName $targetFi 8910: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d leName.. }] 8920: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 8930: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
8940: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
8950: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
8960: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
8970: 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65  pied binary file
8980: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63   from \"" $sourc 8990: 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f eFileName "\" to 89a0: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 89b0: 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e$targetFileN
89c0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
89d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
89e0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 89f0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 8a00: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 8a10: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 "---- failed 8a20: 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 20 to copy binary 8a30: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
8a40: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
8a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22  .            "\"
8a60: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46   to \"" $targetF 8a70: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. 8a80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 8a90: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f .. proc tryCo 8aa0: 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 pyBuildFile {.. 8ab0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN 8ac0: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" 8ad0: 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 } {newFileName " 8ae0: 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 "} {verbose fals 8af0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se 8b00: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName 8b10: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa 8b20: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl 8b30: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... 8b40: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 8b50: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
8b60: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
8b70: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 8b80: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 8b90: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
8ba0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
8bb0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
8bc0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
8bd0: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75  ipped copying bu
8be0: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f  ild file \"" $so 8bf0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a urceFileName \.. 8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 8c10: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e 8c20: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. 8c30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.. ret 8c40: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... 8c50: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 8c60: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c g length$newFil
8c70: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  eName] > 0} then
8c80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
8c90: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
8ca0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
8cb0: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24  e $newFileName$
8cc0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20  platform]..
8cd0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
8ce0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
8cf0: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
8d00: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa 8d10: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 me$platform]..
8d20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
8d30: 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74  set targetDirect
8d40: 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ory [file dirnam
8d50: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam 8d60: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 8d70: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 8d80: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 8d90: 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 sts$targetDirec
8da0: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
8db0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b           file mk
8dc0: 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63  dir $targetDirec 8dd0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d tory.. }. 8de0: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f . file co 8df0: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 py -force$sourc
8e00: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65  eFileName $targe 8e10: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 tFileName.. 8e20: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { 8e30: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 8e40: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
8e50: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
8e60: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
8e70: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69   copied build fi
8e80: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 8e90: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" 8ea0: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. 8eb0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
8ec0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
8ed0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
8ee0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 8ef0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 8f00: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 8f10: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 8f20: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 ed to copy build 8f30: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
8f40: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
8f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
8f60: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target 8f70: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 8f80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 8f90: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 ... proc tryD 8fa0: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 8fb0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 { fileName {plat 8fc0: 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 form ""} {verbos 8fd0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 e false} } {.. 8fe0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 8ff0: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 9000: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p 9010: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... 9020: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 9030: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
9040: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9050: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th 9060: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9070: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
9080: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
9090: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
90a0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64     "---- skipped
90b0: 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79   deleting binary
90c0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 90d0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 90e0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe 90f0: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 9100: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 9110: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. 9120: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 9130: 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 {[catch {file de 9140: 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d lete$fileName}]
9150: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
9160: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 9170: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 9180: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 9190: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 "---- de 91a0: 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 6c leted binary fil 91b0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
91c0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
91d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
91e0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 91f0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 9200: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 9210: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to 9220: 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69 delete binary fi 9230: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
9240: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
9250: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
9260: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 69  roc tryDeleteBui
9270: 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  ldFile { fileNam
9280: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
9290: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20  {verbose false}
92a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
92b0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c  ileName [getBuil
92c0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  dFileName $fileN 92d0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
92e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
92f0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 9300: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 9310: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
9320: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
9330: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 9340: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 9350: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 9360: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 9370: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 kipped deleting 9380: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 build file \""$
9390: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
93a0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
93b0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
93c0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
93d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
93e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
93f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69    if {[catch {fi
9400: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e  le delete $fileN 9410: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ame}] == 0} then 9420: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 9430: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
9440: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
9450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
9460: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64  -- deleted build
9470: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 9480: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 9490: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 94a0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
94b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
94c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
94d0: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
94e0: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64   to delete build
94f0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 9500: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 9510: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 9520: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73 proc tryCopyAs 9530: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 sembly {.. 9540: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b fileName { 9550: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 platform ""} {pd 9560: 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 b true} {verbose 9570: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 9580: 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 tryCopyBuildF 9590: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ile$fileName $p 95a0: 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62 latform ""$verb
95b0: 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ose....      if
95c0: 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20  {$pdb} then {.. 95d0: 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 tryCopyBu 95e0: 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 ildFile [appendA 95f0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 9600: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d [file rootnam 9610: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 e$fileName] .pd
9620: 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20  b] $platform "" 9630: 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20$verbose..
9640: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
9650: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41   proc tryDeleteA
9660: 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20  ssembly {..
9670: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20         fileName
9680: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70  {platform ""} {p
9690: 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73  db true} {verbos
96a0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  e false} } {..
96b0: 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e      tryDeleteBin
96c0: 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  aryFile $fileNam 96d0: 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 e$platform $ver 96e0: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 bose.... if 96f0: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a {$pdb} then {..
9700: 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
9710: 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70  eBinaryFile [app
9720: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
9730: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f         [file roo
9740: 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  tname $fileName] 9750: 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d .pdb]$platform
9760: 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20   $verbose.. 9770: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 9780: 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 proc tryLoadAs 9790: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d sembly { fileNam 97a0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 97b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 } {.. set f 97c0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina 97d0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
97e0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. 97f0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 9800: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 tch {.. s 9810: 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a et assembly [obj 9820: 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 ect load -loadty 9830: 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 pe File -alias$
9840: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
9850: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b   }] == 0} then {
9860: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9870: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77       # NOTE: Now
9880: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73  , add the necess
9890: 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61  ary test constra
98a0: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  int...        #.
98b0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
98c0: 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f  traint [file roo
98d0: 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c  tname [file tail
98e0: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a   $fileName]].... 98f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9900: 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 # NOTE: Grab 9910: 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d the image runtim 9920: 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 e version from t 9930: 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61 he assembly beca 9940: 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 use.. # 9950: 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 65 73 several tes 9960: 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 ts rely on it ha 9970: 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76 ving a certain v 9980: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 alue... # 9990: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 99a0: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 99b0: 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 rgs [file tail$
99c0: 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20  fileName] _ \..
99d0: 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 73 73             [$ass 99e0: 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 embly ImageRunti 99f0: 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 meVersion]].... 9a00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 9a10: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 9a20: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f the full path o 9a30: 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c f the loaded fil 9a40: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 9a50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 return$f
9a60: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d  ileName..      }
9a70: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
9a80: 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   ""..    }.....
9a90: 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65     proc isSQLite
9aa0: 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20  Ready {} {..
9ab0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9ac0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
9ad0: 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f  e must return no
9ae0: 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74  n-zero only if t
9af0: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  he SQLite native
9b00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
9b10: 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 20  library and the
9b20: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
9b30: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  te managed assem
9b40: 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a  bly are loaded..
9b50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
9b60: 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20  d ready for use
9b70: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
9b80: 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74  e.  Currently, t
9b90: 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20  his procedure..
9ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
9bb0: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e  uld be called on
9bc0: 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b 74 72  ly after the [tr
9bd0: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70  yLoadAssembly] p
9be0: 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20  rocedure has..
9bf0: 20 20 20 20 23 20 20 20 20 20 20 20 62 65 65 6e      #       been
9c00: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65   called to probe
9c10: 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e   for the System.
9c20: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61  Data.SQLite mana
9c30: 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ged assembly..
9c40: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20      #       and
9c50: 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c  the [checkForSQL
9c60: 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68  ite] procedure h
9c70: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74  as been called t
9c80: 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20  o probe for..
9c90: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53     #       the S
9ca0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62  QLite native lib
9cb0: 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c  rary; otherwise,
9cc0: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   this procedure
9cd0: 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20  will simply..
9ce0: 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79     #       alway
9cf0: 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a  s return zero...
9d00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
9d10: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20  eturn [expr {..
9d20: 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73         [haveCons
9d30: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61  traint System.Da
9d40: 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68  ta.SQLite] && [h
9d50: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  aveConstraint SQ
9d60: 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d  Lite]..      }].
9d70: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
9d80: 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 6e 65  roc matchMachine
9d90: 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d   { platform } {.
9da0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9db0: 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79  # NOTE: An empty
9dc0: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20   string for the
9dd0: 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74  platform means t
9de0: 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73  hat the build is
9df0: 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20   not..      #
9e00: 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20      [primarily]
9e10: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20  a native build;
9e20: 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c  therefore, it al
9e30: 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20  ways matches...
9e40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
9e50: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
9e60: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30   $platform] == 0 9e70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 9e80: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 9e90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 9ea0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 9eb0: 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 Does the specif 9ec0: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 ied platform mat 9ed0: 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 ch up to the cur 9ee0: 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 rent process?.. 9ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9f00: 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b {$platform eq [
9f10: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
9f20: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor 9f30: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 m(machine)]} the 9f40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 9f50: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 9f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 9f70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 9f80: 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f specified platfo 9f90: 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 rm does not matc 9fa0: 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c h up with the pl 9fb0: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 atform.. # 9fc0: 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 for the cu 9fd0: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a rrent process... 9fe0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 9ff0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. a000: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc a010: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 checkForSQLiteBu a020: 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b ilds { channel { a030: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 select false} } a040: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. a050: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check a060: 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 62 for every possib a070: 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 le valid combina a080: 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 tion of values u a090: 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 sed when.. a0a0: 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 # locating a0b0: 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f out the build o a0c0: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c utput directory, a0d0: 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76 showing each av a0e0: 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 ailable.. # a0f0: 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 72 build var a100: 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 iation along the a110: 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a way... #.. a120: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na a130: 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 tive [list false a140: 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 true] {.. a150: 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b foreach year [ a160: 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b getBuildYears] { a170: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore a180: 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ach configuratio a190: 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 n [getBuildConfi a1a0: 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 gurations] {.. a1b0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. a1c0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: a1d0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the a1e0: 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20 effective build a1f0: 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 platform. This a200: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 is.. a210: 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e # based on a220: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 whether or not a230: 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 a [primarily] na a240: 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 tive build.. a250: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # a260: 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 is being used. a270: 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 For [primarily] a280: 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 non-native build a290: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s,.. a2a0: 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69 6c # this wil a2b0: 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74 l be an empty st a2c0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 ring... a2d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. a2e0: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b set platform [ a2f0: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d getBuildPlatform a300: 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20$native]....
a310: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $a320: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA a330: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. a340: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che a350: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System a360: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 .Data.SQLite bui a370: 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a ld \"" [expr \.. a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a390: 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 {$native ? "nati
a3a0: 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70  ve/" : ""}] [exp
a3b0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  r {[string lengt
a3c0: 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h \..
a3d0: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20       $platform] a3e0: 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 > 0 ? [appendArg a3f0: 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a s$platform /] :
a400: 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20   ""}] $year \.. a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f / a420: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
a430: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20  "\"... "]....
a440: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
a450: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
a460: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
a470: 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74  qualified direct
a480: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65  ory where the ne
a490: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20  cessary..
a4a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d       #       com
a4b0: 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74  ponents for Syst
a4c0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73  em.Data.SQLite s
a4d0: 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d  hould be found..
a4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
a500: 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42  directory [joinB
a510: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e  uildDirectory $n a520: 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 ative \.. a530: 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 [getBui a540: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d ldBaseDirectory] a550: 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d$year $platform a560: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d$configuration]
a570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
a580: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
a590: 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65   NOTE: Do the ne
a5a0: 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78  cessary files ex
a5b0: 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c  ist?  Currently,
a5c0: 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d   no other steps.
a5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
a5e0: 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74       are taken t
a5f0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62 75  o verify this bu
a600: 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20  ild is actually
a610: 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20  viable...
a620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a630: 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64      if {[isBuild
a640: 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76  Available $nativ a650: 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 e$directory]} t
a660: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
a670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a680: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68        # NOTE: Wh
a690: 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d  en in "select" m
a6a0: 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c  ode, automatical
a6b0: 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69  ly select the fi
a6c0: 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rst..
a6d0: 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c     #       avail
a6e0: 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79  able build of Sy
a6f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
a700: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
a710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a720: 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74  #       immediat
a730: 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ely...
a740: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
a750: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74       if {$select a760: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e && [matchMachin a770: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 e$platform]} th
a780: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
a790: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
a7a0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
a7b0: 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69   Manually overri
a7c0: 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64  de all the build
a7d0: 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63   directory selec
a7e0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..
a7f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
a800: 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69  lated test setti
a810: 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ngs in order to
a820: 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c 64  force this build
a830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a840: 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73    #       of Sys
a850: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
a860: 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  to be used...
a870: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a890: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
a8a0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
a8b0: 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  ive [expr {$nati a8c0: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ve ? \.. a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 41 64 64 "Add a8e0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a RuntimeOption" : a8f0: 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f "RemoveRuntimeO a900: 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d ption"}] native. a910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... a920: 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 set ::test_ye a930: 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 20 ar$year..
a940: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
a950: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70  test_platform $p a960: 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. a970: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t a980: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio a990: 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e n$configuration
a9a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
a9b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann a9c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ a9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a9e0: 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c 65 "yes, sele a9f0: 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b 24 cted (" [expr {$
aa00: 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65  native ? "native
aa10: 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  /" : ""}] \..
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa30: 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20   [expr {[string
aa40: 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform aa50: 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 ] > 0 ? [appendA aa60: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. aa70: 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74$plat
aa80: 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24  form /] : ""}] $aa90: 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 year /$configur
aaa0: 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a  ation ")\n"]....
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aac0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
aad0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
aae0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
aaf0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan ab00: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. ab10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. ab20: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { ab30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ab40: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
ab50: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o\n..
ab60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
ab70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
ab80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
ab90: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d  urn false..    }
aba0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
abb0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65  eckForSQLiteRele
abc0: 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ases { channel {
abd0: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20  select false} }
abe0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
abf0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
ac00: 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 65  for past release
ac10: 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61  s of System.Data
ac20: 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64  .SQLite in the d
ac30: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
ac40: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65  #       containe
ac50: 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d  d in the "System
ac60: 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e  .Data.SQLite" en
ac70: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
ac80: 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20  le, if..      #
ac90: 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a        present...
aca0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
acb0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
acc0: 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74  ::env(System.Dat
acd0: 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d  a.SQLite)] && \.
ace0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
acf0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76  ng length $::env ad00: 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c (System.Data.SQL ad10: 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ite)] > 0} then ad20: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. ad30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu ad40: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu ad50: 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 alified director ad60: 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 y where the nece ad70: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 ssary.. # ad80: 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 component ad90: 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 s for System.Dat ada0: 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 a.SQLite should adb0: 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 be found... adc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se add0: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c t directory [fil ade0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi adf0: 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. ae00: 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79$::env(Sy
ae10: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
ae20: 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72  ) [getReleaseVer
ae30: 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20  sion]]]....
ae40: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe ae50: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. ae60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- ae70: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for ae80: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi ae90: 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c te release \"" \ aea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 ..$d
aeb0: 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20  irectory "\"...
aec0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  "]....        if
aed0: 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69   {[isReleaseAvai
aee0: 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79  lable $directory aef0: 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e platform]} then af00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if af10: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length af20: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30$platform] == 0
af30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
af40: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
af50: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20  rm unknown..
af60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
af70: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74       if {$select af80: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e && [matchMachin af90: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 e$platform]} th
afa0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
afb0: 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69    set ::build_di
afc0: 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f  rectory $directo afd0: 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ry.... afe0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
aff0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
b000: 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24  s, selected (" $b010: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. b020: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ... r b030: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. b040: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. b050: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput b060: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
b070: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24  ndArgs "yes (" $b080: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. b090: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. b0a0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. b0b0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs b0c0: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d$channel no\n...
b0d0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
b0e0: 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d  ch path [lsort -
b0f0: 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65  decreasing [file
b100: 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79   list $directory b110: 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 *]] {.. b120: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex b130: 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b ists$path] && [
b140: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79  file isdirectory
b150: 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d   $path]} then {. b160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t b170: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
b180: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b1a0: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
b1b0: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
b1c0: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22  Lite release \""
b1d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b1e0: 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e        $path "\". b1f0: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 .. "].... b200: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 if {[isRe b210: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 leaseAvailable$
b220: 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20  path platform]}
b230: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b240: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
b250: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat b260: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e form] == 0} then b270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. b280: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f set platfo b290: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 rm unknown.. b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... b2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b2c0: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 if {$select &&
b2d0: 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70  [matchMachine $p b2e0: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { b2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. b300: 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f set ::build_ b310: 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d directory$path.
b320: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
b330: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan b340: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs b350: 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 "yes, selected ( b360: 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e "$platform ")\n
b370: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
b380: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
b390: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rue..
b3a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3c0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b3d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 [appendArgs "yes b3e0: 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 ("$platform ")
b3f0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
b400: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
b410: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
b420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
b430: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b440: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 no\n.. b450: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. b460: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. b470: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. b480: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. b490: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
b4a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b4b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b4c0: 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e  "---- environmen
b4d0: 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73  t variable \"Sys
b4e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
b4f0: 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20  " is not " \..
b500: 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20            "set,
b510: 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66  skipping check f
b520: 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e  or releases...\n
b530: 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  "]..      }....
b540: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
b550: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
b560: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51   proc checkForSQ
b570: 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68  LiteLibrary { ch
b580: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20  annel } {..
b590: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b5a0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f b5b0: 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c or SQLite core l b5c0: 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 ibrary... ".... b5d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch b5e0: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec b5f0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags b600: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. b610: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System b620: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL b630: 69 74 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 ite3 SQLiteVersi b640: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 on.. } vers b650: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then b660: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. b670: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch b680: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 eck if the retur b690: 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 ned version was b6a0: 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 null. If so, ma b6b0: 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 ke it easy.. b6c0: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 # to s b6d0: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d pot... #. b6e0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st b6f0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 ring length$ver
b700: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
b710: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
b720: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a  t version null..
b730: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
b740: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b750: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
b760: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73  to query the Fos
b770: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74  sil source ident
b780: 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51  ifier for the SQ
b790: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20  Lite..        #
b7a0: 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61        core libra
b7b0: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ry...        #..
b7c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
b7d0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
b7e0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
b7f0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
b800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
b810: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
b820: 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69  ite.SQLite3 SQLi
b830: 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  teSourceId..
b840: 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d      } sourceId]}
b850: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b860: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
b870: 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65  # NOTE: We faile
b880: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46  d to query the F
b890: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65  ossil source ide
b8a0: 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20  ntifier...
b8b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
b8c0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e   set sourceId un
b8d0: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d  known..        }
b8e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
b8f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
b900: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
b910: 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72  rned Fossil sour
b920: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61  ce identifier wa
b930: 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20  s null.  If..
b940: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
b950: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f   make it easy to
b960: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20   spot...
b970: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
b980: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s b990: 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 ourceId] == 0} t b9a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. b9b0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu b9c0: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ll.. }... b9d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. b9e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c # NOTE: Yes, b9f0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core ba00: 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73 library appears ba10: 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 to be available ba20: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. ba30: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra ba40: 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 int SQLite.... ba50: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
ba60: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
ba70: 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f   "yes (" $versio ba80: 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 n " "$sourceId
ba90: 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20  ")\n"]..      }
baa0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
bab0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n bac0: 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 o\n.. }.. bad0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc bae0: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 checkForSQLiteI baf0: 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c nterop { channel bb00: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput bb10: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
bb20: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51   checking for SQ
bb30: 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
bb40: 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  embly... "....
bb50: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
bb60: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
bb70: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
bb80: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
bb90: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
bba0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
bbb0: 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69  te3 InteropVersi
bbc0: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73  on..      } vers
bbd0: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
bbe0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
bbf0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
bc00: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
bc10: 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20  ned version was
bc20: 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61  null.  If so, ma
bc30: 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20  ke it easy..
bc40: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73      #       to s
bc50: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  pot...        #.
bc60: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
bc70: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver bc80: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then bc90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se bca0: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a t version null.. bcb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... bcc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bcd0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt bce0: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos bcf0: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident bd00: 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 ifier for the SQ bd10: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 Lite.. # bd20: 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 core libra bd30: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ry... #.. bd40: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat bd50: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. bd60: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f bd70: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic bd80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. bd90: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL bda0: 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 ite.SQLite3 Inte bdb0: 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 ropSourceId.. bdc0: 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d } sourceId] bdd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bde0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. bdf0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c # NOTE: We fail be00: 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 ed to query the be10: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id be20: 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 entifier... be30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. be40: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 set sourceId u be50: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. be60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. be70: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: be80: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret be90: 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 urned Fossil sou bea0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 rce identifier w beb0: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 as null. If.. bec0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so bed0: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 , make it easy t bee0: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 o spot... bef0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { bf00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
bf10: 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
bf20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bf30: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
bf40: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
bf50: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
bf60: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
bf70: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74  , the SQLite int
bf80: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70  erop assembly ap
bf90: 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69  pears to be avai
bfa0: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...
bfb0: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
bfc0: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 49  nstraint SQLiteI
bfd0: 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20 20 20  nterop....
bfe0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel bff0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 [appendArgs "ye c000: 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 s ("$version "
c010: 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e  " $sourceId ")\n c020: 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 "].. } else c030: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput c040: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
c050: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
c060: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
c070: 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e  ckForSQLiteDefin
c080: 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e  eConstant { chan
c090: 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20  nel name } {..
c0a0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann c0b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- c0d0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S c0e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit c0f0: 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e e define constan c100: 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 t \""$name \..
c110: 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20           "\"...
c120: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  "]....      if {
c130: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
c140: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
c150: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
c160: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
c170: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
c180: 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69  ite.SQLite3 Defi
c190: 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  neConstants..
c1a0: 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74     } defineConst
c1b0: 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ants] == 0} then
c1c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
c1d0: 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact
c1e0: 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43  -nocase $defineC c1f0: 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 onstants$name]
c200: 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20  != -1} then {..
c210: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
c220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
c230: 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63  s, this define c
c240: 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62  onstant was enab
c250: 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e  led when the man
c260: 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  aged..
c270: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
c280: 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a   was compiled...
c290: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
c2a0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
c2b0: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
c2c0: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e   defineConstant.
c2d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c2e0: 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20  te. $name].... c2f0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
c300: 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..
c310: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
c320: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c330: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. c340: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. c350: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c360: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
c370: 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20   error\n..
c380: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
c390: 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d   proc getDateTim
c3a0: 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20  eFormat {} {..
c3b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
c3c0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
c3d0: 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72  ure simply retur
c3e0: 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22  ns the "default"
c3f0: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
c400: 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20   used..      #
c410: 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74       by the test
c420: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23   suite...      #
c430: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
c440: 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74  o exists ::datet
c450: 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c  ime_format] && \
c460: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
c470: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61  ing length $::da c480: 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e tetime_format] > c490: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. c4a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # c4b0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th c4c0: 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 e manually overr c4d0: 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 idden value for c4e0: 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 the DateTime for c4f0: 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d mat... #. c500: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return c510: 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d$::datetime_form
c520: 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  at..      } else
c530: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
c540: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
c550: 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31  eturn an ISO8601
c560: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
c570: 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
c580: 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20   SQLite,..
c590: 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d    #       System
c5a0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e  .Data.SQLite, an
c5b0: 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72  d suitable for r
c5c0: 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69  ound-tripping wi
c5d0: 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  th the..
c5e0: 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65  #       DateTime
c5f0: 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72   class of the fr
c600: 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69  amework.  If thi
c610: 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67  s value is chang
c620: 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ed,..        #
c630: 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73       various tes
c640: 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20  ts may fail...
c650: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c660: 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d   return "yyyy-MM
c670: 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46  -dd HH:mm:ss.FFF
c680: 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d  FFFFK"..      }.
c690: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
c6a0: 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f  roc enumerableTo
c6b0: 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c  List { enumerabl
c6c0: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  e } {..      set
c6d0: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a   result [list]..
c6e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
c6f0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d  ing length $enum c700: 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 erable] == 0 || c710: 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20 22$enumerable eq "
c720: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {..
c730: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72         return $r c740: 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a esult.. }.. c750: 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 .. object f c760: 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69 74 oreach -alias it c770: 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b em$enumerable {
c780: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
c790: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 74  tring length $it c7a0: 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d em] > 0} then {. c7b0: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 . lappe c7c0: 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65 6d nd result [$item
c7d0: 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20   ToString]..
c7e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
c7f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $c800: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c result.. }... c810: 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 68 .. proc catch c820: 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72 69 AndReturn { scri c830: 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20 66 pt {stackTrace f c840: 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74 72 alse} {strict tr c850: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue} } {.. # c860: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: c870: 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63 72 Evaluate the scr c880: 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 ipt provided by c890: 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 our caller in th c8a0: 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 eir context,.. c8b0: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70 74 # capt c8c0: 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20 72 uring both the r c8d0: 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72 65 esult and the re c8e0: 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 turn code... c8f0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 #.. set c c900: 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 ode [catch {uple c910: 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20 72 vel 1$script} r
c920: 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  esult]....
c930: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
c940: 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 20   Did the script
c950: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
c960: 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 65  caller NOT raise
c970: 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20   an error?..
c980: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$c990: 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 strict &&$code
c9a0: 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 74  == 0 || !$strict c9b0: 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 &&$code != 1}
c9c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c9d0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
c9e0: 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 74  E: Success.  Ret
c9f0: 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20  urn a list with
ca00: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  the return code
ca10: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e 0d  and the result..
ca20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ca30: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
ca40: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d   $code$result].
ca50: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20  .      } elseif
ca60: 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 68  {$stackTrace} th ca70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. ca80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: ca90: 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 Failure. Our c caa0: 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66 75 aller wants a fu cab0: 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 ll stack trace ( cac0: 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d if applicable),. cad0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # cae0: 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 return a list w caf0: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 ith the return c cb00: 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 ode and the resu cb10: 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 lt verbatim... cb20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. cb30: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 return [list$c
cb40: 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20  ode $result].. cb50: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. cb60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. cb70: 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 # NOTE: Failure cb80: 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f . Our caller do cb90: 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 es not want a fu cba0: 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 ll stack trace ( cbb0: 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 if.. # cbc0: 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29 2c applicable), cbd0: 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 return a list w cbe0: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 ith the return c cbf0: 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a ode, the error.. cc00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # cc10: 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e 74 code for the int cc20: 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74 68 erpreter, and th cc30: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 e error message cc40: 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 up to the.. cc50: 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e 74 # point cc60: 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63 6b where the stack cc70: 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73 74 trace should st cc80: 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d art... #. cc90: 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 64 . set ind cca0: 65 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 ex [string first ccb0: 20 22 20 20 20 61 74 20 22 20 24 72 65 73 75 6c " at "$resul
ccc0: 74 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c 69  t]; # HACK: Reli
ccd0: 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 20  able?....
cce0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63   return [list $c ccf0: 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 ode$::errorCode
cd00: 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 21   [expr {$index ! cd10: 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20 20 = -1 ? \.. cd20: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 72 [string tr cd30: 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 im [string range cd40: 20 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64 65$result 0 $inde cd50: 78 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d 5d x]] :$result}]]
cd60: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
cd70: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f  .....    proc co
cd80: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith
cd90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
cda0: 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f  ext memory symbo
cdb0: 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c 74  ls strict result
cdc0: 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56  sVarName errorsV
cdd0: 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73  arName fileNames
cde0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72  ..            ar
cdf0: 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  gs } {..      #.
ce00: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
ce10: 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 6e  ince we are goin
ce20: 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d 65  g to use this me
ce30: 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c  thod name a lot,
ce40: 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 0d   assign it to a.
ce50: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
ce60: 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a  ariable first...
ce70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
ce80: 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 65  et add Reference
ce90: 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d  dAssemblies.Add.
cea0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
ceb0: 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65    # NOTE: Create
cec0: 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e   the base comman
ced0: 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e  d to evaluate an
cee0: 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72  d add the proper
cef0: 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20  ty settings..
cf00: 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
cf10: 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79  are almost alway
cf20: 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20  s needed by our
cf30: 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 2e  unit tests (i.e.
cf40: 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 20   the System..
cf50: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 53     #       and S
cf60: 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d  ystem.Data assem
cf70: 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e  bly references).
cf80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
cf90: 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69   set command [li
cfa0: 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
cfb0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74  compileCSharp $t cfc0: 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d ext$memory $sym cfd0: 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 73 bols$strict res
cfe0: 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20  ults errors \..
cff0: 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy d000: 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 stem.dll$add Sy
d010: 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61  stem.Data.dll $a d020: 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73 61 dd System.Transa d030: 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 ctions.dll \.. d040: 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79 73$add Sys
d050: 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a  tem.Xml.dll]....
d060: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d070: 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74   NOTE: Add all t
d080: 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65  he provided file
d090: 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62   names as assemb
d0a0: 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a  ly references...
d0b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66        #..      f
d0c0: 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
d0d0: 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  $fileNames {.. d0e0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f lappend co d0f0: 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 mmand$add [getB
d100: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f d110: 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. d120: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. d130: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add d140: 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 the extra argume d150: 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 nts, if any, to d160: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 the command to e d170: 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 valuate... d180: 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 #.. eval la d190: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 ppend command$a
d1a0: 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  rgs....      #..
d1b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c        # NOTE: Al
d1c0: 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72  ias the compiler
d1d0: 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61   local results a
d1e0: 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62  nd errors variab
d1f0: 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  les to the..
d200: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62    #       variab
d210: 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65  le names provide
d220: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
d230: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d240: 20 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74   upvar 1 $result d250: 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 sVarName results d260: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 d270: 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65$errorsVarName e
d280: 72 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23  rrors....      #
d290: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
d2a0: 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e  Evaluate the con
d2b0: 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c  structed [compil
d2c0: 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64  eCSharp] command
d2d0: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d   and return the.
d2e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72  .      #       r
d2f0: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d  esult...      #.
d300: 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d  .      eval $com d310: 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a mand.. }..... d320: 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 proc isMemor d330: 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d yDb { fileName } d340: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. d350: 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 # NOTE: Is th d360: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 e specified data d370: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 base file name r d380: 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f eally an in-memo d390: 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 ry database?.. d3a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret d3b0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 urn [expr {$file
d3c0: 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79  Name eq ":memory
d3d0: 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  :" || \..
d3e0: 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65     [string range
d3f0: 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d   $fileName 0 12] d400: 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 eq "file::memor d410: 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d y:"}].. }.... d420: 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c . proc isTabl d430: 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 eInDb { name {va d440: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. d450: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # d460: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t d470: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var d480: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" d490: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context d4a0: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # d4b0: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. d4c0: 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 It contains the d4d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect d4e0: 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 ion handle that d4f0: 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 will be.. # d500: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 used to e d510: 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79 xecute the query d520: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 used to determi d530: 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ne if the named d540: 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 table is.. d550: 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 # present d560: 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65 in that database d570: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d580: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
d590: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
d5a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
d5b0: 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  Use the sqlite_m
d5c0: 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64  aster table to d
d5d0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the
d5e0: 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a  named table is..
d5f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
d600: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
d610: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  abase...      #.
d620: 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b  .      set sql {
d630: 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  ..        SELECT
d640: 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73   COUNT(*) FROM s
d650: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
d660: 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65  RE type = 'table
d670: 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d  ' AND name = ?;.
d680: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
d690: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
d6a0: 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  E: Return non-ze
d6b0: 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ro if the named
d6c0: 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74  table is present
d6d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
d6e0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b    return [expr {
d6f0: 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65  ..        [sql e
d700: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
d710: 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20  scalar $db$sql
d720: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72  [list param1 Str
d730: 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d  ing $name]] > 0. d740: 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d . }].. } d750: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr d760: 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d imSql { sql } {. d770: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 . return [r d780: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c egsub -all -- {\ d790: 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d s+} [string trim d7a0: 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20$sql] " "]..
d7b0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
d7c0: 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c  executeSql { sql
d7d0: 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20   {execute none}
d7e0: 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66  {format none} {f
d7f0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  ileName ""} } {.
d800: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
d810: 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e  ng length $fileN d820: 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then d830: 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d {set fileName :m d840: 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 emory:}.. s d850: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 etupDb$fileName
d860: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" ""
d870: 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73  false false fals
d880: 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d  e false db true.
d890: 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  ...      try {..
d8a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
d8b0: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
d8c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
d8d0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
d8e0: 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f  ute $execute -fo d8f0: 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 rmat$format $db d900: 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d$sql]]..      }
d910: 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20   finally {..
d920: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f d930: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 ileName db false d940: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 false false.. d950: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... d960: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e . proc getCon d970: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66 nectionFlags { f d980: 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71 ileName flags {q d990: 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. d9a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d9b0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o d9c0: 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61 73 ut which databas d9d0: 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63 e file name or c d9e0: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string d9f0: 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20 these.. # da00: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection da10: 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75 flags will actu da20: 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20 ally apply to. da30: 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 This is not nece da40: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 ssary.. # da50: 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f in quiet mo da60: 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73 20 de because this da70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f information is o da80: 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 nly used for log da90: 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 ging.. # daa0: 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e and reportin dab0: 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 g purposes... dac0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { dad0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
dae0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
daf0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c  ring length $fil db00: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then db10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se db20: 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 t database [appe db30: 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d ndArgs "file nam db40: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
db50: 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  \"]..        } e
db60: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
db70: 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65  sts ::dataSource
db80: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
db90: 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 73      ![array exis
dba0: 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d  ts ::dataSource]
dbb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dbc0: 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65      set database
dbd0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 61   [appendArgs "da
dbe0: 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a  ta source \"" $: dbf0: 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d :dataSource \"]. dc00: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else dc10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set dc20: 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f database <unkno dc30: 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a wn>.. }.. dc40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... dc50: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE dc60: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 : Show (and log) dc70: 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 the local conne dc80: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 ction flags and dc90: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a the associated.. dca0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 # da dcb0: 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c ta source or fil dcc0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 e name... # dcd0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
dce0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
dcf0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te dd00: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe dd10: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. dd20: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 "---- loca dd30: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 l connection fla dd40: 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 gs for "$databa
dd50: 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  se \..
dd60: 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72    " are: " [expr
dd70: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
dd80: 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c   $flags] > 0 ? \ dd90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 .. [a dda0: 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c ppendArgs \"$fl
ddb0: 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65  ags \"] : "<none
ddc0: 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  >"}] \n]..
ddd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
dde0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
ddf0: 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73   (and log) the s
de00: 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  hared connection
de10: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23   flags...      #
de20: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu de30: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. de40: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch de50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj de60: 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 ect invoke Syste de70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ de80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 LiteConnection S de90: 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 haredFlags.. dea0: 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67 } sharedFlag deb0: 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. dec0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs ded0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
dee0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
df00: 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65  --- shared conne
df10: 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20  ction flags for
df20: 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20  " $database \.. df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 " a df40: 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 re: " [expr {[st df50: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 68 61 ring length$sha
df60: 72 65 64 46 6c 61 67 73 5d 20 3e 20 30 20 26 26  redFlags] > 0 &&
df70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
df80: 20 20 24 73 68 61 72 65 64 46 6c 61 67 73 20 6e    $sharedFlags n df90: 65 20 22 4e 6f 6e 65 22 20 3f 20 5c 0d 0a 20 20 e "None" ? \.. dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 [app dfb0: 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 72 endArgs \"$shar
dfc0: 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c  edFlags \"] : "<
dfd0: 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20  none>"}] \n]..
dfe0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
dff0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
e000: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel e010: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- e030: 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 -- shared connec e040: 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 tion flags for " e050: 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20$database \..
e060: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72              " ar
e070: 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e  e: <unavailable>
e080: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
e090: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
e0a0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e0b0: 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  E: If there are
e0c0: 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 20  any global (per
e0d0: 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63  test run) connec
e0e0: 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 65  tion flags curre
e0f0: 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ntly..      #
e100: 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 65      set, use the
e110: 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 63  m now (i.e. by c
e120: 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 69  ombining them wi
e130: 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20  th the ones for
e140: 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  this..      #
e150: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e      connection).
e160: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e170: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
e180: 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66  s ::connection_f
e190: 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20  lags] && \..
e1a0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
e1b0: 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69  ngth $::connecti e1c0: 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 on_flags] > 0} t e1d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # e1e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE e1f0: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 : Show (and log) e200: 20 74 68 65 20 64 65 74 65 63 74 65 64 20 67 6c the detected gl e210: 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 obal connection e220: 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 flags... e230: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! e240: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
e250: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
e260: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel e270: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- e290: 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 -- global connec e2a0: 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 65 63 tion flags detec e2b0: 74 65 64 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ted: " \.. e2c0: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b [expr {[ e2d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co e2e0: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 nnection_flags] e2f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. e300: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng e310: 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e th$::connection
e320: 5f 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c 0d  _flags] > 0 ? \.
e330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
e340: 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a  appendArgs \" $: e350: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag e360: 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 s \"] : "<none>" e370: 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 }] \n].. e380: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. e390: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: e3a0: 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 Combine and/or r e3b0: 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 eplace the conne e3c0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 ction flags and e3d0: 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 then show the.. e3e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e # n e3f0: 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 ew value... e400: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se e410: 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 t flags [combine e420: 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a Flags$flags $:: e430: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags e440: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. e450: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: e460: 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 Show (and log) t e470: 68 65 20 6e 65 77 20 65 66 66 65 63 74 69 76 65 he new effective e480: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag e490: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. e4a0: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
e4b0: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
e4c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t e4d0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app e4e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. e4f0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c e500: 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 ombined connecti e510: 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 on flags for "$
e520: 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20  database \..
e530: 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a            " are:
e540: 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e   " [expr {[strin
e550: 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d  g length $flags] e560: 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20 20 > 0 ? \.. e570: 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA e580: 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 rgs \"$flags \"
e590: 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c  ] : "<none>"}] \
e5a0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
e5b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
e5c0: 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20  return $flags.. e5d0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro e5e0: 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 c getFlagsProper e5f0: 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 ty { {flags ""} e600: 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } e610: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. e620: 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d # NOTE: Determ e630: 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d ine what the com e640: 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e bined (global an e650: 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74 d local) connect e660: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # e670: 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 flags should e680: 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69 be, possibly qui e690: 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a etly... #.. e6a0: 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 set flags e6b0: 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c [getConnectionFl e6c0: 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24 71 ags ""$flags $q e6d0: 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 uiet].... # e6e0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e6f0: 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20 If no global or e700: 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e local connection e710: 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65 63 flags were spec e720: 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20 ified, the.. e730: 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c # defaul e740: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 t connection fla e750: 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 gs should be use e760: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 d; therefore, re e770: 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 turn.. # e780: 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 an empty str e790: 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73 65 ing in that case e7a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e7b0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le e7c0: 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 ngth$flags] ==
e7d0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
e7e0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
e7f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
e800: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
e810: 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63  In order to chec
e820: 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74  k if the default
e830: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
e840: 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64  s are being used
e850: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e860: 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  it is necessary
e870: 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e  to attempt a con
e880: 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61  version to the a
e890: 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64  ctual enumerated
e8a0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e8b0: 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74  type.  Failing t
e8c0: 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61  hat, the check a
e8d0: 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 75  gainst the defau
e8e0: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
e8f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e900: 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20  skipped...
e910: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 72 72  #..      set err
e920: 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52  or null; # IGNOR
e930: 45 44 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61  ED..      set va
e940: 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  lue [object invo
e950: 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 61  ke Utility TryPa
e960: 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20  rseFlagsEnum ""
e970: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73  \..          Sys
e980: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
e990: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e9a0: 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20  Flags "" $flags e9b0: 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20 20 null true \.. e9c0: 20 20 20 20 20 20 20 74 72 75 65 20 65 72 72 6f true erro e9d0: 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 r].... #.. e9e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If e9f0: 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 the combined fla ea00: 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 20 gs string could ea10: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65 20 not actually be ea20: 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 20 converted.. ea30: 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 # to the ea40: 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 20 enumerated type ea50: 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c it is the defaul ea60: 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75 t value, then ju ea70: 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23 20 st use.. # ea80: 20 20 20 20 20 20 69 74 20 76 65 72 62 61 74 69 it verbati ea90: 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 m; otherwise, ju eaa0: 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 st return an emp eab0: 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 74 ty string. In t eac0: 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 hat.. # ead0: 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 65 66 case, the def eae0: 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ault connection eaf0: 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75 73 flags will be us eb00: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. eb10: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string eb20: 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d length$value] =
eb30: 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65  = 0 || $value ne eb40: 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65 6e "Default"} then eb50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. eb60: 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e 47 # WARNING eb70: 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 : This returns t eb80: 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 he string value eb90: 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 of the combined eba0: 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 flags, not.. ebb0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 74 # t ebc0: 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76 61 he enumerated va ebd0: 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 62 79 lue. This is by ebe0: 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f 75 design and shou ebf0: 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 ld not.. ec00: 23 20 20 20 20 20 20 20 20 20 20 62 65 20 63 68 # be ch ec10: 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63 61 anged without ca ec20: 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 74 reful considerat ec30: 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f 75 ion (e.g. it wou ec40: 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ld.. # ec50: 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 prevent t ec60: 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 he SQLiteConnect ec70: 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 61 ion class from a ec80: 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d llowing invalid. ec90: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # eca0: 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20 ["magical"] ecb0: 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 meta-flags)... ecc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. ecd0: 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 return [appendA ece0: 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66 6c rgs "Flags="$fl
ecf0: 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d  ags \;]..      }
ed00: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
ed10: 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   ""..    }.....
ed20: 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 20     proc setupDb
ed30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
ed40: 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22  ileName {mode ""
ed50: 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  } {dateTimeForma
ed60: 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b  t ""} {dateTimeK
ed70: 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 22  ind ""} {flags "
ed80: 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "}..
ed90: 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61 6c  {extra ""} {qual
eda0: 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 74  ify true} {delet
edb0: 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61 6c  e true} {uri fal
edc0: 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se}..
edd0: 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75 65   {temporary true
ede0: 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b  } {varName db} {
edf0: 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
ee00: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
ee10: 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20   # NOTE: First,
ee20: 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65  see if our calle
ee30: 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20  r has requested
ee40: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  an in-memory dat
ee50: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  abase...      #.
ee60: 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d  .      set isMem
ee70: 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20  ory [isMemoryDb
ee80: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName].... ee90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N eea0: 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c OTE: For now, al eeb0: 6c 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73 l test databases eec0: 20 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73 used by the tes eed0: 74 20 73 75 69 74 65 20 61 72 65 20 70 6c 61 63 t suite are plac eee0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # eef0: 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 into the datab ef00: 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 ase directory. ef10: 45 61 63 68 20 64 61 74 61 62 61 73 65 20 61 6e Each database an ef20: 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d d related files. ef30: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 . # u ef40: 73 65 64 20 62 79 20 61 20 74 65 73 74 20 73 68 sed by a test sh ef50: 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20 ould be cleaned ef60: 75 70 20 62 79 20 74 68 61 74 20 74 65 73 74 20 up by that test ef70: 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 using the.. ef80: 20 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75 # "cleanu ef90: 70 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20 pDb" procedure, efa0: 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d below... #. efb0: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d . if {!$isM
efc0: 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66  emory && $qualif efd0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. efe0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName eff0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 [file join [getD f000: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 atabaseDirectory f010: 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 ] [file tail$fi
f020: 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20  leName]]..
f030: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
f040: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64      # NOTE: By d
f050: 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61  efault, delete a
f060: 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
f070: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
f080: 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
f090: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20     #       name
f0a0: 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20  if it currently
f0b0: 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23  exists...      #
f0c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73  ..      if {!$is f0d0: 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 Memory &&$delet
f0e0: 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74  e && [file exist
f0f0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th f100: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. f110: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: f120: 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 Attempt to dele f130: 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 te any pre-exist f140: 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 ing database wit f150: 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d h the same file. f160: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # f170: 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 name... f180: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ f190: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 catch {file dele f1a0: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 te$fileName} er
f1b0: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
f1c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f1d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We
f1e0: 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74  somehow failed t
f1f0: 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c  o delete the fil
f200: 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
f210: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
f220: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui f230: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. f240: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
f250: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
f260: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
f280: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
f290: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74  ed to delete dat
f2a0: 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24  abase file \"" $f2b0: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. f2c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" f2d0: 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 during setup, er f2e0: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
f2f0: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
f300: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
f310: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f320: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f330: 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
f340: 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
f350: 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
f360: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
f370: 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
f380: 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20     caller.  The
f390: 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f 70  handle to the op
f3a0: 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 69  ened database wi
f3b0: 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 65  ll be stored the
f3c0: 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  re...      #..
f3d0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var f3e0: 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... f3f0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE f400: 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67 : Start building f410: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection f420: 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c string. The onl f430: 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74 69 y required porti f440: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # f450: 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 of the connect f460: 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68 ion string is th f470: 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 77 e data source, w f480: 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 hich contains th f490: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # f4a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n f4b0: 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66 20 ame itself. If f4c0: 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 our caller wants f4d0: 20 74 6f 20 75 73 65 20 61 20 55 52 49 20 61 73 to use a URI as f4e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # f4f0: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c the data source, f500: 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72 69 use the FullUri f510: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri f520: 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a ng property to.. f530: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 # pr f540: 65 76 65 6e 74 20 74 68 65 20 64 61 74 61 20 73 event the data s f550: 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66 72 6f ource string fro f560: 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e m being mangled. f570: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. f580: 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 if {$uri} then
f590: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
f5a0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55  onnection {FullU
f5b0: 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d  ri=${fileName}}. f5c0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. f5d0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e . set con f5e0: 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f nection {Data So f5f0: 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d urce=${fileName}
f600: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
f610: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
f620: 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 20  OTE: Since this
f630: 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e 6f  procedure has no
f640: 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64   special knowled
f650: 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 64  ge of what the d
f660: 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 20  efault..      #
f670: 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 73        setting is
f680: 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c 50   for the ToFullP
f690: 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  ath connection s
f6a0: 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 61  tring propery, a
f6b0: 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 20  lways..      #
f6c0: 20 20 20 20 20 61 64 64 20 74 68 65 20 76 61 6c       add the val
f6d0: 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74  ue we know about
f6e0: 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   to the connecti
f6f0: 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  on string...
f700: 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e    #..      appen
f710: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54  d connection {;T
f720: 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c  oFullPath=${qual f730: 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 ify}}.... # f740: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: f750: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 If our caller sp f760: 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 ecified a journa f770: 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65 20 l mode, add the f780: 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f necessary portio f790: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # f7a0: 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 of the connecti f7b0: 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a on string now... f7c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i f7d0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt f7e0: 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 h$mode] > 0} th
f7f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
f800: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
f810: 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24  {;Journal Mode=$f820: 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d {mode}}.. } f830: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. f840: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou f850: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi f860: 65 64 20 61 20 44 61 74 65 54 69 6d 65 20 66 6f ed a DateTime fo f870: 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e 65 rmat, add the ne f880: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 cessary.. # f890: 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f portion o f8a0: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e f the connection f8b0: 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 string now... f8c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if f8d0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length f8e0: 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d$dateTimeFormat]
f8f0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
f900: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
f910: 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69  nection {;DateTi
f920: 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54  meFormat=${dateT f930: 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 imeFormat}}.. f940: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. f950: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I f960: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 f our caller spe f970: 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d cified a DateTim f980: 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20 6e eKind, add the n f990: 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e ecessary portion f9a0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # f9b0: 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f of the connectio f9c0: 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 n string now... f9d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if f9e0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length f9f0: 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20$dateTimeKind]
fa00: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
fa10: 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
fa20: 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d  ection {;DateTim
fa30: 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65  eKind=${dateTime fa40: 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d Kind}}.. }. fa50: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. fa60: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure fa70: 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 66 69 out what the fi fa80: 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 74 68 nal flags for th fa90: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 is connection ne faa0: 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20 ed to be... fab0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c #.. set fl fac0: 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 ags [getConnecti fad0: 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d onFlags$fileNam
fae0: 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d  e $flags$quiet]
faf0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
fb00: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
fb10: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
fb20: 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f  ed some SQLiteCo
fb30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61  nnectionFlags, a
fb40: 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  dd the..      #
fb50: 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 20        necessary
fb60: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  portion of the c
fb70: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
fb80: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   now...      #..
fb90: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
fba0: 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d  g length $flags] fbb0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. fbc0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con fbd0: 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d nection {;Flags= fbe0: 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20${flags}}..
fbf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
fc00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
fc10: 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
fc20: 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 70 61  fied an extra pa
fc30: 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e  yload to the con
fc40: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23  nection..      #
fc50: 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61         string, a
fc60: 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20  ppend it now...
fc70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
fc80: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
fc90: 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68   $extra] > 0} th fca0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap fcb0: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection fcc0: 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20 \;$extra..
fcd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
fce0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65       # NOTE: Ope
fcf0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  n the database c
fd00: 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70  onnection now, p
fd10: 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 61 71 75  lacing the opaqu
fd20: 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a  e handle value..
fd30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
fd40: 74 6f 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  to the variable
fd50: 73 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72  specified by our
fd60: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
fd70: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 20  #..      set db
fd80: 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20  [sql open -type
fd90: 53 51 4c 69 74 65 20 5b 73 75 62 73 74 20 24 63  SQLite [subst $c fda0: 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 onnection]].... fdb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # fdc0: 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 NOTE: Configure fdd0: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 the temporary di fde0: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 rectory for the fdf0: 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 newly opened dat fe00: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 abase.. # fe10: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 connection fe20: 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 now unless our c fe30: 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 aller forbids it fe40: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. fe50: 20 20 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 if {$temporary
fe60: 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74   && ![info exist
fe70: 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72  s ::no(setTempor
fe80: 61 72 79 44 69 72 65 63 74 6f 72 79 29 5d 7d 20  aryDirectory)]}
fe90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
fea0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db feb0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. fec0: 20 20 20 20 20 20 20 20 20 20 20 22 50 52 41 47 "PRAG fed0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 MA temp_store_di fee0: 72 65 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 rectory = \"" [g fef0: 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 etTemporaryDirec ff00: 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 tory] \"\;].. ff10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. ff20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A ff30: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 lways return the ff40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand ff50: 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e le upon success. ff60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ff70: 20 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 return$db..
ff80: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
ff90: 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  getDbConnection
ffa0: 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d  { {varName db} }
ffb0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
ffc0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
ffd0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
ffe0: 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
fff0: 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
10000 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
10010 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
10020 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20  er.  The handle
10030 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
10040 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
10050 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20  d via the..
10060 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44   #       [setupD
10070 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f  b] procedure sho
10080 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68  uld be stored th
10090 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ere...      #..
100a0 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 100b0 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... 100c0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 100d0 45 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 E: This returns 100e0 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 the ADO.NET IDbC 100f0 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 onnection object 10100 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 68 instance for th 10110 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 10120 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 specified datab 10130 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 se handle. Sinc 10140 65 20 67 65 74 74 69 6e 67 20 74 68 69 73 20 6f e getting this o 10150 62 6a 65 63 74 20 72 65 6c 69 65 73 20 75 70 6f bject relies upo 10160 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 10170 20 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 Eagle internals 10180 2c 20 67 72 65 61 74 20 63 61 72 65 20 73 68 6f , great care sho 10190 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 uld be taken to 101a0 61 76 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 20 avoid disposing 101b0 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 of.. # 101c0 20 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 this object or 101d0 20 6f 74 68 65 72 77 69 73 65 20 70 75 74 74 69 otherwise putti 101e0 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e ng it into an in 101f0 76 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 valid state... 10200 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 10210 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 {[info exists db 10220 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 10230 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 10240 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 10250 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 10260 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 +NonPublic -obje 10270 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f ctflags +NoDispo 10280 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 se -alias \.. 10290 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 Inter 102a0 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 preter.GetActive 102b0 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 .connections Ite 102c0 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 20 20 7d m$db..        }
102d0 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
102e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
102f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
10300 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72  NOTE: Success, r
10310 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65  eturn the opaque
10320 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d   object handle..
10330 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
10340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $10350 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 result.. 10360 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 10370 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 10380 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 # NOTE: Failure 10390 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 103a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 103b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
103c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
103d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
103e0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
103f0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
10400 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  o get connection
10410 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61   handle for data
10420 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  base \"" \..
10430 20 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c            $db "\ 10440 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 10450 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
10460 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
10470 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
10480 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65  proc freeDbConne
10490 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65  ction { {varName
104a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b   connection} } {
104b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
104c0 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
104d0 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
104e0 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
104f0 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20  connection") in
10500 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
10510 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75     context of ou
10520 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f  r caller.  The o
10530 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
10540 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e  dle for an ADO.N
10550 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ET..      #
10560 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65    connection pre
10570 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64  viously returned
10580 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63   by [getDbConnec
10590 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d  tion] should be.
105a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
105b0 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
105c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76      #..      upv
105d0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f  ar 1 $varName co 105e0 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 nnection.... 105f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10600 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 E: Attempt to re 10610 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 move the opaque 10620 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 object handle fr 10630 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 om the interpret 10640 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 er.. # 10650 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 now. This [ob 10660 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 ject dispose] ca 10670 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 ll will not actu 10680 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 ally dispose of 10690 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 106a0 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 underlying ob 106b0 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 68 65 ject because the 106c0 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 +NoDispose flag 106d0 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a was set on it.. 106e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 # du 106f0 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 ring creation of 10700 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 10710 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 ct handle... 10720 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 10730 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e info exists conn 10740 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 ection] && \.. 10750 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b [catch { 10760 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 object dispose$
10770 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f  connection} erro
10780 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
10790 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
107a0 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
107b0 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f  w failed to remo
107c0 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72  ve the handle, r
107d0 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
107e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
107f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 10800 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10810 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10820 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 10830 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 ailed to remove 10840 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl 10850 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f e \""$connectio
10860 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
10870 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
10880 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 10890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 108a0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 ... proc addD 108b0 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f bConnection { co 108c0 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d nnection {varNam 108d0 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e db} } {.. 108e0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 108f0 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 10900 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 10910 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 10920 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 10930 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 10940 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 caller... 10950 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 10960 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
10970 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
10980 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20   # NOTE: Create
10990 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d  a correctly form
109a0 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74  atted name for t
109b0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
109c0 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20  ection to..
109d0 20 23 20 20 20 20 20 20 20 62 65 20 61 64 64 65   #       be adde
109e0 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61  d to the list ma
109f0 6e 61 67 65 64 20 62 79 20 74 68 65 20 45 61 67  naged by the Eag
10a00 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  le interpreter..
10a10 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
10a20 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69  set db [object i
10a30 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
10a40 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
10a50 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70       Eagle._Comp
10a60 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46  onents.Private.F
10a70 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73  ormatOps Databas
10a80 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e  eObjectName $con 10a90 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 nection \.. 10aa0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 SQLiteConne 10ab0 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e ction [object in 10ac0 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 voke Interpreter 10ad0 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 .GetActive NextI 10ae0 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a d]].... #.. 10af0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 10b00 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 d the database c 10b10 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 onnection provid 10b20 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 10b30 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 to the list.. 10b40 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 10b50 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 hose known to th 10b60 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 e Eagle interpre 10b70 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ter... #.. 10b80 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 10b90 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 10ba0 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 blic Interpreter 10bb0 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 .GetActive.conne 10bc0 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 ctions Add \.. 10bd0 20 20 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e$db $con 10be0 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a nection.. }.. 10bf0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 ... proc getR 10c00 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 owsFromDataTable 10c10 20 7b 20 64 61 74 61 54 61 62 6c 65 20 7d 20 7b { dataTable } { 10c20 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 73 .. set rows 10c30 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 73 [list].. s 10c40 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 54 et count [$dataT
10c50 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75  able Columns.Cou
10c60 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  nt]....      for
10c70 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b   {set index 0} {
10c80 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d  $index <$count}
10c90 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d   {incr index} {.
10ca0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74  .        set dat
10cb0 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54 61  aColumn [$dataTa 10cc0 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 6d ble -alias Colum 10cd0 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 ns.get_Item$ind
10ce0 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ex]..        set
10cf0 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b   names($index) [ 10d00 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75$dataColumn Colu
10d10 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  mnName]..      }
10d20 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74  ....      object
10d30 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
10d40 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61 74  dataRow [set dat
10d50 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62 6c  aRows [$dataTabl 10d60 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 e Rows]] {.. 10d70 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69 73 set row [lis 10d80 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f t].... fo 10d90 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 r {set index 0} 10da0 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 {$index < $count 10db0 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b } {incr index} { 10dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 10dd0 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77 20 value [$dataRow
10de0 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 67  -create -alias g
10df0 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 10e00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 10e10 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 10e20 24 76 61 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c$value] > 0 && \
10e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10e40 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20  ![object invoke
10e50 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c 6c  Convert IsDBNull
10e60 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b   $value]} then { 10e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .. la 10e80 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 ppend row [list 10e90 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b$names($index) [ 10ea0 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e 67 5d$value ToString]
10eb0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
10ec0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
10ed0 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b     lappend row [
10ee0 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64  list $names($ind
10ef0 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ex)]..
10f00 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
10f10 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
10f20 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 20  rows $row.. 10f30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 10f40 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d rn$rows..    }.
10f50 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 6d  ....    proc dum
10f60 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62  pRowsFromDataTab
10f70 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77  le { channel row
10f80 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  s } {..      set
10f90 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20   sequence 1....
10fa0 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f 77       foreach row
10fb0 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20   $rows {.. 10fc0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
10fd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
10ff0 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 31  r {$sequence > 1 11000 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 ? "\n" : ""}] " 11010 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 71 ---- ROW #"$seq
11020 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20  uence :\n]....
11030 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61        foreach pa
11040 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20  ir $row {.. 11050 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 11060 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74 h$pair] >= 2} t
11070 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
11080 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11090 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 l [appendArgs \t 110a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 110b0 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 [list [linde 110c0 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 22 x$pair 0]] ": "
110d0 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24   [list [lindex $110e0 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 pair 1]] \n].. 110f0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif 11100 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 {[llength$pair
11110 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 1} then {..
11120 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
11130 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 11140 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 ndArgs \t \.. 11150 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 [li 11160 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
11170 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e   0]] ": <null>\n
11180 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  "]..          }
11190 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
111a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 111b0 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 el \t<empty>\n; 111c0 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f # NOTE: No data? 111d0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 111e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 111f0 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e 63 incr sequenc 11200 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 e.. }.. 11210 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 11220 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e leanupDb { fileN 11230 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d ame {varName db} 11240 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} 11250 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a {qualify true}.. 11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11270 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 {delete tru 11280 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 11290 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 112a0 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 ttempt to force 112b0 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 all pending "gar 112c0 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f bage" objects to 112d0 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a be collected,.. 112e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 112f0 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 cluding SQLite s 11300 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 tatements and ba 11310 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 ckup objects; th 11320 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d is should allow. 11330 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 11340 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 he underlying da 11350 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 tabase file to b 11360 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 e deleted... 11370 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
11380 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d  collect} then {.
11390 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74  .        collect
113a0 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f  Garbage $::test_ 113b0 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d channel.. } 113c0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 113d0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 113e0 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 113f0 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 11400 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 11410 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 11420 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 11430 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 er. The handle 11440 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 to the database 11450 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 previously opene 11460 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 d via the.. 11470 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 # [setupD 11480 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f b] procedure sho 11490 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 uld be stored th 114a0 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ere... #.. 114b0 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
114c0 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
114d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
114e0 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e  E: Close the con
114f0 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64  nection to the d
11500 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68  atabase now.  Th
11510 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20  is should allow
11520 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  us..      #
11530 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20    to delete the
11540 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62  underlying datab
11550 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ase file...
11560 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
11570 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26  nfo exists db] &
11580 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c  & [catch {sql cl
11590 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d  ose $db} error]} 115a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 115b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 115c0 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 115d0 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 ailed to close t 115e0 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 he database, rep 115f0 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 11600 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 11610 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
11620 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
11630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
11640 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
11650 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74  led to close dat
11660 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c  abase \"" $db "\ 11670 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 ", error: " \.. 11680 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 11690 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
116a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
116b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
116c0 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20  rst, see if our
116d0 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65  caller has reque
116e0 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  sted an in-memor
116f0 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  y database...
11700 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
11710 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f  isMemory [isMemo
11720 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ryDb $fileName]. 11730 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11740 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 11750 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f the full path to 11760 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 the database fi 11770 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f le name. For no 11780 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 w, all test.. 11790 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab 117a0 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 ase files are st 117b0 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 ored in the temp 117c0 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e orary directory. 117d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 117e0 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
117f0 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65  && $qualify} the 11800 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 11810 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 11820 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 join [getDatabas 11830 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c eDirectory] [fil 11840 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
11850 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ]]..      }....
11860 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11870 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
11880 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78  he file still ex
11890 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ists...      #..
118a0 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65        if {!$isMe 118b0 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 mory &&$delete
118c0 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20  && [file exists
118d0 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 118e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 118f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 11900 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 kip deleting dat 11910 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 abase files if s 11920 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 omebody sets the 11930 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 global.. 11940 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c # variabl 11950 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e e to prevent it. 11960 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11970 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 11980 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 exists ::no(clea 11990 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 nupDbFile)]} the 119a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 119b0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 119c0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d 119d0 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 elete the test d 119e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 atabase file now 119f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 11a00 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 11a10 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b et code [catch { 11a20 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
11a30 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20  eName} error]]}
11a40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11a50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
11a60 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
11a70 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
11a80 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c  delete the file,
11a90 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
11aa0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
11ab0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $11ac0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 11ad0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 11af0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 11b00 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 led to delete da 11b10 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 11b20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
11b40 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c   during cleanup,
11b50 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $11b60 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 11b70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 11b80 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 11b90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 11ba0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 # NOTE: Show th 11bb0 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 at we skipped de 11bc0 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e leting the file. 11bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 11be0 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 set cod 11bf0 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e 0.... 11c00 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
11c10 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
11c20 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
11c30 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
11c40 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  G: skipped delet
11c50 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c  ing database fil
11c60 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 11c70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11c80 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea 11c90 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 nup\n"].. 11ca0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 11cb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 11cc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 11cd0 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 he file does not 11ce0 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 exist, success! 11cf0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11d00 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d set code 0. 11d10 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 11d20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a return$code..
11d30 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
11d40 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 72  oc setupDbInterr
11d50 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68  uptCallback { ch
11d60 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20  annel log } {..
11d70 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11d80 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e nel "---- settin 11d90 67 20 75 70 20 64 65 62 75 67 67 65 72 20 69 6e g up debugger in 11da0 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b terrupt callback 11db0 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 ... ".... i 11dc0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 11dd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11de0 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 # NOTE: Make sur 11df0 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 e the script deb 11e00 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 ugger and the is 11e10 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 11e20 65 72 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 er are.. 11e30 23 20 20 20 20 20 20 20 73 65 74 75 70 20 61 6e # setup an 11e40 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 2e d ready for use. 11e50 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11e60 20 20 20 20 20 64 65 62 75 67 20 73 65 74 75 70 debug setup 11e70 20 74 72 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 true true.... 11e80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11e90 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 # NOTE: Load th 11ea0 65 20 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b e necessary pack 11eb0 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 ages into the is 11ec0 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 11ed0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a er... #.. 11ee0 20 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 debug ev 11ef0 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 al {.. 11f00 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require 11f10 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 Eagle.. 11f20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 package require 11f30 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a Eagle.Library.. 11f40 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 packag 11f50 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e e require Eagle. 11f60 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d Test.. }. 11f70 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11f80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 11f90 70 79 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 py the necessary 11fa0 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 variables into 11fb0 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 the isolated int 11fc0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 11fd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 #.. de 11fe0 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 bug invoke 0 set 11ff0 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 ::test_channel 12000 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45$channel; # NOTE
12010 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a  : For [tputs]...
12020 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e          debug in
12030 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73  voke 0 set ::tes
12040 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f  t_log $log; # NO 12050 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d TE: For [tlog].. 12060 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 12070 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e # NOTE: In 12080 73 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c 62 61 stall the callba 12090 63 6b 20 73 63 72 69 70 74 20 74 6f 20 62 65 20 ck script to be 120a0 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 evaluated in the 120b0 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20 20 20 isolated.. 120c0 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 65 72 # inter 120d0 70 72 65 74 65 72 20 77 68 65 6e 20 74 68 69 73 preter when this 120e0 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 73 20 interpreter is 120f0 69 6e 74 65 72 72 75 70 74 65 64 20 62 79 20 73 interrupted by s 12100 63 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 23 cript.. # 12110 20 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 cancellat 12120 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 ion, etc... 12130 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 #.. de 12140 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 bug callback app 12150 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b ly {{sender e} { 12160 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 12170 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 12180 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 63 Check if this c 12190 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 allback is one t 121a0 68 61 74 20 77 65 20 63 61 72 65 20 61 62 6f 75 hat we care abou 121b0 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d t... #. 121c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 . if {" 121d0 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 5b 73 70 Canceled" in [sp 121e0 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 lit [$e Interrup
121f0 74 54 79 70 65 5d 20 22 2c 20 22 5d 7d 20 74 68  tType] ", "]} th
12200 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
12210 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
12220 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 65   # NOTE: Iterate
12230 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 74   through all dat
12240 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12250 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a  s known to the..
12260 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
12270 20 20 20 20 70 61 72 65 6e 74 20 69 6e 74 65 72      parent inter
12280 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  preter...
12290 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
122a0 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
122b0 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5c  ch -alias pair \
122c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
122d0 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65    [object invoke
122e0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
122f0 69 63 20 24 65 20 49 6e 74 65 72 70 72 65 74 65  ic $e Interprete 12300 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b r.connections] { 12310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12320 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 12330 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 12340 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 to cancel any S 12350 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 QL queries in pr 12360 6f 67 72 65 73 73 20 6f 6e 20 74 68 69 73 0d 0a ogress on this.. 12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 12380 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 63 database c 12390 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 onnection... 123a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 123b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 123c0 63 61 74 63 68 20 7b 24 70 61 69 72 20 56 61 6c catch {$pair Val
123d0 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72  ue.Cancel} error
123e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
123f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
12400 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 12410 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 [appendArgs \n 12420 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12430 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 12440 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 12450 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 cancel query for 12460 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20 connection \"" 12470 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12480 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 4b 65 [$pair Ke
12490 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  y] "\", error: "
124a0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 124b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 124c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 124d0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 124e0 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 20 }}.. 124f0 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 } error] == 0} 12500 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12510 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e addConstraint in 12520 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e terruptCallback. 12530 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20 sqlite3.... 12540 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
12550 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d  l yes\n..      }
12560 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
12570 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 12580 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c [appendArgs "no, 12590 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
125a0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
125b0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
125c0 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 69    proc cleanupFi
125d0 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63  le { fileName {c
125e0 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 6f  ollect true} {fo
125f0 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  rce false} } {..
12600 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
12610 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
12620 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64  o force all pend
12630 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62  ing "garbage" ob
12640 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c  jects to be coll
12650 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20  ected,..      #
12660 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20        including
12670 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74  SQLite statement
12680 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a  s and backup obj
12690 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c  ects; this shoul
126a0 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23  d allow..      #
126b0 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72         the under
126c0 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66  lying database f
126d0 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65  ile to be delete
126e0 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
126f0 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d     if {$collect} 12700 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12710 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 collectGarbage 12720 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
12730 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12740 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
12750 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
12760 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74  file still exist
12770 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
12780 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
12790 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 127a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 127b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 127c0 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 E: Skip deleting 127d0 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 20 73 test files if s 127e0 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 omebody sets the 127f0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 global variable 12800 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 12810 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e to prevent it. 12820 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12830 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 if {$force
12840 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  || ![info exists
12850 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c   ::no(cleanupFil
12860 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
12870 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12880 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
12890 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68  mpt to delete th
128a0 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e  e test file now.
128b0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
128c0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65           if {[se
128d0 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66  t code [catch {f
128e0 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65  ile delete $file 128f0 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 Name} error]]} t 12900 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 12910 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 12920 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som 12930 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 ehow failed to d 12940 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 elete the file, 12950 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... 12960 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 12970 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
12980 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_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 3d 3d               "==
129b0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
129c0 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73  ed to delete tes
129d0 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  t file \"" $file 129e0 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 129f0 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri 12a00 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f ng cleanup, erro 12a10 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
12a20 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
12a30 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
12a40 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
12a50 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
12a60 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65  TE: Show that we
12a70 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
12a80 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20  g the file...
12a90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12aa0 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a      set code 0..
12ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
12ac0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 12ad0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 12ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 12af0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b ==== WARNING: sk 12b00 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 ipped deleting t 12b10 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 est file \""$fi
12b20 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
12b30 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
12b40 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a  ng cleanup\n"]..
12b50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12b60 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
12b70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
12b80 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64  NOTE: The file d
12b90 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73  oes not exist, s
12ba0 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20  uccess!..
12bb0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
12bc0 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d  code 0..      }.
12bd0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
12be0 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  $code.. }.... 12bf0 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 . proc collec 12c00 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 6e 6e tGarbage { chann 12c10 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 el {milliseconds 12c20 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 74 72 1000} {quiet tr 12c30 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ue} } {.. i 12c40 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 12c50 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 12c60 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false 12c70 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 12c80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12c90 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
12ca0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
12cb0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 12cc0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 12cd0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 12ce0 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 12cf0 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 y the CLR before 12d00 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 collection... " 12d10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12d20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65$result " byte
12d30 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  s\n"]..        }
12d40 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
12d50 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
12d60 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 12d70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 12d80 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 12d90 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 12da0 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 CLR memory usag 12db0 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 e, error: " \.. 12dc0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 12dd0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
12de0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23     }....      ##
12df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12e30 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
12e40 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
12e50 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74  : Repeatedly att
12e60 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20  empt to collect
12e70 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68  garbage until th
12e80 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65  e allotted numbe
12e90 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
12ea0 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
12eb0 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41   has elapsed.  A
12ec0 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f  lways attempt to
12ed0 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65   collect garbage
12ee0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
12ef0 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a  at least once...
12f00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
12f10 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20  et start [clock
12f20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20  seconds]..
12f30 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b  set stop [expr {
12f40 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69  $start + ($milli
12f50 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d  seconds / 1000)}
12f60 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20 7b 0d  ]....      do {.
12f70 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
12f80 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
12f90 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66  mpt to force a f
12fa0 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c  ull garbage coll
12fb0 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70  ection now.  Rep
12fc0 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20  ort any..
12fd0 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 74   #       error t
12fe0 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  hat is encounter
12ff0 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a  ed if we fail...
13000 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13010 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
13020 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
13030 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74  GetTotalMemory t
13040 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  rue} error]} the
13050 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
13060 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 13070 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 13080 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 13090 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 130a0 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f full garbage co 130b0 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a llection, error: 130c0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 130d0 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 \n\t$error
130e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
130f0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f  ..        set no
13100 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  w [clock seconds
13110 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65  ]..      } while
13120 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77   {$start <=$now
13130 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70   && $now <$stop
13140 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23  }....      #####
13150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13190 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ####....      if
131a0 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
131b0 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
131c0 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d  talMemory false}
131d0 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
131e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
131f0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 13200 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 13210 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
13220 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
13230 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
13240 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
13250 20 74 68 65 20 43 4c 52 20 61 66 74 65 72 20 63   the CLR after c
13260 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c  ollection... " \
13270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13280 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c  $result " bytes\ 13290 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. 132a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 132b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
132c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
132d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
132e0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
132f0 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43   failed to get C
13300 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c  LR memory usage,
13310 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
13320 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72           \n\t $r 13330 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 13340 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 13350 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 proc getSQLite 13360 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 HandleCounts { c 13370 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 hannel {quiet fa 13380 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 13390 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 set result [list 133a0 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ 133b0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c haveConstraint \ 133c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 133d0 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 defineConstant.S 133e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 133f0 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d e.COUNT_HANDLE]} 13400 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13410 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13420 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69 TE: Add each cri 13430 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 13440 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 nt to the result 13450 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 ing list... 13460 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f #.. fo 13470 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 reach name [list 13480 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 connectionCount 13490 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 statementCount 134a0 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a backupCount] {.. 134b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 set va 134c0 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f lue [object invo 134d0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 134e0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 134f0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 13500 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 13510 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24 6e 61 ativeMethods$na
13520 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me]....
13530 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 13540 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13550 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
13560 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13580 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68  "---- critical h
13590 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20  andle count \""
135a0 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24  $name "\" is "$
135b0 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20  value \n]..
135c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
135d0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
135e0 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20  lt $value.. 135f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 13600 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 seif {!$quiet} t
13610 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
13620 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
13630 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e  : The actual han
13640 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e  dle counts are n
13650 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68  ot available; th
13660 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20  erefore, just..
13670 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
13680 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c  eturn an empty l
13690 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ist...        #.
136a0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $136b0 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 channel "---- cr 136c0 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f itical handle co 136d0 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 unts unavailable 136e0 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n".. }.... 136f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
13700 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
13710 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77      proc shutdow
13720 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65  nSQLite { channe
13730 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20  l {force false}
13740 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
13750 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
13760 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
13770 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ure that SQLite
13780 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
13790 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64  completely shutd
137a0 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20  own.  This..
137b0 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65    #       is use
137c0 64 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20  d by tests that
137d0 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61  change configura
137e0 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64  tion options and
137f0 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20  /or those..
13800 20 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65   #       that ne
13810 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure
13820 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69  logging is initi
13830 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73  alized (i.e. jus
13840 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20  t in case..
13850 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c   #       the SQL
13860 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
13870 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64   was initialized
13880 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20   in the process
13890 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20  prior to..
138a0 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
138b0 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e  teLog class bein
138c0 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20  g able to setup
138d0 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  its logging call
138e0 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20  back)...      #
138f0 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20        Normally,
13900 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79  this should only
13910 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66   be performed if
13920 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65   SQLite is loade
13930 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20  d and..      #
13940 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75       ready for u
13950 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
13960 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uite...      #..
13970 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65        if {$force 13980 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 || [isSQLiteRea 13990 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 dy]} then {.. 139a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 139b0 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 # BUGFIX: Before 139c0 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 calling the nat 139d0 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e ive shutdown fun 139e0 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 ction, make sure 139f0 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23 both.. # 13a00 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 of the 13a10 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 PRAGMA related d 13a20 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 irectory names a 13a30 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 re freed... 13a40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 13a50 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 eckForSQLiteDire 13a60 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c ctories$channel
13a70 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
13a80 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
13a90 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
13aa0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
13ab0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
13ac0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
13ad0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
13ae0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13af0 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77   sqlite3_shutdow
13b00 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  n..        } res
13b10 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
13b20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
13b30 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 13b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 13b50 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
13b60 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
13b70 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
13b80 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73  - call sqlite3_s
13b90 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a  hutdown()... ok:
13ba0 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a   " $result \n].. 13bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 13bc0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 13bd0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
13be0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
13bf0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
13c00 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 13c10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 13c20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 13c30 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 ll sqlite3_shutd 13c40 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 own()... error: 13c50 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c " \n\t$result \
13c60 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
13c70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
13c80 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
13c90 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51     proc reportSQ
13ca0 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d  LiteResources {.
13cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
13cc0 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73  nnel {quiet fals
13cd0 65 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20  e} {reset true}
13ce0 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d  {collect true} }
13cf0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
13d00 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76     # NOTE: If av
13d10 61 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20  ailable, report
13d20 6f 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79  on (and possibly
13d30 20 72 65 73 65 74 29 20 74 68 65 20 72 75 6e 74   reset) the runt
13d40 69 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ime..      #
13d50 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13d60 20 73 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20   statistics...
13d70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
13d80 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  {[haveConstraint
13d90 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74   buildConfigurat
13da0 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b 63  ion.Debug] && [c
13db0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
13dc0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
13dd0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
13de0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..
13df0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
13e00 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
13e10 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 65 74  ativeMethods set
13e20 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a  tingReadCounts..
13e30 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52        } settingR
13e40 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d  eadCounts] == 0}
13e50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13e60 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b   set nameCount [
13e70 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  $settingReadCoun 13e80 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 ts Count].. 13e90 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e set valueCoun 13ea0 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f t 0.... o 13eb0 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 bject foreach -a 13ec0 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69 lias pair$setti
13ed0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a  ngReadCounts {..
13ee0 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76            incr v
13ef0 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72  alueCount [$pair 13f00 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 Value].... 13f10 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
13f20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13f30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 13f40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 13f50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13f60 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e "---- settin 13f70 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 g \"" [$pair Key
13f80 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22  ] "\" was read "
13f90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13fa0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65      [$pair Value 13fb0 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 ] " times\n"].. 13fc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 13fd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 13fe0 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 if {$reset} the
13ff0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
14000 66 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74  f {[catch {$sett 14010 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6c ingReadCounts Cl 14020 65 61 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 ear} error] == 0 14030 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14040 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
14050 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
14060 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $14070 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 14080 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 14090 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 "---- r 140a0 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 eset setting sta 140b0 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 tistics for the 140c0 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 previous " \.. 140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 140e0 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d$nameCount " nam
140f0 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43  es and " $valueC 14100 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65 ount " values re 14110 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 ad\n"].. 14120 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 14130 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 14140 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
14150 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
14160 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
14170 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
14180 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
14190 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74  set setting stat
141a0 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a  istics for " \..
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
141c0 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20  "the previous "
141d0 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 141e0 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
141f0 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  ount \..
14200 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73          " values
14210 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 20   read, error: "
14220 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 14230 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 14240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 14250 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 .... if {[h 14260 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d aveConstraint \. 14270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 . d 14280 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 efineConstant.Sy 14290 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 142a0 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c .INTEROP_VIRTUAL 142b0 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 _TABLE] && \.. 142c0 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e [haveCon 142d0 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 straint \.. 142e0 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 defineC 142f0 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 onstant.System.D 14300 61 74 61 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b ata.SQLite.TRACK 14310 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 _MEMORY_BYTES]} 14320 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14330 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
14340 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
14350 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 14360 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f --- current memo 14370 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c ry in use by SQL 14380 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a iteMemory... ".. 14390 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 143a0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 143b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 143c0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 143d0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 143f0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 14400 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79 .SQLiteMemory by 14410 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 tesAllocated.. 14420 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 } memory] 14430 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 14440 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
14450 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
14460 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $14470 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 14480 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 rgs$memory " by
14490 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
144a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
144b0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
144c0 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b    set memory unk
144d0 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nown....
144e0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 144f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14500 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
14510 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 14520 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 14530 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 14540 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 14550 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
14560 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
14570 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 14580 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 maximum memory 14590 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 in use by SQLite 145a0 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 Memory... ".. 145b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 145c0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 145d0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 145e0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 145f0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 14600 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 14610 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 14620 4c 69 74 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d LiteMemory maxim 14630 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 umBytesAllocated 14640 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f .. } memo 14650 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { 14660 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 14670 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
14680 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
14690 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 146a0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
146b0 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
146c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
146d0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
146e0 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
146f0 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20   unknown....
14700 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 14710 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 14720 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
14730 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
14740 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 14750 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 14760 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 14770 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
14780 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
14790 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 147a0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e nel "---- curren 147b0 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 t memory in use 147c0 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a by SQLite... ".. 147d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 147e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 147f0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 14800 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 14810 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 14820 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 14830 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 14840 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c ativeMethods sql 14850 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 ite3_memory_used 14860 0d 0a 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 .. } memory 14870 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 14880 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
14890 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
148a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 148b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 148c0 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
148d0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  s\n"]..        }
148e0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
148f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14900 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79       # NOTE: May
14910 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  be the SQLite co
14920 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e  re library is un
14930 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20  available?..
14940 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
14950 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
14960 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n....        if
14970 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 14980 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 14990 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
149a0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 149b0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 149c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 149d0 73 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f set result$memo
149e0 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75  ry; # NOTE: Retu
149f0 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65  rn memory in-use
14a00 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   to our caller..
14a10 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71  ...      if {!$q 14a20 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 14a30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
14a40 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d  nnel "---- maxim
14a50 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65  um memory in use
14a60 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d   by SQLite... ".
14a70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
14a80 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
14a90 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
14aa0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
14ab0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
14ac0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
14ad0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
14ae0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71  NativeMethods sq
14af0 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67  lite3_memory_hig
14b00 68 77 61 74 65 72 20 30 0d 0a 20 20 20 20 20 20  hwater 0..
14b10 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20  } memory] == 0}
14b20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14b30 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 14b40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 14b50 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
14b60 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 14b70 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 y " bytes\n"].. 14b80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 14b90 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 14ba0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 14bb0 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 OTE: Maybe the S 14bc0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 14bd0 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c ry is unavailabl 14be0 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e?.. #.. 14bf0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 14c00 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 14c10 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
14c20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14c30 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 14c40 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
14c50 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
14c60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
14c70 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c  ..      if {$col 14c80 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lect} then {.. 14c90 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 collectGar 14ca0 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 bage$channel..
14cb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
14cc0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 14cd0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 14ce0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
14cf0 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79  - current memory
14d00 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43   in use by the C
14d10 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d  LR... "..      }
14d20 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
14d30 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76  atch {object inv
14d40 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d  oke GC GetTotalM
14d50 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d  emory false} mem
14d60 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
14d70 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
14d80 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65  string is intege
14d90 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72  r -strict $memor 14da0 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 14db0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
14dc0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
14dd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 14de0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 14df0 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
14e00 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
14e10 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
14e20 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
14e30 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c  set memory inval
14e40 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  id....
14e50 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 14e60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 14e70 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
14e80 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 14e90 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 14ea0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 14eb0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 14ec0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d . set mem 14ed0 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 14ee0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
14ef0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
14f00 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 14f10 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 14f20 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
14f30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
14f40 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
14f50 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 14f60 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che 14f70 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 14f80 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c tories { channel 14f90 20 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d {reset false} } 14fa0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 14fb0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 14fc0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f if the sqlite3_ 14fd0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 14fe0 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 ory function is 14ff0 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... 15000 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 15010 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20$channel \..
15020 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
15030 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69  cking for functi
15040 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  on sqlite3_win32
15050 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e  _set_directory..
15060 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  . "....      #..
15070 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
15080 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73  is call to the s
15090 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
150a0 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
150b0 69 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20  ion uses the..
150c0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61      #       inva
150d0 6c 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20  lid value 0 for
150e0 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
150f0 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69  nt.  This code i
15100 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20  s designed..
15110 20 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65    #       to che
15120 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68  ck if calling th
15130 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20  e function will
15140 72 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69  raise an excepti
15150 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20  on (i.e...
15160 23 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75  #       the actu
15170 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  al result of the
15180 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e   function does n
15190 6f 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e  ot matter as lon
151a0 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23  g as no..      #
151b0 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
151c0 20 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20   is changed)...
151d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
151e0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
151f0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
15200 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
15210 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
15220 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
15230 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
15240 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..
15250 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
15260 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
15270 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 20  tory 0 null..
15280 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e     }] == 0} then
15290 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
152a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
152b0 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74  alling the sqlit
152c0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
152d0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20  ectory function
152e0 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20  does not..
152f0 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65 20    #       cause
15300 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68  an exception; th
15310 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74  erefore, it must
15320 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69   be available (i
15330 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  .e...        #
15340 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68       even though
15350 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72   it should retur
15360 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 75  n a failure retu
15370 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d  rn code in this.
15380 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
15390 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20   case)...
153a0 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   #..        addC
153b0 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65  onstraint sqlite
153c0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
153d0 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20  ctory....
153e0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 153f0 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 yes\n.... 15400 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15410 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c TE: Does our cal 15420 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 ler want to rese 15430 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 t the directorie 15440 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s?.. #.. 15450 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 if {$rese
15460 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
15470 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15480 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61    # NOTE: Now ma
15490 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61  ke sure the data
154a0 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61  base and tempora
154b0 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61  ry directories a
154c0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  re..          #
154d0 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69        reset thei
154e0 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  r default values
154f0 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62  , which should b
15500 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e  e null for both.
15510 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
15520 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71      Since the sq
15530 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
15540 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
15550 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  on is available,
15560 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
15570 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20      use it...
15580 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15590 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64      for {set ind
155a0 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20  ex 1} {$index < 155b0 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 3} {incr index} 155c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 155d0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 155e0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 155f0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 15600 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15620 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 15630 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM 15640 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 ethods \.. 15650 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 sqli 15660 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 15670 72 65 63 74 6f 72 79 20 24 69 6e 64 65 78 20 6e rectory$index n
15680 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..
15690 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
156a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
156b0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 156c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 156d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 156e0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 156f0 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f l sqlite3_win32_ 15700 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 set_directory(" 15710 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20$index \..
15720 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e              ", n
15730 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72  ull)... ok: " $r 15740 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 15750 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 15760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 15770 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
15780 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
157a0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65  ---- call sqlite
157b0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
157c0 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c  ctory(" $index \ 157d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 157e0 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 ", null)... 157f0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
15800 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
15810 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15820 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
15830 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
15840 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
15850 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d  $channel no\n... 15860 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 15870 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does 15880 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 our caller want 15890 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 to reset the di 158a0 72 65 63 74 6f 72 69 65 73 3f 20 20 54 68 69 73 rectories? This 158b0 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 can only.. 158c0 20 20 20 23 20 20 20 20 20 20 20 62 65 20 70 65 # be pe 158d0 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 rformed if SQLit 158e0 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 e is loaded and 158f0 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 ready for use by 15900 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 the test.. 15910 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 # suite 15920 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 15930 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 if {$reset
15940 20 26 26 20 5b 69 73 53 51 4c 69 74 65 52 65 61   && [isSQLiteRea
15950 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  dy]} then {..
15960 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15970 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20      # NOTE: Now
15980 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  make sure the da
15990 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
159a0 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73  rary directories
159b0 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20   are..
159c0 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68  #       reset th
159d0 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
159e0 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64  es, which should
159f0 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74   be null for bot
15a00 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  h...          #
15a10 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20        Since the
15a20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
15a30 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63  t_directory func
15a40 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20  tion does not..
15a50 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
15a60 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 61 76   appear to be av
15a70 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65  ailable, use the
15a80 20 61 73 73 6f 63 69 61 74 65 64 20 50 52 41 47   associated PRAG
15a90 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20  MA commands..
15aa0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
15ab0 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  nstead...
15ac0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
15ad0 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72  foreach director
15ae0 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f  y [list data_sto
15af0 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d  re_directory tem
15b00 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
15b10 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  y] {..
15b20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e    set sql [appen
15b30 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20  dArgs "PRAGMA "
15b40 24 64 69 72 65 63 74 6f 72 79 20 22 20 3d 20 5c  $directory " = \ 15b50 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 "\";"].... 15b60 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 15b70 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 {executeSql$sq
15b80 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d  l} result] == 0}
15b90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15ba0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 15bb0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15bc0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 15bd0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 "---- exe 15be0 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 cute PRAGMA "$d
15bf0 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b  irectory "... ok
15c00 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  : \"" \..
15c10 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75             $resu 15c20 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 lt \"\n].. 15c30 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 15c50 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
15c60 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
15c80 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 47  --- execute PRAG
15c90 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  MA " $directory 15ca0 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d "... error: " \. 15cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 15cc0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
15cd0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
15ce0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
15cf0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
15d00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
15d10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
15d20 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68 65 20  nally, show the
15d30 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
15d40 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
15d50 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20  d temporary..
15d60 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
15d70 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20 63 61  tories.  This ca
15d80 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72  n only be perfor
15d90 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  med if SQLite is
15da0 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
15db0 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79         and ready
15dc0 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
15dd0 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
15de0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
15df0 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d  [isSQLiteReady]}
15e00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15e10 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f   foreach directo
15e20 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74  ry [list data_st
15e30 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65  ore_directory te
15e40 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
15e50 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ry] {..
15e60 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 15e70 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d [appendArgs "--- 15e80 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24 64 69 - checking "$di
15e90 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d  rectory "... "].
15ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
15eb0 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73   sql [appendArgs
15ec0 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 65   "PRAGMA " $dire 15ed0 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 ctory \;].... 15ee0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 15ef0 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 h {executeSql$s
15f00 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c  ql scalar} resul
15f10 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
15f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
15f30 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 15f40 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 endArgs "ok: \"" 15f50 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a$result \"\n]..
15f60 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
15f70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15f80 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 15f90 61 70 70 65 6e 64 41 72 67 73 20 22 65 72 72 6f appendArgs "erro 15fa0 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c r: " \n\t$resul
15fb0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
15fc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
15fd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
15fe0 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61 64 53  ..    proc loadS
15ff0 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67  QLiteTestSetting
16000 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66  s { channel {suf
16010 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74 20 66  fix ""} {quiet f
16020 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
16030 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
16040 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74  : Skip loading t
16050 68 65 20 73 65 74 74 69 6e 67 73 20 69 66 20 74  he settings if t
16060 68 65 69 72 20 75 73 61 67 65 20 68 61 73 20 62  heir usage has b
16070 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20  een disabled...
16080 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
16090 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
160a0 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73 74 53  ::no(sqliteTestS
160b0 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20  ettings)]} then
160c0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
160d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f        # NOTE: Lo
160e0 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73  ad custom per-us
160f0 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f  er and/or per-ho
16100 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
16110 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23   now...        #
16120 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
16130 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c  nfo exists ::tcl
16140 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 5d  _platform(user)]
16150 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16160 20 20 20 20 73 65 74 20 75 73 65 72 53 65 74 74      set userSett
16170 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69  ingsFileName [fi
16180 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d  le join [getComm
16190 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a  onDirectory] \..
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
161b0 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e  ppendArgs settin
161c0 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a  gs $suffix .$::
161d0 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65  tcl_platform(use
161e0 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20  r) .eagle]]....
161f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
16200 6c 65 20 65 78 69 73 74 73 20 24 75 73 65 72 53  le exists $userS 16210 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 16220 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16230 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
16240 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
16250 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $16260 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 16270 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 16280 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 16290 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 oading per-user 162a0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 test settings fi 162b0 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 le \"" \.. 162c0 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65$use
162d0 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  rSettingsFileNam
162e0 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20  e \"...\n]..
162f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
16300 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
16310 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
16320 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b       uplevel 1 [
16330 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75 73 65  list source $use 16340 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 16350 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e].. 16360 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { 16370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16380 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
16390 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
163a0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 163b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 163c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 163d0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 163e0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 163f0 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 20 73 65 load per-user se 16400 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 16410 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16420 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74$userSett
16430 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22  ingsFileName "\"
16440 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
16450 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 16460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 16470 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 16480 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 16490 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 164a0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
164b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
164c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 164d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 164f0 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 ---- skipped loa 16500 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 ding per-user te 16510 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 st settings file 16520 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 16530 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53$userS
16540 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
16550 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
16560 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
16570 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
16580 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
16590 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23  }....        ###
165a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
165e0 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ####....
165f0 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
16600 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
16610 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  host)]} then {..
16620 20 20 20 20 20 20 20 20 20 20 73 65 74 20 68 6f            set ho
16630 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
16640 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  me [file join [g
16650 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72  etCommonDirector
16660 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  y] \..
16670 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20      [appendArgs
16680 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78  settings $suffix 16690 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f .$::tcl_platfo
166a0 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d  rm(host) .eagle]
166b0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
166c0 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
166d0 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c  $hostSettingsFil 166e0 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 166f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 16700 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
16710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
16720 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 16730 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 16750 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 ---- loading per 16760 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 -host test setti 16770 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16790 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46$hostSettingsF
167a0 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d  ileName \"...\n]
167b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
167c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
167d0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
167e0 20 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76             uplev
167f0 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63  el 1 [list sourc
16800 65 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46  e $hostSettingsF 16810 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. 16820 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 } error]} 16830 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 16840 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
16850 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
16860 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
16870 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 16880 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 16890 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 168a0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 168b0 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 68 ed to load per-h 168c0 6f 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c ost settings fil 168d0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f$ho
168f0 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
16900 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  me "\", error: "
16910 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 16920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16930 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 16940 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 16950 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 16960 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
16970 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
16980 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 16990 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 169a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 169b0 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp 169c0 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 ed loading per-h 169d0 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 ost test setting 169e0 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16a00 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c$hostSettingsFil
16a10 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f  eName "\", it do
16a20 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d  es not exist\n"]
16a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16a40 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
16a50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
16a60 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
16a70 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65  proc runSQLiteTe
16a80 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d  stPrologue {} {.
16a90 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16aa0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e  # NOTE: Skip run
16ab0 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20  ning our custom
16ac0 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68 65 20  prologue if the
16ad0 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65  main one has bee
16ae0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
16af0 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20   skipped...
16b00 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b   #..      if {![
16b10 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
16b20 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29  (prologue.eagle)
16b30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
16b40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
16b50 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22  NOTE: Load the "
16b60 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72 61 69 6e  before-constrain
16b70 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75  ts" custom per-u
16b80 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68  ser and/or per-h
16b90 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ost..        #
16ba0 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e       test settin
16bb0 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  gs now...
16bc0 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65   #..        uple
16bd0 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64  vel 1 [list load
16be0 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e  SQLiteTestSettin
16bf0 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  gs $::test_chann 16c00 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 el .before].... 16c10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 16c20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d # NOTE: Determ 16c30 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 ine the names of 16c40 20 74 68 65 20 6e 61 74 69 76 65 20 70 6c 61 74 the native plat 16c50 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 form and archite 16c60 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 cture... 16c70 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 #.. set p 16c80 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c latform [getBuil 16c90 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 5d 0d dPlatform true]. 16ca0 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 72 63 . set arc 16cb0 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 68 69 hitecture [archi 16cc0 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 66 6f tectureForPlatfo 16cd0 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d rm$platform]...
16ce0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
16cf0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
16d00 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e   the platform an
16d10 64 20 61 72 63 68 69 74 65 63 74 75 72 65 20 75  d architecture u
16d20 73 65 64 20 74 6f 20 68 65 6c 70 20 6c 6f 63 61  sed to help loca
16d30 74 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  te the..
16d40 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 62  #       native b
16d50 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a 20 20 20  uild files...
16d60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16d70 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 16d80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 16d90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 16da0 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 "---- platform 16db0 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 for locating nat 16dc0 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 ive build files 16dd0 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 is \"" \.. 16de0 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20$platform
16df0 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
16e00 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 16e10 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 16e20 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 16e30 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69 74 65 63 "---- architec 16e40 74 75 72 65 20 66 6f 72 20 6c 6f 63 61 74 69 6e ture for locatin 16e50 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 g native build f 16e60 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 iles is \"" \.. 16e70 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
16e80 69 74 65 63 74 75 72 65 20 5c 22 5c 6e 5d 0d 0a  itecture \"\n]..
16e90 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16ea0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
16eb0 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6e  ld a list of con
16ec0 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
16ed0 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
16ee0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16ef0 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 46       set configF
16f00 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c  ileNames [list \
16f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
16f20 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
16f30 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a  .dll.config]....
16f40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16f50 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
16f60 20 61 20 6c 69 73 74 20 6f 66 20 61 75 78 69 6c   a list of auxil
16f70 69 61 72 79 20 4d 61 6e 61 67 65 64 20 44 65 62  iary Managed Deb
16f80 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74  ugging Assistant
16f90 73 20 28 4d 44 41 29 0d 0a 20 20 20 20 20 20 20  s (MDA)..
16fa0 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75   #       configu
16fb0 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61  ration files tha
16fc0 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  t we handle...
16fd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16fe0 20 73 65 74 20 6d 64 61 43 6f 6e 66 69 67 46 69   set mdaConfigFi
16ff0 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
17000 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 61 67  .            Eag
17010 6c 65 53 68 65 6c 6c 33 32 2e 65 78 65 2e 6d 64  leShell32.exe.md
17020 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74 61 6c 6c  a.config Install
17030 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  er.exe.mda.confi
17040 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g \..
17050 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f   test.exe.mda.co
17060 6e 66 69 67 20 74 65 73 74 6c 69 6e 71 2e 65 78  nfig testlinq.ex
17070 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a  e.mda.config \..
17080 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
17090 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ef6.exe.mda.conf
170a0 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ig]....        #
170b0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
170c0 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74  : Build the list
170d0 20 6f 66 20 65 78 74 65 72 6e 61 6c 20 66 69 6c   of external fil
170e0 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
170f0 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a 20 20 20  e.  Some of..
17100 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
17110 73 65 20 66 69 6c 65 73 20 6d 61 79 20 62 65 20  se files may be
17120 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 20 6d 61  native and/or ma
17130 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73  naged assemblies
17140 20 74 68 61 74 20 61 72 65 0d 0a 20 20 20 20 20   that are..
17150 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69     #       requi
17160 72 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 76  red to perform v
17170 61 72 69 6f 75 73 20 74 65 73 74 73 2e 0d 0a 20  arious tests...
17180 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17190 20 20 73 65 74 20 65 78 74 65 72 6e 61 6c 46 69    set externalFi
171a0 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
171b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
171c0 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74 79 46 72  le join EntityFr
171d0 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b 73 74 72  amework lib [str
171e0 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 46 78  ing map [list Fx
171f0 20 22 22 5d 20 5b 73 74 72 69 6e 67 20 5c 0d 0a   ""] [string \..
17200 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 70 20              map
17210 5b 6c 69 73 74 20 6e 65 74 46 78 34 35 31 20 6e  [list netFx451 n
17220 65 74 46 78 34 35 5d 20 5b 67 65 74 42 75 69 6c  etFx45] [getBuil
17230 64 4e 65 74 46 78 5d 5d 5d 20 45 6e 74 69 74 79  dNetFx]]] Entity
17240 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d  Framework.dll]].
17250 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
17260 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
17270 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  ild the list of
17280 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79 20  native assembly
17290 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
172a0 6e 64 6c 65 2e 20 20 54 68 65 0d 0a 20 20 20 20  ndle.  The..
172b0 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61 73      #       reas
172c0 6f 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44  on the "System.D
172d0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 20  ata.SQLite.dll"
172e0 66 69 6c 65 20 69 73 20 69 6e 63 6c 75 64 65 64  file is included
172f0 20 68 65 72 65 20 69 73 0d 0a 20 20 20 20 20 20   here is..
17300 20 20 23 20 20 20 20 20 20 20 62 65 63 61 75 73    #       becaus
17310 65 20 69 74 20 63 6f 75 6c 64 20 62 65 20 74 68  e it could be th
17320 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
17330 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  embly...
17340 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e  #..        set n
17350 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b  ativeFileNames [
17360 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
17370 20 20 20 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20      sqlite3.dll
17380 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
17390 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ll System.Data.S
173a0 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  QLite.dll]....
173b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
173c0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
173d0 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67  he list of manag
173e0 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  ed assembly file
173f0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
17400 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
17410 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61 67 65        set manage
17420 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  dFileNames [list
17430 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17440 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
17450 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61  te.dll System.Da
17460 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
17470 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ll \..
17480 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
17490 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d  Lite.EF6.dll]...
174a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
174b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f      # NOTE: Remo
174c0 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73  ve any test cons
174d0 74 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66  traints that ref
174e0 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65  er to the native
174f0 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20   and/or..
17500 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64   #       managed
17510 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20   assembly files
17520 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75  that we handle u
17530 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20  nless forbidden
17540 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20  from..        #
17550 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d        doing so..
17560 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
17570 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
17580 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74  xists ::no(sqlit
17590 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e  eRemoveConstrain
175a0 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ts)]} then {..
175b0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
175c0 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67  fileName $config 175d0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 175e0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 175f0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 17600 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c dArgs file_$fil
17610 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..
17620 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
17630 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
17640 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65  e $mdaConfigFile 17650 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 17660 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 17670 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 17680 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
17690 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
176a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
176b0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65  each fileName $e 176c0 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 xternalFileNames 176d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 176e0 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 176f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 17700 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 e_ [file tail$f
17710 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20  ileName]]..
17720 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
17730 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
17740 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 17750 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 17760 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 17770 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 17780 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
17790 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
177a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
177b0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 177c0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 177d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 177e0 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 emoveConstraint 177f0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 17800 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 _$fileName]..
17810 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
17820 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
17830 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
17840 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 73 74  E: Skip all Syst
17850 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
17860 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61 6e 64  elated file hand
17870 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d  ling (deleting,.
17880 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
17890 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f   copying, and lo
178a0 61 64 69 6e 67 29 20 69 66 20 69 6e 73 74 72 75  ading) if instru
178b0 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  cted...        #
178c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
178d0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
178e0 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  (sqliteFiles)]}
178f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17900 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
17910 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69   NOTE: Skip tryi
17920 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79  ng to delete any
17930 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75   files if instru
17940 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
17950 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
17960 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
17970 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
17980 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
17990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
179a0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
179b0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
179c0 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20  eConfigFiles)]}
179d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
179e0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
179f0 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69  leName $configFi 17a00 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 17a10 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 17a20 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
17a30 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
17a40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
17a50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
17a60 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
17a70 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
17a80 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74 65 72  eleteSqliteExter
17a90 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  nalFiles)]} then
17aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
17ab0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
17ac0 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c  me $mdaConfigFil 17ad0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 17ae0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 17af0 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 69 eteBuildFile$fi
17b00 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
17b10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
17b20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
17b30 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72   fileName $exter 17b40 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a nalFileNames {.. 17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17b60 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 tryDeleteBinaryF 17b70 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 ile$fileName..
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17b90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
17bb0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
17bc0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
17bd0 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74  NativeFiles)]} t
17be0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
17bf0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
17c00 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
17c10 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74  teSqliteImplicit
17c20 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
17c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
17c40 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
17c50 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 17c60 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 17c70 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 17c80 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
17c90 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
17ca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
17cb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
17cc0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
17cd0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
17ce0 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49  deleteSqliteNonI
17cf0 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20  mplicitFiles)]}
17d00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17d10 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
17d20 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
17d30 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66  eleteSqlitePlatf
17d40 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ormFiles)] && \.
17d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
17d60 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
17d70 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > 17d80 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 17da0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
17db0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
17dc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
17dd0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
17de0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 17df0 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 me$platform..
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17e10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
17e20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
17e30 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
17e40 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
17e50 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69  eleteSqliteArchi
17e60 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
17e70 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
17e80 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
17e90 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 17ea0 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 17eb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17ec0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 17ed0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
17ee0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17f00 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
17f10 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68   $fileName$arch
17f20 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20  itecture..
17f30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17f60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
17f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
17f80 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
17f90 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
17fa0 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29  iteManagedFiles)
17fb0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
17fc0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
17fd0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67   fileName $manag 17fe0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 18000 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 18010 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
18020 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
18030 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
18040 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18050 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
18060 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
18070 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c  for the "autoSel
18080 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ect" runtime opt
18090 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74  ion.  If present
180a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ,..          #
180b0 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20       attempt to
180c0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65  automatically se
180d0 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61  lect the first a
180e0 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..
180f0 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c      #       buil
18100 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29  d (or "release")
18110 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53   of SQLite and S
18120 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
18130 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
18140 20 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74       for use wit
18150 68 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  h the test suite
18160 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
18170 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68            if {[h
18180 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  asRuntimeOption
18190 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65  autoSelect]} the
181a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
181b0 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53   if {![checkForS
181c0 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74  QLiteBuilds $::t 181d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 est_channel true 181e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 181f0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 18200 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 rSQLiteReleases 18210 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
18220 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  true..
18230 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
18240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
18250 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
18260 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
18270 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69  o verify the bui
18280 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20  ld directory if
18290 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20  instructed;..
182a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
182b0 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73  therwise, make s
182c0 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20  ure it actually
182d0 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74  exists or halt t
182e0 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20  he entire..
182f0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
18300 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20  ting process if
18310 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
18320 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
18330 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
18340 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
18350 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72  o(verifyBuildDir
18360 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b  ectory)]} then {
18370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
18380 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
18390 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69  OTE: At this poi
183a0 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69  nt, the build di
183b0 72 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69  rectory MUST exi
183c0 73 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20  st as a..
183d0 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c       #       val
183e0 69 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  id directory for
183f0 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f   the testing pro
18400 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65  cess to continue
18410 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
18420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
18430 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74  t directory [get
18440 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 0d  BuildDirectory].
18450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
18460 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
18470 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20   $directory] || 18480 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18490 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65 ![file isdire 184a0 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 ctory$directory
184b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
184c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
184d0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
184e0 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f 20  : Just prior to
184f0 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67  actually halting
18500 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f   the testing pro
18510 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  cess,..
18520 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64       #       add
18530 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65   an error to the
18540 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d   test log file..
18550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
18560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18570 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 18580 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 18590 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 185a0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 "---- cou 185b0 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 ld not verify bu 185c0 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 ild directory \" 185d0 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a "$directory \..
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
185f0 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69    "\", all testi
18600 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d  ng halted\n"]...
18610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
18620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18630 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20  # NOTE: Raising
18640 61 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 66  a script error f
18650 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73  rom this point s
18660 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20  hould halt..
18670 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
18680 20 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72    the testing pr
18690 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ocess...
186a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
186b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70         error [ap
186c0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
186e0 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20  ould not verify
186f0 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20  build directory
18700 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c  \"" $directory \ 18710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18720 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 "\", all tes 18730 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20 ting halted"].. 18740 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 18750 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18760 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18770 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 18780 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 trying to copy 18790 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 any files if ins 187a0 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 187b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 187c0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 187d0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 187e0 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 teFiles)]} then 187f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 18800 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 18810 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 18820 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 ConfigFiles)]} t 18830 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18840 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 18850 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c eName$configFil
18860 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
18870 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70            tryCop
18880 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65  yBuildFile $file 18890 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 188a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 188b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 188c0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 188d0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 188e0 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c qliteExternalFil 188f0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 18900 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 18910 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 18920 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d 61 OTE: Copy the Ma 18930 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 naged Debugging 18940 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 Assistants (MDA) 18950 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a configuration.. 18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 18970 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20 74 file for t 18980 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 74 he Eagle shell t 18990 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 o the build outp 189a0 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 ut directory,.. 189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 189c0 20 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e 67 while using 189d0 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d each of the nam 189e0 65 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75 es of the variou 189f0 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a 20 s legacy test.. 18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 18a10 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 73 executables 18a20 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 6c . This will hel 18a30 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 p to make sure t 18a40 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 hat all the.. 18a50 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 18a60 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 20 legacy tests 18a70 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c 79 run with exactly 18a80 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66 the same set of 18a90 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 Managed.. 18aa0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 18ab0 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 18ac0 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e ants configured. 18ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18ae0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 18af0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 18b00 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 e$mdaConfigFile
18b10 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
18b20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
18b30 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65  BinaryFile Eagle
18b40 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f  Shell.exe.mda.co
18b50 6e 66 69 67 20 22 22 20 24 66 69 6c 65 4e 61 6d  nfig "" $fileNam 18b60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 18b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 18b80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 18b90 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 # NOTE: Cop 18ba0 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 y the external b 18bb0 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e 79 2c inaries, if any, 18bc0 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 18bd0 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 y that.. 18be0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 18bf0 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67 6c 65 ntains the Eagle 18c00 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 69 73 shell. This is 18c10 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20 typically used 18c20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 to make.. 18c30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 18c40 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73 20 72 ure assemblies r 18c50 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 eferenced by the 18c60 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 73 74 ones being test 18c70 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 ed are.. 18c80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76 # av 18c90 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 20 74 ailable during t 18ca0 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 he testing proce 18cb0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ss... 18cc0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18cd0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 18ce0 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 Name$externalFi
18cf0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
18d00 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
18d10 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 24  pyExternalFile $18d20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 18d30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 18d40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 18d50 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 18d60 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 18d70 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 46 opySqliteNativeF 18d80 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 18da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 18db0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 NOTE: If the te 18dc0 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6c st platform is l 18dd0 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c ikely the defaul 18de0 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 t for this.. 18df0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 18e00 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f 20 machine, also 18e10 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65 20 try to copy the 18e20 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f 20 native files to 18e30 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the.. 18e40 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 # binar 18e50 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 y location... 18e60 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 18e70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 18e80 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 18e90 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 no(copySqliteImp 18ea0 6c 69 63 69 74 46 69 6c 65 73 29 5d 20 26 26 20 licitFiles)] && 18eb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18ec0 20 20 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42 [isDefaultB 18ed0 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 uildPlatform tru 18ee0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 18ef0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 18f00 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 ach fileName$na
18f10 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  tiveFileNames {.
18f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18f30 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
18f40 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  ly $fileName.. 18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 18f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 18f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 18f80 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 18f90 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 18fa0 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 iteNonImplicitFi 18fb0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i 18fd0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 18fe0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 18ff0 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 PlatformFiles)] 19000 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 19010 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 19020 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
19030 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
19040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19050 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
19060 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 19070 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 19080 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 19090 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c opyAssembly$fil
190a0 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d  eName $platform. 190b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 190c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 190d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 190e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 190f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 19100 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 o(copySqliteArch 19110 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 itectureFiles)] 19120 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 19130 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 19140 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 g length$archit
19150 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65  ecture] > 0} the
19160 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19170 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
19180 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46  ileName $nativeF 19190 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 191b0 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 191c0 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69$fileName $archi 191d0 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 tecture.. 191e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 19200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 19210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 19220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 19230 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 19240 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 19250 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 ManagedFiles)]} 19260 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19270 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 19280 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 leName$managedF
19290 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
192a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
192b0 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 192c0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 192d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 192e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 192f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 19300 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 19310 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 OTE: Skip trying 19320 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c to load any fil 19330 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 es if instructed 19340 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 19350 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 19360 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 19370 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73 (loadSqliteFiles 19380 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 19390 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 193a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 193b0 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 oadSqliteImplici 193c0 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b tFiles)]} then { 193d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 193e0 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 193f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 19400 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 te.dll.. 19410 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 19420 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 19430 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 exists ::no(load 19440 53 71 6c 69 74 65 4c 69 6e 71 46 69 6c 65 73 29 SqliteLinqFiles) 19450 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 19460 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 tryLoad 19470 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 19480 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 19490 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 194a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 194b0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 194c0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 194d0 6c 69 74 65 45 66 36 46 69 6c 65 73 29 5d 7d 20 liteEf6Files)]} 194e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 194f0 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 tryLoadAss 19500 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 embly System.Dat 19510 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c a.SQLite.EF6.dll 19520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 19530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 19540 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 19550 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 19560 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 NonImplicitFiles 19570 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 19580 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 19590 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 195a0 28 6c 6f 61 64 53 71 6c 69 74 65 50 6c 61 74 66 (loadSqlitePlatf 195b0 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ormFiles)] && \. 195c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 195d0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 195e0 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 h$platform] > 0
195f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19600 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61            tryLoa
19610 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d  dAssembly System
19620 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
19630 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20   $platform.. 19640 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 19650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 19660 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 19670 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 41 72 :no(loadSqliteAr 19680 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 19690 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 196a0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 196b0 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 g length$archit
196c0 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65  ecture] > 0} the
196d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
196e0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
196f0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
19700 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63  .SQLite.dll $arc 19710 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 hitecture.. 19720 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 19730 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 19740 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 19750 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 19760 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 19770 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
19780 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19790 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
197a0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
197b0 72 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74  rsion of \"sqlit
197c0 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  e3.dll\"... " \.
197d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
197e0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
197f0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
19800 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e  sqlite3.dll]] \n
19810 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
19820 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
19830 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
19840 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 19850 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 19870 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 19880 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 of \"SQLite.Int 19890 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 erop.dll\"... " 198a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 198b0 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 198c0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 198d0 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 e SQLite.Interop 198e0 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 .dll]] \n].. 198f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 19900 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 19910 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
19920 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
19930 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
19940 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
19950 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
19960 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
19970 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a  e.dll\"... " \..
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
19990 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74  ile version [get
199a0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53  BinaryFileName S
199b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
199c0 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  e.dll]] \n]..
199d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
199e0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
199f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 19a00 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 19a10 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 19a20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 19a30 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 19a40 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 19a50 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e te.Linq.dll\"... 19a60 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 19a70 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f [file versio 19a80 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 19a90 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 Name System.Data 19aa0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 19ab0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 19ac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 19ad0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 19ae0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
19af0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19b00 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19b10 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
19b20 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
19b30 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
19b40 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a  6.dll\"... " \..
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
19b60 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74  ile version [get
19b70 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53  BinaryFileName S
19b80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
19b90 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  e.EF6.dll]] \n].
19ba0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
19bb0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
19bc0 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo 19bd0 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rm] > 0} then {. 19be0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 19bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19c00 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
19c10 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19c20 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19c30 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
19c40 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24  version of \"" $19c50 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 platform \.. 19c60 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 "/sq 19c70 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 lite3.dll\"... " 19c80 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c [file version \ 19c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19ca0 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 [getBinaryFile 19cb0 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c Name sqlite3.dll 19cc0 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d$platform]] \n]
19cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
19ce0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
19cf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
19d00 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 19d10 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 19d20 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 19d30 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 19d40 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
19d50 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20  platform \..
19d60 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 51              "/SQ
19d70 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
19d80 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65  \"... " [file ve
19d90 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  rsion \..
19da0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e           [getBin
19db0 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69  aryFileName SQLi
19dc0 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24  te.Interop.dll $19dd0 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a platform]] \n].. 19de0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 19df0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 19e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 19e10 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
19e20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
19e30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19e40 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
19e50 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c  rsion of \"" $pl 19e60 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 atform \.. 19e70 20 20 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 "/Syst 19e80 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 19e90 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 ll\"... " [file 19ea0 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 version \.. 19eb0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 19ec0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 inaryFileName Sy 19ed0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 19ee0 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d .dll$platform]]
19ef0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
19f00 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
19f10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
19f20 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68  ing length $arch 19f30 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 itecture] > 0} t 19f40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19f50 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 19f60 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
19f70 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
19f80 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
19f90 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
19fa0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
19fb0 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75   \"" $architectu 19fc0 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 re \.. 19fd0 20 20 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e "/sqlite3. 19fe0 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 dll\"... " [file 19ff0 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 version \.. 1a000 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 1a010 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 BinaryFileName s 1a020 71 6c 69 74 65 33 2e 64 6c 6c 20 24 61 72 63 68 qlite3.dll$arch
1a030 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a  itecture]] \n]..
1a040 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1a050 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
1a060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1a070 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1a080 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1a090 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a0a0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 1a0b0 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 rsion of \""$ar
1a0c0 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20  chitecture \..
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f                "/
1a0e0 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
1a0f0 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20  ll\"... " [file
1a100 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  version \..
1a110 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
1a120 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51  inaryFileName SQ
1a130 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
1a140 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d   $architecture]] 1a150 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1a160 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 }.... c 1a170 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1a180 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1a190 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1a1a0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1a1b0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
1a1c0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
1a1d0 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65  "" $architecture 1a1e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a1f0 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 "/System.Dat 1a200 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e a.SQLite.dll\".. 1a210 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f . " [file versio 1a220 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 1a230 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 [getBinaryF 1a240 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 ileName System.D 1a250 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 ata.SQLite.dll$
1a260 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c  architecture]] \
1a270 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1a280 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1a290 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a2a0 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
1a2b0 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65  e list of manage
1a2c0 64 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72  d assemblies for
1a2d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
1a2e0 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20  cess..        #
1a2f0 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74        and report
1a300 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44   on the System.D
1a310 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
1a320 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20  ed ones...
1a330 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
1a340 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a   assemblies [obj
1a350 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f  ect invoke AppDo
1a360 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61  main.CurrentDoma
1a370 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73  in GetAssemblies
1a380 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  ]....        obj
1a390 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 65  ect foreach asse
1a3a0 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73  mbly $assemblies 1a3b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1a3c0 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 1a3d0 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \{System.Data.SQ 1a3e0 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d Lite*$assembly]
1a3f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a400 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1a410 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1a420 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1a430 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1a440 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 61 73 found loaded as 1a450 73 65 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 6d sembly: "$assem
1a460 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  bly \n]..
1a470 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1a480 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
1a490 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
1a4a0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1a4b0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 1a4c0 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e "---- defin 1a4d0 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 e constants for 1a4e0 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 1a4f0 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 Lite\"... ".... 1a500 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1a510 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1a520 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1a530 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 1a540 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 1a550 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1a560 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 1a570 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 DefineConstants 1a580 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 64 65 .. } de 1a590 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d fineConstants] = 1a5a0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1a5b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1a5c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1a5d0 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d  appendArgs [form
1a5e0 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d  atList [lsort \.
1a5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a600 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74   $defineConstant 1a610 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a s] <none>] \n].. 1a620 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1a630 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a640 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1a650 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
1a660 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1a670 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1a680 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
1a690 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1a6a0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1a6c0 2d 2d 20 73 6f 75 72 63 65 20 76 65 72 73 69 6f -- source versio 1a6d0 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 n of \"System.Da 1a6e0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 1a6f0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 1a700 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1a710 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 1a720 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1a730 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 1a750 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1a760 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 1a770 6f 6e 20 50 72 6f 76 69 64 65 72 56 65 72 73 69 on ProviderVersi 1a780 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 on.. } 1a790 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 version] == 0} t 1a7a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a7b0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 1a7c0 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 ength$version]
1a7d0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
1a7f0 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20  version null..
1a800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1a810 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a820 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1a830 61 70 70 65 6e 64 41 72 67 73 20 24 76 65 72 73 appendArgs$vers
1a840 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ion \n]..
1a850 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1a860 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a870 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 ::test_channel u 1a880 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 nknown\n.. 1a890 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1a8a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 1a8b0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 1a8c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1a8d0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
1a8e0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72        "---- sour
1a8f0 63 65 20 63 68 65 63 6b 6f 75 74 20 6f 66 20 5c  ce checkout of \
1a900 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
1a910 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a  ite.dll\"... "..
1a920 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1a930 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1a940 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1a950 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1a960 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
1a970 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1a980 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
1a990 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f  teConnection Pro
1a9a0 76 69 64 65 72 53 6f 75 72 63 65 49 64 0d 0a 20  viderSourceId..
1a9b0 20 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 63           } sourc
1a9c0 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  eId] == 0} then
1a9d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1a9e0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
1a9f0 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20  h $sourceId] == 1aa00 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1aa10 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 set sou 1aa20 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 rceId null.. 1aa30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1aa40 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1aa50 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1aa60 70 65 6e 64 41 72 67 73 20 24 73 6f 75 72 63 65  pendArgs $source 1aa70 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 Id \n].. 1aa80 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1aa90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1aaa0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
1aab0 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
1aac0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1aad0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1aae0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
1aaf0 65 63 6b 20 74 68 65 20 61 76 61 69 6c 61 62 6c  eck the availabl
1ab00 65 20 62 75 69 6c 64 73 20 28 61 6e 64 20 22 72  e builds (and "r
1ab10 65 6c 65 61 73 65 73 22 29 20 6f 66 20 53 51 4c  eleases") of SQL
1ab20 69 74 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ite and..
1ab30 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e   #       System.
1ab40 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
1ab50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ab60 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42   checkForSQLiteB
1ab70 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68  uilds $::test_ch 1ab80 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20 63 annel.. c 1ab90 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c heckForSQLiteRel 1aba0 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 eases$::test_ch
1abb0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
1abc0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1abd0 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64  TE: Now, we need
1abe0 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 20   to know if the
1abf0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
1ac00 61 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ary is available
1ac10 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1ac20 20 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20    (i.e. because
1ac30 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79  the managed-only
1ac40 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1ac50 69 74 65 20 61 73 73 65 6d 62 6c 79 20 63 61 6e  ite assembly can
1ac60 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1ac70 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 69    load without i
1ac80 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63  t; however, it c
1ac90 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e  annot do anythin
1aca0 67 20 75 73 65 66 75 6c 20 77 69 74 68 6f 75 74  g useful without
1acb0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1acc0 20 20 69 74 29 2e 20 20 49 66 20 77 65 20 61 72    it).  If we ar
1acd0 65 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65  e using the mixe
1ace0 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
1acf0 61 6e 64 20 77 65 20 61 6c 72 65 61 64 79 0d 0a  and we already..
1ad00 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1ad10 66 6f 75 6e 64 20 69 74 20 28 61 62 6f 76 65 29  found it (above)
1ad20 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  , this should al
1ad30 77 61 79 73 20 73 75 63 63 65 65 64 2e 0d 0a 20  ways succeed...
1ad40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1ad50 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
1ad60 4c 69 62 72 61 72 79 20 24 3a 3a 74 65 73 74 5f  Library $::test_ 1ad70 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 1ad80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1ad90 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 1ada0 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f he SQLite intero 1adb0 70 20 61 73 73 65 6d 62 6c 79 20 69 73 20 61 76 p assembly is av 1adc0 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 ailable... 1add0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 1ade0 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 ckForSQLiteInter 1adf0 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e op$::test_chann
1ae00 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  el....        #.
1ae10 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1ae20 20 43 68 65 63 6b 20 74 68 65 20 53 51 4c 69 74   Check the SQLit
1ae30 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
1ae40 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
1ae50 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ries...        #
1ae60 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
1ae70 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
1ae80 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ies $::test_chan 1ae90 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 1aea0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1aeb0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 : Attempt to det 1aec0 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f 75 ermine if variou 1aed0 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f s compile-time o 1aee0 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f ptions needed fo 1aef0 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 r.. # 1af00 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 test constrai 1af10 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65 64 nts were enabled 1af20 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 for the managed 1af30 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 68 65 72 assembly. Ther 1af40 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 1af50 20 20 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70 are some comp 1af60 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 ile-time options 1af70 20 74 68 61 74 20 6d 75 73 74 20 61 6c 73 6f 20 that must also 1af80 68 61 76 65 20 62 65 65 6e 20 65 6e 61 62 6c 65 have been enable 1af90 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 1afa0 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 for the inter 1afb0 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f op assembly in o 1afc0 72 64 65 72 20 74 6f 20 62 65 20 65 66 66 65 63 rder to be effec 1afd0 74 69 76 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 tive. For those 1afe0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1aff0 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77 69 options, it wi 1b000 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 20 74 68 ll be assumed th 1b010 61 74 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 at it was enable 1b020 64 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f d for the intero 1b030 70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 p.. # 1b040 20 20 20 61 73 73 65 6d 62 6c 79 20 69 66 20 69 assembly if i 1b050 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f t was enabled fo 1b060 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 r the managed as 1b070 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 1b080 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 #.. fore 1b090 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 ach defineConsta 1b0a0 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 nt [list \.. 1b0b0 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53 54 CHECK_ST 1b0c0 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 ATE COUNT_HANDLE 1b0d0 20 44 45 42 55 47 20 49 4e 54 45 52 4f 50 5f 43 DEBUG INTEROP_C 1b0e0 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f 44 45 42 ODEC INTEROP_DEB 1b0f0 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 UG \.. 1b100 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 INTEROP_EXTENS 1b110 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e ION_FUNCTIONS IN 1b120 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f TEROP_LEGACY_CLO 1b130 53 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c SE INTEROP_LOG \ 1b140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e .. IN 1b150 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e TEROP_TEST_EXTEN 1b160 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 SION INTEROP_VIR 1b170 54 55 41 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32 TUAL_TABLE NET_2 1b180 30 20 4e 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20 0 NET_35 \.. 1b190 20 20 20 20 20 20 20 20 4e 45 54 5f 34 30 20 4e NET_40 N 1b1a0 45 54 5f 34 35 20 4e 45 54 5f 34 35 31 20 4e 45 ET_45 NET_451 NE 1b1b0 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 50 4c 41 T_COMPACT_20 PLA 1b1c0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 TFORM_COMPACTFRA 1b1d0 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 20 20 MEWORK \.. 1b1e0 20 20 20 20 20 20 50 52 45 4c 4f 41 44 5f 4e 41 PRELOAD_NA 1b1f0 54 49 56 45 5f 4c 49 42 52 41 52 59 20 52 45 54 TIVE_LIBRARY RET 1b200 41 52 47 45 54 41 42 4c 45 20 53 51 4c 49 54 45 ARGETABLE SQLITE 1b210 5f 53 54 41 4e 44 41 52 44 20 5c 0d 0a 20 20 20 _STANDARD \.. 1b220 20 20 20 20 20 20 20 20 20 54 48 52 4f 57 5f 4f THROW_O 1b230 4e 5f 44 49 53 50 4f 53 45 44 20 54 52 41 43 45 N_DISPOSED TRACE 1b240 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f TRACE_CONNECTIO 1b250 4e 20 54 52 41 43 45 5f 44 45 54 45 43 54 49 4f N TRACE_DETECTIO 1b260 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. 1b270 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 54 52 TRACE_HANDLE TR 1b280 41 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 41 43 ACE_PRELOAD TRAC 1b290 45 5f 53 48 41 52 45 44 20 54 52 41 43 45 5f 53 E_SHARED TRACE_S 1b2a0 54 41 54 45 4d 45 4e 54 20 5c 0d 0a 20 20 20 20 TATEMENT \.. 1b2b0 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 57 41 TRACE_WA 1b2c0 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d 4f RNING TRACK_MEMO 1b2d0 52 59 5f 42 59 54 45 53 20 55 53 45 5f 45 4e 54 RY_BYTES USE_ENT 1b2e0 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 20 ITY_FRAMEWORK_6 1b2f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 \.. U 1b300 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 SE_INTEROP_DLL U 1b310 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57 49 SE_PREPARE_V2 WI 1b320 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 NDOWS] {.. 1b330 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1b340 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 1b350 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 f the compile-ti 1b360 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 me option is lis 1b370 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 20 ted in the list 1b380 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 of.. # 1b390 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 63 6f "define co 1b3a0 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74 72 nstants" kept tr 1b3b0 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d 61 ack of by the ma 1b3c0 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d naged assembly.. 1b3d0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1b3e0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 1b3f0 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 SQLiteDefineCons 1b400 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 tant$::test_cha
1b410 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73  nnel $defineCons 1b420 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d tant.. }. 1b430 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b440 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1b450 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 eck the current 1b460 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73 build year. Bas 1b470 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 ically, this ind 1b480 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 icates.. 1b490 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76 65 # which ve 1b4a0 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 rsion of MSBuild 1b4b0 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 and/or Visual S 1b4c0 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 74 tudio was used t 1b4d0 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 o.. # 1b4e0 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 compile the a 1b4f0 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 ssembly binaries 1b500 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 under test... 1b510 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1b520 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1b530 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
1b540 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
1b550 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e  king for System.
1b560 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c  Data.SQLite buil
1b570 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20  d year... "....
1b580 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20         set year
1b590 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a  [getBuildYear]..
1b5a0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
1b5b0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
1b5c0 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65  s buildYear. $ye 1b5d0 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 ar].. tpu 1b5e0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1b5f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1b600 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d  " $year \"\n]... 1b610 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1b620 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 1b630 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 k the current bu 1b640 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f ild .NET Framewo 1b650 72 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 rk. Basically, 1b660 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 1b670 20 20 20 20 20 20 69 6e 64 69 63 61 74 65 73 20 indicates 1b680 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 which version of 1b690 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 the .NET Framew 1b6a0 6f 72 6b 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 ork is being.. 1b6b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 1b6c0 65 64 20 62 79 20 74 68 65 20 61 73 73 65 6d 62 ed by the assemb 1b6d0 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 ly binaries unde 1b6e0 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 r test... 1b6f0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 1b700 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1b710 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
1b720 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
1b730 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
1b740 53 51 4c 69 74 65 20 62 75 69 6c 64 20 2e 4e 45  SQLite build .NE
1b750 54 20 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22  T Framework... "
1b760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
1b770 6e 65 74 46 78 20 5b 67 65 74 42 75 69 6c 64 4e  netFx [getBuildN
1b780 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 61  etFx]..        a
1b790 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  ddConstraint [ap
1b7a0 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 46 72  pendArgs buildFr
1b7b0 61 6d 65 77 6f 72 6b 2e 20 24 6e 65 74 46 78 5d  amework. $netFx] 1b7c0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1b7d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1b7e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $1b7f0 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 netFx \"\n].... 1b800 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b810 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1b820 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c the current buil 1b830 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 1b840 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f This should no 1b850 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 rmally.. 1b860 23 20 20 20 20 20 20 20 62 65 20 65 69 74 68 65 # be eithe 1b870 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 r "Debug" or "Re 1b880 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 lease"... 1b890 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 1b8a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1b8b0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
1b8c0 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
1b8d0 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
1b8e0 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e  SQLite build con
1b8f0 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d  figuration... ".
1b900 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  ...        set c
1b910 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65  onfiguration [ge
1b920 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
1b930 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 64  ion]..        ad
1b940 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
1b950 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e  endArgs buildCon
1b960 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e  figuration. $con 1b970 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 1b980 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1b990 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1b9a0 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69  ndArgs \" $confi 1b9b0 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a guration \"\n].. 1b9c0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1b9d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 # NOTE: Try 1b9e0 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74 to setup an int 1b9f0 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 errupt callback 1ba00 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70 74 using the script 1ba10 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20 debugger.. 1ba20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that 1ba30 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 will cancel all 1ba40 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 SQL queries in p 1ba50 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 rogress for all 1ba60 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 database.. 1ba70 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 # connec 1ba80 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 tions known to t 1ba90 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e his interpreter. 1baa0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1bab0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 1bac0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 exists ::no(sqli 1bad0 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 teInterruptCallb 1bae0 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ack)]} then {.. 1baf0 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44 62 setupDb 1bb00 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 InterruptCallbac 1bb10 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 k$::test_channe
1bb20 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20  l $::test_log.. 1bb30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1bb40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1bb50 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for 1bb60 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74 the native runt 1bb70 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 ime option, whic 1bb80 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 h would mean we 1bb90 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # 1bba0 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d using the m 1bbb0 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 ixed-mode assemb 1bbc0 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ly... #.. 1bbd0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 1bbe0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a RuntimeOption$:
1bbf0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61  :test_channel na
1bc00 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tive....
1bc10 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1bc20 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
1bc30 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c  test suite shoul
1bc40 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62  d count the numb
1bc50 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  er of connection
1bc60 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
1bc70 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20     "opened" and
1bc80 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68  "closed" from th
1bc90 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65  e pool when dete
1bca0 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73  rmining if a tes
1bcb0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
1bcc0 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 61     passed.  Disa
1bcd0 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 76  bling this behav
1bce0 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  ior is sometimes
1bcf0 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e   necessary (e.g.
1bd00 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1bd10 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c    during the rel
1bd20 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f  ease testing pro
1bd30 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 68  cess) because th
1bd40 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d  ere are several.
1bd50 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1bd60 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c 79   tests that rely
1bd70 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20   on the "opened
1bd80 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74  from pool" count
1bd90 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a   being greater..
1bda0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1bdb0 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73  than zero.  Thes
1bdc0 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c  e tests may fail
1bdd0 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d   due to the non-
1bde0 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20  deterministic..
1bdf0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
1be00 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43  ehavior of the C
1be10 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e  LR GC, even when
1be20 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67   there is no bug
1be30 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20   in the code..
1be40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
1be50 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20  ing tested...
1be60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1be70 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f  checkForRuntimeO
1be80 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68  ption $::test_ch 1be90 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e annel noPoolCoun 1bea0 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ts.... #. 1beb0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1bec0 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f Report the reso 1bed0 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 urce usage prior 1bee0 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 to running any 1bef0 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 tests... 1bf00 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 #.. repor 1bf10 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 tSQLiteResources 1bf20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1bf30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1bf40 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47         # NOTE: G
1bf50 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20  rab the list of
1bf60 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 66  native modules f
1bf70 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
1bf80 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 20  rocess and..
1bf90 20 20 20 20 23 20 20 20 20 20 20 20 72 65 70 6f      #       repo
1bfa0 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d  rt on the System
1bfb0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c  .Data.SQLite rel
1bfc0 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20  ated ones...
1bfd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
1bfe0 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65  et modules [obje
1bff0 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20  ct invoke \..
1c000 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1c010 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63  Diagnostics.Proc
1c020 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72  ess.GetCurrentPr
1c030 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a  ocess Modules]..
1c040 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
1c050 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
1c060 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20  module $modules 1c070 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 1c080 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1c090 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c : The module fil 1c0a0 65 20 6e 61 6d 65 20 68 65 72 65 20 6d 75 73 74 e name here must 1c0b0 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d be normalized.. 1c0c0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1c0d0 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 set file 1c0e0 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 Name [file norma 1c0f0 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 lize [$module Fi
1c100 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20  leName]]....
1c110 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
1c120 67 20 6d 61 74 63 68 20 2d 6e 6f 63 61 73 65 20  g match -nocase
1c130 2a 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 66  */sqlite3.dll $f 1c140 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 1c150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1c160 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1c170 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1c180 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1c190 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c     "---- found l
1c1a0 6f 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74  oaded SQLite nat
1c1b0 69 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75  ive library modu
1c1c0 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  le: " \..
1c1d0 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61           $fileNa 1c1e0 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 me \n].. 1c1f0 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 } elseif {[str 1c200 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 ing match \.. 1c210 20 20 20 20 20 20 20 20 20 20 20 2d 6e 6f 63 61 -noca 1c220 73 65 20 2a 2f 53 51 4c 69 74 65 2e 49 6e 74 65 se */SQLite.Inte 1c230 72 6f 70 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d rop.dll$fileNam
1c240 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
1c250 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1c260 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1c270 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1c290 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 -- found loaded 1c2a0 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 SQLite interop a 1c2b0 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 ssembly module: 1c2c0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1c2d0 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c$fileName \
1c2e0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1c2f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1c300 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1c310 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1c320 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 1c330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c340 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 "---- compile-ti 1c350 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 me options for S 1c360 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 1c370 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 ry... ".... 1c380 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1c390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 1c3a0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 1c3b0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 1c3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c3d0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1c3e0 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c Lite.SQLite3 SQL 1c3f0 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e iteCompileOption 1c400 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 s.. } c 1c410 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d ompileOptions] = 1c420 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1c430 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1c440 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1c450 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d  appendArgs [form
1c460 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d  atList [lsort \.
1c470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c480 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73   $compileOptions 1c490 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 ] <none>] \n].. 1c4a0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1c4b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1c4c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1c4d0 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
1c4e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1c4f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1c500 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
1c510 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1c520 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 1c530 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1c540 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f - compile-time o 1c550 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 ptions for SQLit 1c560 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 1c570 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 ly... ".... 1c580 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1c590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 1c5a0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 1c5b0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 1c5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c5d0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1c5e0 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 Lite.SQLite3 Int 1c5f0 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f eropCompileOptio 1c600 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ns.. } 1c610 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 compileOptions] 1c620 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1c630 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1c640 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1c650 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72  [appendArgs [for
1c660 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c  matList [lsort \
1c670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c680 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e    $compileOption 1c690 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a s] <none>] \n].. 1c6a0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1c6b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c6c0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1c6d0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
1c6e0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1c6f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1c700 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1c710 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61  NOTE: Show the a
1c720 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74  ctive test const
1c730 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20  raints...
1c740 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
1c750 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1c760 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d l [appendArgs "- 1c770 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a --- constraints: 1c780 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1c790 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c [formatList [l 1c7a0 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 sort [getConstra 1c7b0 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c ints]] <none>] \ 1c7c0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. 1c7d0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1c7e0 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20 63 Save the test c 1c7f0 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75 onstraints for u 1c800 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63 72 se by threads cr 1c810 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 eated in this.. 1c820 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a 1c830 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 pplication domai 1c840 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65 n. This is nece 1c850 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61 6c ssary because al 1c860 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 l the Eagle.. 1c870 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74 65 # "te 1c880 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f st context" info 1c890 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 rmation is per-t 1c8a0 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 hread... 1c8b0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 1c8c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1c8d0 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d est_constraints] 1c8e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c8f0 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 set ::test_c 1c900 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 onstraints$::ea
1c910 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72  gle_tests(constr
1c920 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20  aints)..
1c930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
1c940 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c950 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 2d  Load the "after-
1c960 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73  constraints" cus
1c970 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64  tom per-user and
1c980 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20  /or per-host..
1c990 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
1c9a0 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e  st settings now.
1c9b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1c9c0 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b       uplevel 1 [
1c9d0 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54  list loadSQLiteT
1c9e0 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74  estSettings $::t 1c9f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 est_channel .aft 1ca00 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 er].... # 1ca10 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1ca20 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 : Show when our 1ca30 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 62 tests actually b 1ca40 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 egan (now)... 1ca50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1ca60 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1ca70 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1ca80 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1ca90 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61   "---- System.Da
1caa0 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20  ta.SQLite tests
1cab0 62 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20  began at " \..
1cac0 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b            [clock
1cad0 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73   format [clock s
1cae0 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20  econds]] \n]..
1caf0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
1cb00 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c  .    proc runSQL
1cb10 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20  iteTestEpilogue
1cb20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
1cb30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
1cb40 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75  p running our cu
1cb50 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66  stom epilogue if
1cb60 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61   the main one ha
1cb70 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20  s been..      #
1cb80 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a        skipped...
1cb90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1cba0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1cbb0 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65   ::no(epilogue.e
1cbc0 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  agle)]} then {..
1cbd0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1cbe0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
1cbf0 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61  when our tests a
1cc00 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e  ctually ended (n
1cc10 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ow)...        #.
1cc20 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1cc30 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1cc40 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1cc50 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1cc60 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1cc70 74 65 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 te tests ended a 1cc80 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 t " \.. 1cc90 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 [clock format 1cca0 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 1ccb0 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 1ccc0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1ccd0 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 TE: Load the "ep 1cce0 69 6c 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 ilogue" custom p 1ccf0 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 er-user and/or p 1cd00 65 72 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 er-host test.. 1cd10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 1cd20 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 ttings now... 1cd30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1cd40 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 1cd50 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 loadSQLiteTestSe 1cd60 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 ttings$::test_c
1cd70 68 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65  hannel .epilogue
1cd80 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
1cd90 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58          # BUGFIX
1cda0 3a 20 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e  : Before checkin
1cdb0 67 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f  g the final reso
1cdc0 75 72 63 65 73 20 69 6e 20 75 73 65 20 62 79 20  urces in use by
1cdd0 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20  SQLite, make..
1cde0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
1cdf0 73 75 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65  sure both of the
1ce00 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20   PRAGMA related
1ce10 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20  directory names
1ce20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20  are freed...
1ce30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
1ce40 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72  heckForSQLiteDir
1ce50 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74  ectories $::test 1ce60 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d _channel true... 1ce70 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ce80 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f # NOTE: Also 1ce90 20 72 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f report the reso 1cea0 75 72 63 65 20 75 73 61 67 65 20 61 66 74 65 72 urce usage after 1ceb0 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 running the tes 1cec0 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 1ced0 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 reportSQ 1cee0 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a LiteResources$:
1cef0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
1cf00 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1cf10 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f      # NOTE: Repo
1cf20 72 74 20 74 68 65 20 63 72 69 74 69 63 61 6c 20  rt the critical
1cf30 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66  handle counts af
1cf40 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20  ter running the
1cf50 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  tests...
1cf60 23 0d 0a 20 20 20 20 20 20 20 20 67 65 74 53 51  #..        getSQ
1cf70 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73  LiteHandleCounts
1cf80 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   \$::test_channel
1cf90 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1cfa0 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23  .....    #######
1cfb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cfc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cfd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cfe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cff0 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23  ####..    ######
1d000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d010 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c  ####### END Eagl
1d020 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23  e ONLY #########
1d030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d040 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
1d050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d090 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20  ######..  }....
1d0a0 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61   #..  # NOTE: Sa
1d0b0 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ve the name of t
1d0c0 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e  he directory con
1d0d0 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  taining this fil
1d0e0 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21  e...  #..  if {!
1d0f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d  [info exists com
1d100 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20  mon_directory]}
1d110 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20  then {..    set
1d120 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
1d130 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
1d140 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20  info script]]..
1d150 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e   }....  #..  # N
1d160 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65  OTE: Provide the
1d170 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1d180 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  ite test package
1d190 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
1d1a0 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63  ter...  #..  pac
1d1b0 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79 73  kage provide Sys
1d1c0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1d1d0 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a           Test 1.0..}..