System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 12441f71f4ded0a99502ab9562d2003ff4405df1:

• File Tests/common.eagle — part of check-in [d0e28511f3] at 2014-07-29 22:48:24 on branch trunk — For the debug build configuration only, keep track of how many times each runtime configuration setting is read and have the test suite report on same. Pursuant to [58ed318f2f]. (user: mistachkin size: 117685)

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 65 72 72 6f 72 5d 0d 0a 0d error]... e9d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. e9e0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 # NOTE: If the c e9f0: 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 20 73 74 ombined flags st ea00: 72 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74 20 61 ring could not a ea10: 63 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e 76 65 ctually be conve ea20: 72 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 rted.. # ea30: 20 20 20 20 74 6f 20 74 68 65 20 65 6e 75 6d 65 to the enume ea40: 72 61 74 65 64 20 74 79 70 65 20 69 74 20 69 73 rated type it is ea50: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c the default val ea60: 75 65 2c 20 74 68 65 6e 20 6a 75 73 74 20 75 73 ue, then just us ea70: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # ea80: 20 69 74 20 76 65 72 62 61 74 69 6d 3b 20 6f 74 it verbatim; ot ea90: 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20 72 65 herwise, just re eaa0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 turn an empty st eab0: 72 69 6e 67 2e 20 20 49 6e 20 74 68 61 74 0d 0a ring. In that.. eac0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca ead0: 73 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 se, the default eae0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags eaf0: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a will be used... eb00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i eb10: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt eb20: 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 20 7c h$value] == 0 |
eb30: 7c 20 24 76 61 6c 75 65 20 6e 65 20 22 44 65 66  | $value ne "Def eb40: 61 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 ault"} then {.. eb50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. eb60: 20 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 # WARNING: Thi eb70: 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74 s returns the st eb80: 72 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74 68 ring value of th eb90: 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 e combined flags eba0: 2c 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 , not.. # ebb0: 20 20 20 20 20 20 20 20 20 20 74 68 65 20 65 6e the en ebc0: 75 6d 65 72 61 74 65 64 20 76 61 6c 75 65 2e 20 umerated value. ebd0: 20 54 68 69 73 20 69 73 20 62 79 20 64 65 73 69 This is by desi ebe0: 67 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f gn and should no ebf0: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # ec00: 20 20 20 20 20 20 62 65 20 63 68 61 6e 67 65 64 be changed ec10: 20 77 69 74 68 6f 75 74 20 63 61 72 65 66 75 6c without careful ec20: 20 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 20 28 consideration ( ec30: 65 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d 0a 20 e.g. it would.. ec40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # ec50: 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 53 51 prevent the SQ ec60: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 LiteConnection c ec70: 6c 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 lass from allowi ec80: 6e 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20 20 20 ng invalid.. ec90: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 5b # [ eca0: 22 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74 61 2d "magical"] meta- ecb0: 66 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20 20 20 flags)... ecc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu ecd0: 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 rn [appendArgs " ece0: 46 6c 61 67 73 3d 22 20 24 66 6c 61 67 73 20 5c Flags="$flags \
ecf0: 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ;]..      }....
ed00: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
ed10: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
ed20: 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20  oc setupDb {..
ed30: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
ed40: 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61  me {mode ""} {da
ed50: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d  teTimeFormat ""}
ed60: 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22   {dateTimeKind "
ed70: 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20  "} {flags ""}..
ed80: 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 72             {extr
ed90: 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74  a ""} {qualify t
eda0: 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75  rue} {delete tru
edb0: 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a  e} {uri false}..
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d              {tem
edd0: 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61  porary true} {va
ede0: 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 74  rName db} {quiet
edf0: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
ee00: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
ee10: 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69  TE: First, see i
ee20: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73  f our caller has
ee30: 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e   requested an in
ee40: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
ee50: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
ee60: 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b    set isMemory [
ee70: 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65  isMemoryDb $file ee80: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 Name].... # ee90: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: eea0: 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 For now, all tes eeb0: 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65 64 t databases used eec0: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 by the test sui eed0: 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 te are placed.. eee0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 # int eef0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64 o the database d ef00: 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20 irectory. Each ef10: 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c database and rel ef20: 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 ated files.. ef30: 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 # used b ef40: 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20 y a test should ef50: 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79 be cleaned up by ef60: 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67 that test using ef70: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # ef80: 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20 "cleanupDb" ef90: 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 procedure, below efa0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. efb0: 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
efc0: 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68   && $qualify} th efd0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se efe0: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 t fileName [file eff0: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 join [getDataba f000: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 seDirectory] [fi f010: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
f020: 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e]]..      }....
f030: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
f040: 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c   NOTE: By defaul
f050: 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72  t, delete any pr
f060: 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  e-existing datab
f070: 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ase with the sam
f080: 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20  e file..      #
f090: 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74        name if it
f0a0: 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74   currently exist
f0b0: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
f0c0: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor f0d0: 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 y &&$delete &&
f0e0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi f0f0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. f100: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f110: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte f120: 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e mpt to delete an f130: 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 y pre-existing d f140: 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 atabase with the f150: 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 same file.. f160: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name f170: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. f180: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch f190: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
f1a0: 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d  ileName} error]}
f1b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f1c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f1d0: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
f1e0: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  ow failed to del
f1f0: 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65  ete the file, re
f200: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
f210: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f220: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t f230: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. f240: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
f250: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
f260: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
f270: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
f280: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
f290: 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65   delete database
f2a0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN f2b0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. f2c0: 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin f2d0: 67 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 g setup, error: f2e0: 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
f2f0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
f300: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
f310: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
f320: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
f330: 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
f340: 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
f350: 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
f360: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
f370: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
f380: 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c  ller.  The handl
f390: 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20  e to the opened
f3a0: 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65  database will be
f3b0: 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
f3c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
f3d0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName f3e0: 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. f3f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 # NOTE: Sta f400: 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 rt building the f410: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin f420: 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 g. The only req f430: 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 uired portion.. f440: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of f450: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s f460: 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 tring is the dat f470: 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 a source, which f480: 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 contains the.. f490: 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 # data f4a0: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 base file name i f4b0: 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 tself. If our c f4c0: 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 aller wants to u f4d0: 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 se a URI as.. f4e0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d f4f0: 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 ata source, use f500: 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e the FullUri conn f510: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 ection string pr f520: 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 operty to.. f530: 20 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 # prevent f540: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 the data source f550: 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 string from bei f560: 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 ng mangled... f570: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { f580: 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$uri} then {..
f590: 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63        set connec
f5a0: 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b  tion {FullUri=${ f5b0: 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 fileName}}.. f5c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. f5d0: 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 set connecti f5e0: 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d on {Data Source= f5f0: 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20${fileName}}..
f600: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
f610: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
f620: 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65  Since this proce
f630: 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63  dure has no spec
f640: 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66  ial knowledge of
f650: 20 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c   what the defaul
f660: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
f670: 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20   setting is for
f680: 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63  the ToFullPath c
f690: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
f6a0: 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73   propery, always
f6b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
f6c0: 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65  add the value we
f6d0: 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74   know about to t
f6e0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
f6f0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ring...      #..
f700: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
f710: 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c  nection {;ToFull
f720: 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d  Path=${qualify}} f730: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. f740: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou f750: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi f760: 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 ed a journal mod f770: 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 e, add the neces f780: 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 sary portion.. f790: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t f7a0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st f7b0: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... f7c0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s f7d0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f tring length$mo
f7e0: 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  de] > 0} then {.
f7f0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
f800: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75  connection {;Jou
f810: 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65  rnal Mode=${mode f820: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... f830: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # f840: 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c NOTE: If our cal f850: 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 ler specified a f860: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c DateTime format, f870: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa f880: 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ry.. # f890: 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 portion of the f8a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri f8b0: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # f8c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str f8d0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
f8e0: 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d  TimeFormat] > 0}
f8f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f900: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
f910: 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72  on {;DateTimeFor
f920: 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f  mat=${dateTimeFo f930: 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d rmat}}.. }. f940: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. f950: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our f960: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie f970: 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 d a DateTimeKind f980: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess f990: 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. f9a0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th f9b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str f9c0: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... f9d0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st f9e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 ring length$dat
f9f0: 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20  eTimeKind] > 0}
fa00: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
fa10: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
fa20: 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64  n {;DateTimeKind
fa30: 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d  =${dateTimeKind} fa40: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... fa50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N fa60: 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 OTE: Figure out fa70: 77 68 61 74 20 74 68 65 20 66 69 6e 61 6c 20 66 what the final f fa80: 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20 63 6f lags for this co fa90: 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20 74 6f nnection need to faa0: 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 be... #.. fab0: 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b set flags [ fac0: 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 getConnectionFla fad0: 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 24 66 6c gs$fileName $fl fae0: 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 ags$quiet]....
faf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
fb00: 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c  NOTE: If our cal
fb10: 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 73 6f  ler specified so
fb20: 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  me SQLiteConnect
fb30: 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68  ionFlags, add th
fb40: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
fb50: 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
fb60: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63  on of the connec
fb70: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
fb80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
fb90: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
fba0: 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d  gth $flags] > 0} fbb0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. fbc0: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti fbd0: 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 on {;Flags=${fla
fbe0: 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  gs}}..      }...
fbf0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fc00: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
fc10: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
fc20: 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64  an extra payload
fc30: 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   to the connecti
fc40: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
fc50: 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 6e 64    string, append
fc60: 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20   it now...
fc70: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
fc80: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74  ring length $ext fc90: 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ra] > 0} then {. fca0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append fcb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 connection \;$e
fcc0: 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  xtra..      }...
fcd0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fce0: 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65  # NOTE: Open the
fcf0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
fd00: 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e  tion now, placin
fd10: 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 6e  g the opaque han
fd20: 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  dle value..
fd30: 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68   #       into th
fd40: 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 69  e variable speci
fd50: 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  fied by our call
fd60: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
fd70: 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c 20      set db [sql
fd80: 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 74  open -type SQLit
fd90: 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 63  e [subst $connec fda0: 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tion]].... fdb0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: fdc0: 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 74 Configure the t fdd0: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo fde0: 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 ry for the newly fdf0: 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 opened database fe00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # fe10: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75 connection now u fe20: 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 nless our caller fe30: 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 forbids it... fe40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if fe50: 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 21 {$temporary && !
fe60: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
fe70: 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44 69  o(setTemporaryDi
fe80: 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20  rectory)]} then
fe90: 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65  {..        sql e
fea0: 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65  xecute $db [appe feb0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. fec0: 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 65 "PRAGMA te fed0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f mp_store_directo fee0: 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 6d ry = \"" [getTem fef0: 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 5d poraryDirectory] ff00: 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d \"\;].. }. ff10: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ff20: 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 # NOTE: Always ff30: 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e return the conn ff40: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70 ection handle up ff50: 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 on success... ff60: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu ff70: 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c rn$db..    }...
ff80: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62  ..    proc getDb
ff90: 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61  Connection { {va
ffa0: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20  rName db} } {..
ffb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
ffc0: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
ffd0: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
ffe0: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
fff0: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
10000 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
10010 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
10020 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68  The handle to th
10030 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69  e database previ
10040 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61  ously opened via
10050 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
10060 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72      [setupDb] pr
10070 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62  ocedure should b
10080 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d  e stored there..
10090 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
100a0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 100b0 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. 100c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 100d0 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 41 is returns the A 100e0 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63 DO.NET IDbConnec 100f0 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74 tion object inst 10100 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 ance for the.. 10110 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65 63 # spec 10120 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68 61 ified databse ha 10130 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 74 ndle. Since get 10140 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 74 ting this object 10150 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20 relies upon.. 10160 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 10170 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65 e internals, gre 10180 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 at care should b 10190 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64 e taken to avoid 101a0 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 disposing of.. 101b0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 # thi 101c0 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 65 s object or othe 101d0 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69 74 rwise putting it 101e0 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64 into an invalid 101f0 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 state... # 10200 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 10210 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 o exists db]} th 10220 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 10230 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 10240 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 10250 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 10260 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61 ublic -objectfla 10270 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d 61 gs +NoDispose -a 10280 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 lias \.. 10290 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 74 65 Interprete 102a0 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e r.GetActive.conn 102b0 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64 62 ections Item$db
102c0 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75  ..        } resu
102d0 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
102e0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
102f0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
10300 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e   Success, return
10310 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65   the opaque obje
10320 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  ct handle...
10330 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10340 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 10350 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 t.. } els 10360 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e {.. # 10370 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 10380 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70 TE: Failure, rep 10390 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 103a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 103b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
103c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
103d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
103e0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
103f0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74  G: failed to get
10400 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
10410 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database
10420 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
10430 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72       $db "\", er 10440 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
10450 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
10460 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
10470 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
10480 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  freeDbConnection
10490 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e   { {varName conn
104a0 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20  ection} } {..
104b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
104c0 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65  TE: Refer to the
104d0 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61   specified varia
104e0 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65  ble (e.g. "conne
104f0 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a  ction") in the..
10500 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
10510 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c  ntext of our cal
10520 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65  ler.  The opaque
10530 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66   object handle f
10540 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20  or an ADO.NET..
10550 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
10560 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73  nection previous
10570 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b  ly returned by [
10580 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d  getDbConnection]
10590 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20   should be..
105a0 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 64    #       stored
105b0 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23   there...      #
105c0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
105d0 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74  $varName connect 105e0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a ion.... #.. 105f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 10600 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 tempt to remove 10610 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 the opaque objec 10620 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 t handle from th 10630 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 e interpreter.. 10640 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 # now 10650 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 . This [object 10660 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 dispose] call wi 10670 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 ll not actually 10680 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a dispose of the.. 10690 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 6e # un 106a0 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 derlying object 106b0 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 because the +NoD 106c0 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 ispose flag was 106d0 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 set on it.. 106e0 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 # during 106f0 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 creation of the 10700 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 opaque object ha 10710 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ndle... #.. 10720 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 10730 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f exists connectio 10740 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 n] && \.. 10750 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 [catch {objec 10760 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 t dispose$conne
10770 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74  ction} error]} t
10780 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
10790 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
107a0 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69  : We somehow fai
107b0 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68  led to remove th
107c0 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74  e handle, report
107d0 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23   why...        #
107e0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
107f0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 10800 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 10810 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 10820 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 10830 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 to remove conne 10840 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 ction handle \"" 10850 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a$connection \..
10860 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
10870 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $10880 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 10890 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 108a0 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e proc addDbConn 108b0 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 ection { connect 108c0 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d ion {varName db} 108d0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 108e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 # NOTE: Ref 108f0 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 er to the specif 10900 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e ied variable (e. 10910 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 g. "db") in the 10920 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a context of our.. 10930 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 10940 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ller... #.. 10950 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
10960 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
10970 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
10980 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72  TE: Create a cor
10990 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64  rectly formatted
109a0 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61   name for the da
109b0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
109c0 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  n to..      #
109d0 20 20 20 20 62 65 20 61 64 64 65 64 20 74 6f 20      be added to
109e0 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64  the list managed
109f0 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e   by the Eagle in
10a00 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
10a10 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64    #..      set d
10a20 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  b [object invoke
10a30 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
10a40 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
10a50 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74  Eagle._Component
10a60 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74  s.Private.Format
10a70 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65  Ops DatabaseObje
10a80 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69  ctName $connecti 10a90 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 10aa0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 10ab0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 10ac0 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 10ad0 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a ctive NextId]].. 10ae0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 10af0 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 # NOTE: Add the 10b00 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec 10b10 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 tion provided by 10b20 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 our caller to t 10b30 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 he list.. # 10b40 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 of those 10b50 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 known to the Eag 10b60 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d le interpreter.. 10b70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 10b80 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 10b90 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 10ba0 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 10bb0 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e ctive.connection 10bc0 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 s Add \.. 10bd0 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69$db $connecti 10be0 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 on.. }..... 10bf0 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 proc cleanupDb 10c00 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 { fileName {var 10c10 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 Name db} {collec 10c20 74 20 74 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 t true} {qualify 10c30 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 true}.. 10c40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 64 65 {de 10c50 6c 65 74 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a lete true} } {.. 10c60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 10c70 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 10c80 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 o force all pend 10c90 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 ing "garbage" ob 10ca0 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c jects to be coll 10cb0 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 ected,.. # 10cc0 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 including 10cd0 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 SQLite statement 10ce0 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a s and backup obj 10cf0 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c ects; this shoul 10d00 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 d allow.. # 10d10 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 the under 10d20 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 lying database f 10d30 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 ile to be delete 10d40 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 10d50 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d if {$collect}
10d60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10d70 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20   collectGarbage
10d80 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 10d90 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 10da0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10db0 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the 10dc0 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab 10dd0 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i 10de0 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of 10df0 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # 10e00 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 caller. The 10e10 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 handle to the d 10e20 61 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 atabase previous 10e30 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 ly opened via th 10e40 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 10e50 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 [setupDb] proce 10e60 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 dure should be s 10e70 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 tored there... 10e80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv 10e90 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
10ea0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
10eb0 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65     # NOTE: Close
10ec0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
10ed0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
10ee0 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 6f 75 6c  now.  This shoul
10ef0 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20  d allow us..
10f00 20 20 23 20 20 20 20 20 20 20 74 6f 20 64 65 6c    #       to del
10f10 65 74 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69  ete the underlyi
10f20 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
10f30 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
10f40 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
10f50 74 73 20 64 62 5d 20 26 26 20 5b 63 61 74 63 68  ts db] && [catch
10f60 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d   {sql close $db} 10f70 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 10f80 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 10f90 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s 10fa0 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to 10fb0 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 close the datab 10fc0 61 73 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ase, report why. 10fd0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10fe0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
10ff0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
11000 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
11010 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
11020 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63  ING: failed to c
11030 6c 6f 73 65 20 64 61 74 61 62 61 73 65 20 5c 22  lose database \"
11040 22 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72  " $db "\", error 11050 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 11060 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c \n\t$error \
11070 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  n]..      }....
11080 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11090 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65  NOTE: First, see
110a0 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68   if our caller h
110b0 61 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20  as requested an
110c0 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
110d0 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
110e0 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79      set isMemory
110f0 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69   [isMemoryDb $fi 11100 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 11110 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11120 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 11130 20 70 61 74 68 20 74 6f 20 74 68 65 20 64 61 74 path to the dat 11140 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e abase file name. 11150 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 For now, all t 11160 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 est.. # 11170 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 database file 11180 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 s are stored in 11190 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 the temporary di 111a0 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 rectory... 111b0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 #.. if {!$i
111c0 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c  sMemory && $qual 111d0 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ify} then {.. 111e0 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 111f0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 11200 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f tDatabaseDirecto 11210 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 ry] [file tail$
11220 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20  fileName]]..
11230 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
11240 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
11250 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20  eck if the file
11260 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20  still exists...
11270 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
11280 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20   {!$isMemory && 11290 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65$delete && [file
112a0 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam 112b0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 112c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 112d0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 NOTE: Skip dele 112e0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 ting database fi 112f0 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 les if somebody 11300 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d sets the global. 11310 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 11320 20 76 61 72 69 61 62 6c 65 20 74 6f 20 70 72 65 variable to pre 11330 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 vent it... 11340 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 11350 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 11360 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46 69 6c :no(cleanupDbFil 11370 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 11380 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11390 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 113a0 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 mpt to delete th 113b0 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20 e test database 113c0 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 file now... 113d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 113e0 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 if {[set code 113f0 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c [catch {file del 11400 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 ete$fileName} e
11410 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  rror]]} then {..
11420 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
11430 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
11440 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61  E: We somehow fa
11450 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74  iled to delete t
11460 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20  he file, report
11470 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  why...
11480 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
11490 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 114a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 114b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 114c0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 114d0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 ING: failed to d 114e0 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66 elete database f 114f0 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
11500 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
11510 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20       "\" during
11520 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20  cleanup, error:
11530 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e  " \n\t $error \n 11540 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 11550 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 11560 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 11570 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 11580 20 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b Show that we sk 11590 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 ipped deleting t 115a0 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 he file... 115b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 115c0 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 set code 0.... 115d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
115e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
115f0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
11600 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
11610 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70  = WARNING: skipp
11620 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61  ed deleting data
11630 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66  base file \"" $f 11640 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. 11650 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 "\" dur 11660 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d ing cleanup\n"]. 11670 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 11680 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 11690 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 116a0 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 NOTE: The file 116b0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 does not exist, 116c0 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 success!.. 116d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 116e0 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d code 0.. } 116f0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 11700 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c$code..    }...
11710 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70  ..    proc setup
11720 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62  DbInterruptCallb
11730 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f  ack { channel lo
11740 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  g } {..      tpu
11750 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 11760 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 62 - setting up deb 11770 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 20 ugger interrupt 11780 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d callback... "... 11790 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 117a0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a h {.. #.. 117b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 117c0 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 Make sure the sc 117d0 72 69 70 74 20 64 65 62 75 67 67 65 72 20 61 6e ript debugger an 117e0 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 d the isolated i 117f0 6e 74 65 72 70 72 65 74 65 72 20 61 72 65 0d 0a nterpreter are.. 11800 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 11810 73 65 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 setup and ready 11820 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 for use... 11830 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 #.. deb 11840 75 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72 ug setup true tr 11850 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ue.... #. 11860 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 11870 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 73 73 Load the necess 11880 61 72 79 20 70 61 63 6b 61 67 65 73 20 69 6e 74 ary packages int 11890 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 o the isolated i 118a0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 118b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 118c0 64 65 62 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 debug eval {.. 118d0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 package 118e0 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 require Eagle.. 118f0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 package 11900 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c require Eagle.L 11910 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 ibrary.. 11920 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 package requir 11930 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 e Eagle.Test.. 11940 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 11950 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 11960 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 6e NOTE: Copy the n 11970 65 63 65 73 73 61 72 79 20 76 61 72 69 61 62 6c ecessary variabl 11980 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c es into the isol 11990 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 ated interpreter 119a0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 119b0 20 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f debug invo 119c0 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f ke 0 set ::test_ 119d0 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c channel$channel
119e0 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74  ; # NOTE: For [t
119f0 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20  puts]...
11a00 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73  debug invoke 0 s
11a10 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c  et ::test_log $l 11a20 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 og; # NOTE: For 11a30 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 [tlog]..... 11a40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 11a50 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 NOTE: Install th 11a60 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 e callback scrip 11a70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65 t to be evaluate 11a80 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 d in the isolate 11a90 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 11aa0 20 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 interpreter w 11ab0 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 hen this interpr 11ac0 65 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 eter is interrup 11ad0 74 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 ted by script.. 11ae0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 11af0 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 ancellation, etc 11b00 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11b10 20 20 20 20 20 20 64 65 62 75 67 20 63 61 6c 6c debug call 11b20 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73 65 6e back apply {{sen 11b30 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20 20 20 der e} {.. 11b40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 11b50 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 11b60 66 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 f this callback 11b70 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 is one that we c 11b80 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 are about... 11b90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11ba0 20 20 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 if {"Canceled 11bb0 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b 24 65 20 " in [split [$e
11bc0 49 6e 74 65 72 72 75 70 74 54 79 70 65 5d 20 22  InterruptType] "
11bd0 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  , "]} then {..
11be0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
11bf0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
11c00 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   Iterate through
11c10 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f   all database co
11c20 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20  nnections known
11c30 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
11c40 20 20 20 20 23 20 20 20 20 20 20 20 70 61 72 65      #       pare
11c50 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  nt interpreter..
11c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
11c70 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
11c80 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
11c90 73 20 70 61 69 72 20 5c 0d 0a 20 20 20 20 20 20  s pair \..
11ca0 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63            [objec
11cb0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
11cc0 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 65 20 49 6e  +NonPublic $e In 11cd0 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 terpreter.connec 11ce0 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 tions] {.. 11cf0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 11d00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 11d10 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e 63 Attempt to canc 11d20 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72 69 el any SQL queri 11d30 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 6f es in progress o 11d40 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 n this.. 11d50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 # da 11d60 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio 11d70 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n... 11d80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 11d90 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 if {[catch {$
11da0 70 61 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65  pair Value.Cance
11db0 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  l} error]} then
11dc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
11dd0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 11de0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 11df0 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 Args \n \.. 11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 11e10 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 11e20 69 6c 65 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 iled to cancel q 11e30 75 65 72 79 20 66 6f 72 20 63 6f 6e 6e 65 63 74 uery for connect 11e40 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ion \"" \.. 11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 11e60 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20$pair Key] "\",
11e70 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 11e80 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 11e90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 11ea0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 11eb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 11ec0 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 6f 72 }.. } error 11ed0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 11ee0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 11ef0 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70 74 43 raint interruptC 11f00 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65 33 0d allback.sqlite3. 11f10 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 11f20 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d$channel yes\n.
11f30 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
11f40 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $11f50 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 11f60 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 rgs "no, error: 11f70 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
11f80 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
11f90 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
11fa0 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 69 6c  leanupFile { fil
11fb0 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 20 74  eName {collect t
11fc0 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 6c 73  rue} {force fals
11fd0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
11fe0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
11ff0 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20  ttempt to force
12000 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72  all pending "gar
12010 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f  bage" objects to
12020 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a   be collected,..
12030 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
12040 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73  cluding SQLite s
12050 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61  tatements and ba
12060 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68  ckup objects; th
12070 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d  is should allow.
12080 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
12090 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
120a0 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
120b0 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20  e deleted...
120c0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$120d0 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d collect} then {. 120e0 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 . collect 120f0 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f Garbage$::test_
12100 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d  channel..      }
12110 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12120 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
12130 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69   if the file sti
12140 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20  ll exists...
12150 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
12160 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 12170 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 12180 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12190 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 121a0 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 deleting test fi 121b0 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 les if somebody 121c0 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 20 sets the global 121d0 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 variable.. 121e0 20 20 23 20 20 20 20 20 20 20 74 6f 20 70 72 65 # to pre 121f0 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 vent it... 12200 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 12210 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 {$force || ![inf
12220 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c  o exists ::no(cl
12230 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68 65  eanupFile)]} the
12240 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
12250 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
12260 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64  TE: Attempt to d
12270 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 66  elete the test f
12280 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ile now...
12290 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
122a0 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b   if {[set code [
122b0 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
122c0 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72  te $fileName} er 122d0 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ror]]} then {.. 122e0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 122f0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 12300 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai 12310 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 led to delete th 12320 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 e file, report w 12330 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 hy... 12340 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 12350 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
12360 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
12370 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
12380 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
12390 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65  NG: failed to de
123a0 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 20 5c  lete test file \
123b0 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. 123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 123d0 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e "\" during clean 123e0 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c up, error: " \n\ 123f0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
12400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12410 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
12420 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12430 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
12440 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64   that we skipped
12450 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69   deleting the fi
12460 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le...          #
12470 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
12480 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20  code 0....
12490 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 124a0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 124b0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 124c0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 124d0 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 NING: skipped de 124e0 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 leting test file 124f0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
12500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12510 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e  "\" during clean
12520 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  up\n"]..
12530 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
12540 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
12550 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
12560 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20  e file does not
12570 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d  exist, success!.
12580 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
12590 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a      set code 0..
125a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
125b0 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20   return $code.. 125c0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 125d0 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 c collectGarbage 125e0 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c { channel {mill 125f0 69 73 65 63 6f 6e 64 73 20 31 30 30 30 7d 20 7b iseconds 1000} { 12600 71 75 69 65 74 20 74 72 75 65 7d 20 7d 20 7b 0d quiet true} } {. 12610 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 12620 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke 12630 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 12640 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75 6c 74 ry false} result 12650 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 12660 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
12670 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
12680 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 12690 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 126a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 126b0 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 "---- memory 126c0 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c in use by the CL 126d0 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 R before collect 126e0 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 ion... " \.. 126f0 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c$resul
12700 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  t " bytes\n"]..
12710 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
12720 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
12730 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12740 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 12750 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 12760 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 12770 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d d to get CLR mem 12780 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 ory usage, error 12790 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 127a0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
127b0 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  \n]..      }....
127c0 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
127d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
127e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
127f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
12810 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
12820 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 61 74    # NOTE: Repeat
12830 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74 6f 20  edly attempt to
12840 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 20  collect garbage
12850 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74  until the allott
12860 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20  ed number..
12870 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c   #       of mill
12880 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65 6c 61  iseconds has ela
12890 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20 61 74  psed.  Always at
128a0 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74  tempt to collect
128b0 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20 20 20   garbage..
128c0 23 20 20 20 20 20 20 20 61 74 20 6c 65 61 73 74  #       at least
128d0 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d   once...      #.
128e0 0a 20 20 20 20 20 20 73 65 74 20 73 74 61 72 74  .      set start
128f0 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
12900 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74 6f 70  ..      set stop
12910 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74 20 2b   [expr {$start + 12920 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 ($milliseconds
12930 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20  / 1000)}]....
12940 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20     do {..
12950 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
12960 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66  TE: Attempt to f
12970 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62  orce a full garb
12980 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e  age collection n
12990 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d  ow.  Report any.
129a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
129b0 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65   error that is e
129c0 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65  ncountered if we
129d0 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20   fail...
129e0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
129f0 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e  catch {object in
12a00 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c  voke GC GetTotal
12a10 4d 65 6d 6f 72 79 20 74 72 75 65 7d 20 65 72 72  Memory true} err
12a20 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
12a30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 12a40 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 12a50 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 12a60 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 12a70 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 : failed full ga 12a80 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e rbage collection 12a90 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 12aa0 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 12ab0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
12ac0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
12ad0 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b    set now [clock
12ae0 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20   seconds]..
12af0 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74   } while {$start 12b00 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 <=$now && $now 12b10 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d 0a 20 20 20 <$stop}....
12b20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
12b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12b60 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
12b70 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
12b80 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
12b90 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
12ba0 79 20 66 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d  y false} result]
12bb0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
12bc0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 12bd0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 12be0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
12bf0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
12c00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12c10 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69    "---- memory i
12c20 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52  n use by the CLR
12c30 20 61 66 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f   after collectio
12c40 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20  n... " \..
12c50 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20          $result 12c60 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 12c70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 12c80 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 12c90 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
12ca0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
12cb0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
12cc0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
12cd0 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72  to get CLR memor
12ce0 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20  y usage, error:
12cf0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
12d00 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 12d10 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 12d20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 12d30 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f etSQLiteHandleCo 12d40 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b unts { channel { 12d50 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 12d60 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu 12d70 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 lt [list].... 12d80 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 if {[haveCons 12d90 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 traint \.. 12da0 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f defineCo 12db0 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 nstant.System.Da 12dc0 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e 54 5f ta.SQLite.COUNT_ 12dd0 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d HANDLE]} then {. 12de0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 12df0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add 12e00 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 each critical ha 12e10 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 ndle count to th 12e20 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 e resulting list 12e30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 12e40 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na 12e50 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 63 74 me [list connect 12e60 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 ionCount stateme 12e70 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f ntCount backupCo 12e80 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 unt] {.. 12e90 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f 62 6a set value [obj 12ea0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 12eb0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 12ed0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 12ee0 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 12ef0 68 6f 64 73 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 hods$name]....
12f00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 12f10 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 12f20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 12f30 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
12f40 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
12f50 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72          "---- cr
12f60 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f  itical handle co
12f70 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c  unt \"" $name "\ 12f80 22 20 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e " is "$value \n
12f90 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
12fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  ..          lapp
12fb0 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c 75  end result $valu 12fc0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 e.. }.. 12fd0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 } elseif {!$
12fe0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
12ff0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13000 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63    # NOTE: The ac
13010 74 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e  tual handle coun
13020 74 73 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c  ts are not avail
13030 61 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c  able; therefore,
13040 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23   just..        #
13050 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e         return an
13060 20 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20   empty list...
13070 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13080 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 13090 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 "---- critical h 130a0 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 andle counts una 130b0 76 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 vailable\n".. 130c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 130d0 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
130e0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
130f0 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20   shutdownSQLite
13100 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65  { channel {force
13110 20 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66   false} {quiet f
13120 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
13130 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
13140 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
13150 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
13160 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65  rary is complete
13170 6c 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68  ly shutdown.  Th
13180 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  is..      #
13190 20 20 69 73 20 75 73 65 64 20 62 79 20 74 65 73    is used by tes
131a0 74 73 20 74 68 61 74 20 63 68 61 6e 67 65 20 63  ts that change c
131b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
131c0 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73  ions and/or thos
131d0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
131e0 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61   that need to ma
131f0 6b 65 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20  ke sure logging
13200 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28  is initialized (
13210 69 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73  i.e. just in cas
13220 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
13230 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
13240 20 6c 69 62 72 61 72 79 20 77 61 73 20 69 6e 69   library was ini
13250 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20  tialized in the
13260 70 72 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f  process prior to
13270 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
13280 74 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c  the SQLiteLog cl
13290 61 73 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74  ass being able t
132a0 6f 20 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67  o setup its logg
132b0 69 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a  ing callback)...
132c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f        #       No
132d0 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f  rmally, this sho
132e0 75 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66  uld only be perf
132f0 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20  ormed if SQLite
13300 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20  is loaded and..
13310 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61       #       rea
13320 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
13330 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
13340 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
13350 20 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53   {$force || [isS 13360 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 QLiteReady]} the 13370 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 13380 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 # BUGFIX 13390 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 : Before calling 133a0 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 the native shut 133b0 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d down function, m 133c0 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 ake sure both.. 133d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 133e0 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 of the PRAGMA r 133f0 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 elated directory 13400 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 names are freed 13410 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 13420 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 13430 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 LiteDirectories 13440 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d$channel true...
13450 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
13460 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
13470 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
13480 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
13490 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
134a0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
134b0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
134c0 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33  eMethods sqlite3
134d0 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20  _shutdown..
134e0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20     } result] ==
134f0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
13500 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 13510 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13520 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
13530 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
13540 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13550 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
13560 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
13570 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75  )... ok: " $resu 13580 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 13590 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 135a0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 135b0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
135c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
135d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 135e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13600 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 "---- call sqlit 13610 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e e3_shutdown()... 13620 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
13630 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
13640 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
13650 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
13660 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13670 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
13680 75 72 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  urces {..
13690 20 20 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75       channel {qu
136a0 69 65 74 20 66 61 6c 73 65 7d 20 7b 72 65 73 65  iet false} {rese
136b0 74 20 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74  t true} {collect
136c0 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
136d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
136e0 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c  E: If available,
136f0 20 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20   report on (and
13700 70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29 20  possibly reset)
13710 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20  the runtime..
13720 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69     #       confi
13730 67 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74  guration statist
13740 69 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ics...      #..
13750 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f       if {[haveCo
13760 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f  nstraint buildCo
13770 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75  nfiguration.Debu
13780 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a  g] && [catch {..
13790 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
137a0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
137b0 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c  nPublic -alias \
137c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
137d0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
137e0 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
137f0 68 6f 64 73 20 73 65 74 74 69 6e 67 52 65 61 64  hods settingRead
13800 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20  Counts..      }
13810 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74  settingReadCount
13820 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
13830 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d  .        set nam
13840 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67  eCount [$setting 13850 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 ReadCounts Count 13860 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 ].. set v 13870 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 alueCount 0.... 13880 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f object fo 13890 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 reach -alias pai 138a0 72 20 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f r$settingReadCo
138b0 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  unts {..
138c0 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e    incr valueCoun
138d0 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d  t [$pair Value]. 138e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 138f0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
13900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
13910 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 13920 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 13930 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 13940 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 - setting \"" [$
13950 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61  pair Key] "\" wa
13960 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 20  s read " \..
13970 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61              [$pa 13980 69 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 ir Value] " time 13990 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 s\n"].. 139a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 139b0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 . if {$re
139c0 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  set} then {..
139d0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
139e0 68 20 7b 24 73 65 74 74 69 6e 67 52 65 61 64 43  h {$settingReadC 139f0 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 72 ounts Clear} err 13a00 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b or] == 0} then { 13a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 13a20 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
13a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
13a40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 13a50 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13a70 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 "---- reset set 13a80 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 ting statistics 13a90 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 for the previous 13aa0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 13ab0 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75$nameCou
13ac0 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22  nt " names and "
13ad0 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76   $valueCount " v 13ae0 61 6c 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a alues read\n"].. 13af0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 13b00 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 13b10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 13b20 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
13b30 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
13b50 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
13b60 65 64 20 74 6f 20 72 65 73 65 74 20 73 65 74 74  ed to reset sett
13b70 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66  ing statistics f
13b80 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  or " \..
13b90 20 20 20 20 20 20 20 20 22 74 68 65 20 70 72 65          "the pre
13ba0 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75  vious " $nameCou 13bb0 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 nt " names and " 13bc0 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a$valueCount \..
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13be0 22 20 76 61 6c 75 65 73 20 72 65 61 64 2c 20 65  " values read, e
13bf0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 13c00 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 13c10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 13c20 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 13c30 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 if {[haveConst 13c40 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 raint \.. 13c50 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e defineCon 13c60 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 stant.System.Dat 13c70 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 a.SQLite.INTEROP 13c80 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 _VIRTUAL_TABLE] 13c90 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 13ca0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 13cb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13cc0 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e defineConstant. 13cd0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 13ce0 74 65 2e 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f te.TRACK_MEMORY_ 13cf0 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a BYTES]} then {.. 13d00 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
13d10 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
13d20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 13d30 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 annel "---- curr 13d40 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 ent memory in us 13d50 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 e by SQLiteMemor 13d60 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 y... ".. 13d70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 13d80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 13d90 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 13da0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 13db0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 13dc0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 13dd0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d a.SQLite.SQLiteM 13de0 65 6d 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 emory bytesAlloc 13df0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ated.. } 13e00 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 13e10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13e20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
13e30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
13e40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 13e50 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
13e60 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
13e70 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
13e80 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
13e90 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65            set me
13ea0 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a  mory unknown....
13eb0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$13ec0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 13ed0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 13ee0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
13ef0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 13f00 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 13f10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 13f20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
13f30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13f40 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 13f50 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d el "---- maximum 13f60 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 13f70 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e y SQLiteMemory.. 13f80 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a . ".. }.. 13f90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 13fa0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 13fb0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 13fc0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 13fd0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 13fe0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 13ff0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f QLite.SQLiteMemo 14000 72 79 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 ry maximumBytesA 14010 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 llocated.. 14020 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 } memory] == 0 14030 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14040 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
14050 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14060 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 14070 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 14080 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
14090 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
140a0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
140b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
140c0 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
140d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
140e0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 140f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 14100 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
14110 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 14120 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 14130 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 14140 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14150 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
14160 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
14170 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 14180 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 - current memory 14190 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 141a0 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d e... ".. }. 141b0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 141c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f tch {.. o 141d0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 141e0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 141f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 .. Sy 14200 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 14210 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 14220 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d hods sqlite3_mem 14230 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 20 ory_used.. 14240 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 14250 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14260 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
14270 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
14280 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 14290 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
142a0 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
142b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
142c0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
142d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
142e0 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53  OTE: Maybe the S
142f0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
14300 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ry is unavailabl
14310 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e?..        #..
14320 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72         set memor
14330 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20  y unknown....
14340 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 14350 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14360 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
14370 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $14380 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 14390 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 143a0 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu 143b0 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f lt$memory; # NO
143c0 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72  TE: Return memor
143d0 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20  y in-use to our
143e0 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20  caller.....
143f0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 14400 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 14410 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
14420 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72  -- maximum memor
14430 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69  y in use by SQLi
14440 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d  te... "..      }
14450 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
14460 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
14470 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
14480 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
14490 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
144a0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
144b0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
144c0 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65  thods sqlite3_me
144d0 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30  mory_highwater 0
144e0 0d 0a 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79  ..      } memory
144f0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
14500 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 14510 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 14520 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
14530 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
14540 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65  s $memory " byte 14550 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d s\n"].. } 14560 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 14570 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14580 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 # NOTE: May 14590 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f be the SQLite co 145a0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e re library is un 145b0 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 available?.. 145c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 145d0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow 145e0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n.... if 145f0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
14600 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
14610 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 14620 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
14630 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
14640 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
14650 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68  if {$collect} th 14660 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f en {.. co 14670 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 63 68 llectGarbage$ch
14680 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a  annel..      }..
14690 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 146a0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 146b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
146c0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e  nel "---- curren
146d0 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  t memory in use
146e0 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d  by the CLR... ".
146f0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
14700 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62    if {[catch {ob
14710 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47  ject invoke GC G
14720 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61  etTotalMemory fa
14730 6c 73 65 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20  lse} memory] ==
14740 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
14750 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69     if {[string i
14760 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63  s integer -stric
14770 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e  t $memory]} then 14780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 14790 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
147a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
147b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 147c0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
147d0 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
147e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
147f0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
14800 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
14810 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20  ry invalid....
14820 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 14830 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 14840 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
14850 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
14860 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 14870 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 14880 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 14890 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 148a0 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e set memory unkn 148b0 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 own.... i 148c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
148d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
148e0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 148f0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
14900 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
14910 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
14920 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 14930 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 14940 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL 14950 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b iteDirectories { 14960 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 channel {reset 14970 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 14980 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 14990 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 149a0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 149b0 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 149c0 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c tion is availabl 149d0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 149e0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
149f0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  l \..          "
14a00 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
14a10 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  r function sqlit
14a20 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
14a30 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  ectory... "....
14a40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
14a50 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c 20  NOTE: This call
14a60 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77  to the sqlite3_w
14a70 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
14a80 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73  ry function uses
14a90 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
14aa0 20 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c 75      invalid valu
14ab0 65 20 30 20 66 6f 72 20 74 68 65 20 66 69 72 73  e 0 for the firs
14ac0 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 69  t argument.  Thi
14ad0 73 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e  s code is design
14ae0 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
14af0 20 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63 61    to check if ca
14b00 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  lling the functi
14b10 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61 6e  on will raise an
14b20 20 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e   exception (i.e.
14b30 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
14b40 74 68 65 20 61 63 74 75 61 6c 20 72 65 73 75 6c  the actual resul
14b50 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
14b60 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  n does not matte
14b70 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d  r as long as no.
14b80 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
14b90 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
14ba0 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ged)...      #..
14bb0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
14bc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
14bd0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
14be0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
14bf0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
14c00 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
14c10 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14c20 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
14c30 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
14c40 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e  et_directory 0 n
14c50 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d  ull..      }] ==
14c60 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
14c70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
14c80 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74   NOTE: Calling t
14c90 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
14ca0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
14cb0 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  unction does not
14cc0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
14cd0 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 65 70    cause an excep
14ce0 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c  tion; therefore,
14cf0 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 61 69   it must be avai
14d00 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20  lable (i.e...
14d10 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 65       #       eve
14d20 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75  n though it shou
14d30 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c  ld return a fail
14d40 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ure return code
14d50 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  in this..
14d60 20 23 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d   #       case)..
14d70 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
14d80 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
14d90 74 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  t sqlite3_win32_
14da0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d  set_directory...
14db0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $14dc0 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d channel yes\n... 14dd0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14de0 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does 14df0 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 our caller want 14e00 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 to reset the di 14e10 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 rectories?.. 14e20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 14e30 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 f {$reset} then
14e40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
14e50 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
14e60 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20  : Now make sure
14e70 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
14e80 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
14e90 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20  tories are..
14ea0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
14eb0 73 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c  set their defaul
14ec0 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20  t values, which
14ed0 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66  should be null f
14ee0 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20  or both...
14ef0 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63      #       Sinc
14f00 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  e the sqlite3_wi
14f10 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
14f20 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76  y function is av
14f30 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  ailable,..
14f40 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20      #       use
14f50 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  it...          #
14f60 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 20  ..          for
14f70 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24  {set index 1} {$14f80 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 index < 3} {incr 14f90 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 index} {.. 14fa0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 14fb0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 14fc0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 14fd0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 14fe0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 14ff0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 15000 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 15010 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 15020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15030 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 sqlite3_win3 15040 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 15050 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20$index null..
15060 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c           } resul
15070 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
15080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
15090 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 150a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 150c0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite 150d0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 150e0 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c ctory("$index \
150f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15100 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20      ", null)...
15110 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e  ok: " $result \n 15120 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 15130 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 15140 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
15150 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
15160 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
15170 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
15180 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  l sqlite3_win32_
15190 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20  set_directory("
151a0 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20  $index \.. 151b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e ", n 151c0 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 ull)... error: " 151d0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
151e0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
151f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
15200 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15210 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
15220 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 15230 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 no\n.... 15240 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15250 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c TE: Does our cal 15260 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 ler want to rese 15270 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 t the directorie 15280 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c s? This can onl 15290 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 152a0 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 be performed 152b0 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 if SQLite is loa 152c0 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f ded and ready fo 152d0 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 152e0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 152f0 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 suite... 15300 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 15310 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73 53 {$reset && [isS
15320 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65  QLiteReady]} the
15330 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
15340 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
15350 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72  TE: Now make sur
15360 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
15370 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
15380 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20  ectories are..
15390 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
153a0 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61  reset their defa
153b0 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63  ult values, whic
153c0 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c  h should be null
153d0 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20   for both...
153e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69        #       Si
153f0 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f  nce the sqlite3_
15400 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
15410 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  ory function doe
15420 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20  s not..
15430 20 23 20 20 20 20 20 20 20 61 70 70 65 61 72 20   #       appear
15440 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c  to be available,
15450 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 69 61   use the associa
15460 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  ted PRAGMA comma
15470 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23  nds..          #
15480 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 2e 0d         instead..
15490 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
154a0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
154b0 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20  directory [list
154c0 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
154d0 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f  tory temp_store_
154e0 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20  directory] {..
154f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71            set sq
15500 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50  l [appendArgs "P
15510 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f  RAGMA " $directo 15520 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a ry " = \"\";"].. 15530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 15540 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 {[catch {execut 15550 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c eSql$sql} resul
15560 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
15570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
15580 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 15590 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 155b0 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 ---- execute PRA 155c0 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 GMA "$directory
155d0 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d   "... ok: \"" \.
155e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
155f0 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d     $result \"\n] 15600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 15610 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 15620 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
15630 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
15640 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15650 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63        "---- exec
15660 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69  ute PRAGMA " $di 15670 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 rectory "... err 15680 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 15690 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 156a0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
156b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
156c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
156d0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
156e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
156f0 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73  NOTE: Finally, s
15700 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20  how the current
15710 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
15720 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
15730 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
15740 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20     directories.
15750 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62   This can only b
15760 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53  e performed if S
15770 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d  QLite is loaded.
15780 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
15790 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65  nd ready for use
157a0 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
157b0 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
157c0 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74      if {[isSQLit
157d0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
157e0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
157f0 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74   directory [list
15800 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
15810 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65  ctory temp_store
15820 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20  _directory] {..
15830 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $15840 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 15850 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 rgs "---- checki 15860 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 ng "$directory
15870 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20  "... "]....
15880 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70       set sql [ap
15890 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41  pendArgs "PRAGMA
158a0 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b   " $directory \; 158b0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 158c0 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 f {[catch {execu 158d0 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 teSql$sql scala
158e0 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d  r} result] == 0}
158f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15900 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 15910 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 15920 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 "ok: \""$result
15930 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20   \"\n]..
15940 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
15950 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 15960 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 15970 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c gs "error: " \n\ 15980 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
15990 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
159a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
159b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
159c0 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73  oc loadSQLiteTes
159d0 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e  tSettings { chan
159e0 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20  nel {suffix ""}
159f0 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
15a00 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
15a10 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c    # NOTE: Skip l
15a20 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 74 69  oading the setti
15a30 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 73 61  ngs if their usa
15a40 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  ge has been disa
15a50 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  bled...      #..
15a60 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
15a70 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
15a80 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 29  iteTestSettings)
15a90 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
15aa0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
15ab0 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f  NOTE: Load custo
15ac0 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f  m per-user and/o
15ad0 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20  r per-host test
15ae0 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
15af0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15b00 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
15b10 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  ts ::tcl_platfor
15b20 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b  m(user)]} then {
15b30 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
15b40 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
15b50 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
15b60 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74  [getCommonDirect
15b70 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ory] \..
15b80 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
15b90 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66  s settings $suff 15ba0 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 ix .$::tcl_plat
15bb0 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c  form(user) .eagl
15bc0 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e]]....
15bd0 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
15be0 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46  s $userSettingsF 15bf0 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 15c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 15c10 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
15c20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
15c30 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 15c40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15c60 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 "---- loading p 15c70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 er-user test set 15c80 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 15c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15ca0 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67$userSetting
15cb0 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c  sFileName \"...\
15cc0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
15cd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
15ce0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70 6c               upl
15d00 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75  evel 1 [list sou
15d10 72 63 65 20 24 75 73 65 72 53 65 74 74 69 6e 67  rce $userSetting 15d20 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 sFileName].. 15d30 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d } error] 15d40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15d50 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
15d60 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
15d80 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 15d90 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 15db0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 15dc0 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 iled to load per 15dd0 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73 20 66 -user settings f 15de0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
15e00 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
15e10 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a  Name "\", error:
15e20 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 15e30 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 15e40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 15e50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 }.. } 15e60 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 15e70 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
15e80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15e90 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 15ea0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15eb0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 15ec0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 15ed0 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 pped loading per 15ee0 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 -user test setti 15ef0 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15f10 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46$userSettingsF
15f20 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20  ileName "\", it
15f30 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e  does not exist\n
15f40 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
15f50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
15f60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
15f70 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23       ###########
15f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15fb0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
15fc0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
15fd0 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70  o exists ::tcl_p
15fe0 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20  latform(host)]}
15ff0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16000 20 20 73 65 74 20 68 6f 73 74 53 65 74 74 69 6e    set hostSettin
16010 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  gsFileName [file
16020 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e   join [getCommon
16030 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20  Directory] \..
16040 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70              [app
16050 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73  endArgs settings
16060 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63   $suffix .$::tc
16070 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29  l_platform(host)
16080 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20   .eagle]]....
16090 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
160a0 20 65 78 69 73 74 73 20 24 68 6f 73 74 53 65 74   exists $hostSet 160b0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 tingsFileName]} 160c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 160d0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
160e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
160f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 16100 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 16110 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 16120 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 "---- loa 16130 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 ding per-host te 16140 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 st settings file 16150 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 16160 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53$hostS
16170 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
16180 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20  \"...\n]..
16190 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
161a0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
161b0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
161c0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
161d0 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73 74 53  st source $hostS 161e0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 161f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 16200 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 16220 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
16230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
16240 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 16250 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16270 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 16280 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f NG: failed to lo 16290 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 ad per-host sett 162a0 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 162b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 162c0 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e$hostSettin
162d0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20  gsFileName "\",
162e0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 162f0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 16300 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 16310 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 16320 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 16330 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
16340 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
16360 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 16370 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 16380 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 16390 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 -- skipped loadi 163a0 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 ng per-host test 163b0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 163c0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 163d0 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74$hostSet
163e0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c  tingsFileName "\
163f0 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
16400 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  xist\n"]..
16410 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
16420 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
16430 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
16440 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e  ....    proc run
16450 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67  SQLiteTestProlog
16460 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue {} {..      #
16470 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16480 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72  Skip running our
16490 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65   custom prologue
164a0 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65   if the main one
164b0 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20   has been..
164c0 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64   #       skipped
164d0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
164e0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
164f0 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75  sts ::no(prologu
16500 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20  e.eagle)]} then
16510 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
16520 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f        # NOTE: Lo
16530 61 64 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63  ad the "before-c
16540 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74  onstraints" cust
16550 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f  om per-user and/
16560 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20  or per-host..
16570 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
16580 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d  t settings now..
16590 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
165a0 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c      uplevel 1 [l
165b0 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65  ist loadSQLiteTe
165c0 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65  stSettings $::te 165d0 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f st_channel .befo 165e0 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 re].... # 165f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 16600 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 : Determine the 16610 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e 61 74 names of the nat 16620 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 ive platform and 16630 20 61 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a architecture... 16640 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16650 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 16660 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 [getBuildPlatfor 16670 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 m true].. 16680 20 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 set architectur 16690 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 65 46 e [architectureF 166a0 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 orPlatform$plat
166b0 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  form]....
166c0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
166d0 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 6c 61  TE: Show the pla
166e0 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74  tform and archit
166f0 65 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 68  ecture used to h
16700 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 0d 0a  elp locate the..
16710 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16720 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c  native build fil
16730 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es...        #..
16740 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 16750 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 16760 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 16770 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 70 "---- p 16780 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 latform for loca 16790 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c ting native buil 167a0 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c d files is \"" \ 167b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 ..$p
167c0 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d  latform \"\n]...
167d0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $167e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 167f0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 16800 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 16810 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f 72 architecture for 16820 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 locating native 16830 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 build files is 16840 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 16850 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65$architecture
16860 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20   \"\n]....
16870 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
16880 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73  OTE: Build a lis
16890 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69  t of configurati
168a0 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  on files that we
168b0 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
168c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
168d0 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73   configFileNames
168e0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
168f0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
16900 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e  a.SQLite.dll.con
16910 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fig]....
16920 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
16930 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20  E: Build a list
16940 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61 6e  of auxiliary Man
16950 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41  aged Debugging A
16960 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 0d  ssistants (MDA).
16970 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
16980 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
16990 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
169a0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
169b0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 64 61  .        set mda
169c0 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  ConfigFileNames
169d0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
169e0 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 33       EagleShell3
169f0 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  2.exe.mda.config
16a00 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d   Installer.exe.m
16a10 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20  da.config \..
16a20 20 20 20 20 20 20 20 20 20 74 65 73 74 2e 65 78           test.ex
16a30 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73  e.mda.config tes
16a40 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f  tlinq.exe.mda.co
16a50 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20  nfig \..
16a60 20 20 20 20 74 65 73 74 65 66 36 2e 65 78 65 2e      testef6.exe.
16a70 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20  mda.config]....
16a80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
16a90 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
16aa0 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74 65  the list of exte
16ab0 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 74 20  rnal files that
16ac0 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65  we handle.  Some
16ad0 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20   of..        #
16ae0 20 20 20 20 20 74 68 65 73 65 20 66 69 6c 65 73       these files
16af0 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65 20 61   may be native a
16b00 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 61 73  nd/or managed as
16b10 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20 61 72  semblies that ar
16b20 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
16b30 20 20 20 72 65 71 75 69 72 65 64 20 74 6f 20 70     required to p
16b40 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 20 74  erform various t
16b50 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ests...        #
16b60 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 78  ..        set ex
16b70 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
16b80 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
16b90 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
16ba0 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 20  EntityFramework
16bb0 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  lib [string map
16bc0 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5b 73 74  [list Fx ""] [st
16bd0 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20  ring \..
16be0 20 20 20 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65      map [list ne
16bf0 74 46 78 34 35 31 20 6e 65 74 46 78 34 35 5d 20  tFx451 netFx45]
16c00 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 5d  [getBuildNetFx]]
16c10 5d 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72  ] EntityFramewor
16c20 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20  k.dll]]....
16c30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
16c40 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
16c50 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 61  list of native a
16c60 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68  ssembly files th
16c70 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 54  at we handle.  T
16c80 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
16c90 20 20 20 20 72 65 61 73 6f 6e 20 74 68 65 20 22      reason the "
16ca0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16cb0 74 65 2e 64 6c 6c 22 20 66 69 6c 65 20 69 73 20  te.dll" file is
16cc0 69 6e 63 6c 75 64 65 64 20 68 65 72 65 20 69 73  included here is
16cd0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
16ce0 20 20 62 65 63 61 75 73 65 20 69 74 20 63 6f 75    because it cou
16cf0 6c 64 20 62 65 20 74 68 65 20 6d 69 78 65 64 2d  ld be the mixed-
16d00 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  mode assembly...
16d10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16d20 20 20 20 73 65 74 20 6e 61 74 69 76 65 46 69 6c     set nativeFil
16d30 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  eNames [list \..
16d40 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
16d50 74 65 33 2e 64 6c 6c 20 53 51 4c 69 74 65 2e 49  te3.dll SQLite.I
16d60 6e 74 65 72 6f 70 2e 64 6c 6c 20 53 79 73 74 65  nterop.dll Syste
16d70 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
16d80 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  l]....        #.
16d90 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
16da0 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20   Build the list
16db0 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  of managed assem
16dc0 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77  bly files that w
16dd0 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  e handle...
16de0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
16df0 74 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d  t managedFileNam
16e00 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
16e10 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
16e20 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 53  ata.SQLite.dll S
16e30 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
16e40 65 2e 4c 69 6e 71 2e 64 6c 6c 20 5c 0d 0a 20 20  e.Linq.dll \..
16e50 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
16e60 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
16e70 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .dll]....
16e80 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
16e90 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20 74  TE: Remove any t
16ea0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  est constraints
16eb0 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
16ec0 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d  e native and/or.
16ed0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
16ee0 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
16ef0 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  y files that we
16f00 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f  handle unless fo
16f10 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20  rbidden from..
16f20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f        #       do
16f30 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20  ing so...
16f40 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
16f50 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
16f60 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65 43  no(sqliteRemoveC
16f70 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68  onstraints)]} th
16f80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
16f90 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
16fa0 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65   $configFileName 16fb0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 16fc0 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 16fd0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 16fe0 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
16ff0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
17000 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
17010 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f   fileName $mdaCo 17020 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 17030 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 17040 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 17050 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 17060 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
17070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
17080 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
17090 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 170a0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 170b0 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f removeCo 170c0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 170d0 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 Args file_ [file 170e0 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
170f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
17100 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
17110 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 17120 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 17130 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 17140 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 17150 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 17160 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
17170 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
17180 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
17190 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69  eName $managedFi 171a0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 171b0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 171c0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 171d0 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e rgs file_$fileN
171e0 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
171f0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
17200 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17210 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
17220 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  all System.Data.
17230 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66  SQLite related f
17240 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65  ile handling (de
17250 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  leting,..
17260 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67   #       copying
17270 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69  , and loading) i
17280 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
17290 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
172a0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
172b0 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46  sts ::no(sqliteF
172c0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
172d0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
172e0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
172f0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65  kip trying to de
17300 6c 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69  lete any files i
17310 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
17320 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
17330 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
17340 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
17350 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d  eteSqliteFiles)]
17360 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
17370 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
17380 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
17390 65 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46  eteSqliteConfigF
173a0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
173c0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $173d0 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 configFileNames 173e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 173f0 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 tryDeleteBina 17400 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ryFile$fileName
17410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17420 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
17430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
17440 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
17450 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
17460 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73  iteExternalFiles
17470 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
17480 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
17490 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43  h fileName $mdaC 174a0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 174b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 174c0 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 tryDeleteBuild 174d0 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a File$fileName..
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
174f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
17500 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
17510 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e  e $externalFileN 17520 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 17530 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 17540 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c eBinaryFile$fil
17550 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
17560 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
17570 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
17580 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
17590 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
175a0 74 65 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69  teSqliteNativeFi
175b0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
175d0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
175e0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
175f0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
17600 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17610 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
17620 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 17630 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17650 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c tryDeleteAssembl 17660 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 y$fileName..
17670 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
176a0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
176b0 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
176c0 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46  liteNonImplicitF
176d0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
176f0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
17700 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
17710 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73  itePlatformFiles
17720 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
17740 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61  ring length $pla 17750 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e tform] > 0} then 17760 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17770 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 17780 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
17790 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
177b0 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
177c0 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
177d0 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..
177e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
177f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17810 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
17820 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
17830 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
17840 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17860 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
17870 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e  $architecture] > 17880 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 178a0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
178b0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
178c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
178d0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
178e0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 178f0 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 me$architecture
17900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17910 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
17920 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
17930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
17940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
17950 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
17960 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
17970 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e 61 67  eleteSqliteManag
17980 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  edFiles)]} then
17990 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
179a0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
179b0 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  e $managedFileNa 179c0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 179d0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 179e0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
179f0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..
17a00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
17a10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
17a20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
17a30 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
17a40 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20  : Check for the
17a50 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75 6e  "autoSelect" run
17a60 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66  time option.  If
17a70 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20   present,..
17a80 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74       #       att
17a90 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69  empt to automati
17aa0 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65  cally select the
17ab0 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65   first available
17ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
17ad0 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20 22 72      build (or "r
17ae0 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51 4c 69  elease") of SQLi
17af0 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61  te and System.Da
17b00 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  ta.SQLite..
17b10 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
17b20 20 75 73 65 20 77 69 74 68 20 74 68 65 20 74 65   use with the te
17b30 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
17b40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17b50 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d    if {[hasRuntim
17b60 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65  eOption autoSele
17b70 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ct]} then {..
17b80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63           if {![c
17b90 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69  heckForSQLiteBui
17ba0 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  lds $::test_chan 17bb0 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 nel true]} then 17bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17bd0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 checkForSQLiteR 17be0 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f eleases$::test_
17bf0 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20  channel true..
17c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
17c10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
17c20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17c30 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
17c40 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69 66 79  trying to verify
17c50 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
17c60 74 6f 72 79 20 69 66 20 69 6e 73 74 72 75 63 74  tory if instruct
17c70 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ed;..          #
17c80 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65         otherwise
17c90 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61  , make sure it a
17ca0 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20 6f  ctually exists o
17cb0 72 20 68 61 6c 74 20 74 68 65 20 65 6e 74 69 72  r halt the entir
17cc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
17cd0 20 20 20 20 20 74 65 73 74 69 6e 67 20 70 72 6f       testing pro
17ce0 63 65 73 73 20 69 66 20 69 74 20 64 6f 65 73 20  cess if it does
17cf0 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20 20  not exist...
17d00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17d10 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
17d20 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79  ists ::no(verify
17d30 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29 5d  BuildDirectory)]
17d40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
17d50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17d60 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 20       # NOTE: At
17d70 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 20  this point, the
17d80 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20  build directory
17d90 4d 55 53 54 20 65 78 69 73 74 20 61 73 20 61 0d  MUST exist as a.
17da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
17db0 20 20 20 20 20 76 61 6c 69 64 20 64 69 72 65 63       valid direc
17dc0 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65 73  tory for the tes
17dd0 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f 20  ting process to
17de0 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20  continue...
17df0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17e00 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74        set direct
17e10 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69 72  ory [getBuildDir
17e20 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20  ectory]....
17e30 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c         if {![fil
17e40 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74  e exists $direct 17e50 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ory] || \.. 17e60 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c ![fil 17e70 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 e isdirectory$d
17e80 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
17e90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
17ea0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
17eb0 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70    # NOTE: Just p
17ec0 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79  rior to actually
17ed0 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73   halting the tes
17ee0 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20  ting process,..
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
17f00 20 20 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f       add an erro
17f10 72 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f  r to the test lo
17f20 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  g file...
17f30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17f40 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 17f50 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 17f60 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 17f80 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 ---- could not v 17f90 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 erify build dire 17fa0 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 ctory \""$direc
17fb0 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  tory \..
17fc0 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61            "\", a
17fd0 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65  ll testing halte
17fe0 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  d\n"]....
17ff0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18000 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
18010 52 61 69 73 69 6e 67 20 61 20 73 63 72 69 70 74  Raising a script
18020 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 69 73   error from this
18030 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68 61   point should ha
18040 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  lt..
18050 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65    #       the te
18060 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a  sting process...
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
18080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  .              e
18090 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73  rror [appendArgs
180a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
180b0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
180c0 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69   verify build di
180d0 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72  rectory \"" $dir 180e0 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 180f0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", 18100 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c all testing hal 18110 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 ted"].. 18120 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 18130 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 }.... # 18140 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 18150 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 TE: Skip trying 18160 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 to copy any file 18170 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e s if instructed. 18180 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 18190 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 181a0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 181b0 63 6f 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 copySqliteFiles) 181c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 181d0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 181e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 181f0 70 79 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 pySqliteConfigFi 18200 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 18210 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 18220 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 each fileName$c
18230 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
18240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18250 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69    tryCopyBuildFi
18260 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  le $fileName.. 18270 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 18280 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 18290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 182a0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 182b0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 78 74 no(copySqliteExt 182c0 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 ernalFiles)]} th 182d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 182e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 182f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 # NOTE: Cop 18300 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 44 65 y the Managed De 18310 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e bugging Assistan 18320 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 67 75 ts (MDA) configu 18330 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 ration.. 18340 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 # fi 18350 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c 65 le for the Eagle 18360 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 shell to the bu 18370 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 ild output direc 18380 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 tory,.. 18390 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 # whi 183a0 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 6f 66 le using each of 183b0 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 the names of th 183c0 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 63 79 e various legacy 183d0 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 20 test.. 183e0 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 65 # exe 183f0 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 73 20 cutables. This 18400 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61 6b will help to mak 18410 65 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 e sure that all 18420 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the.. 18430 20 20 20 23 20 20 20 20 20 20 20 6c 65 67 61 63 # legac 18440 79 20 74 65 73 74 73 20 72 75 6e 20 77 69 74 68 y tests run with 18450 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d exactly the sam 18460 65 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 65 64 e set of Managed 18470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18480 23 20 20 20 20 20 20 20 44 65 62 75 67 67 69 6e # Debuggin 18490 67 20 41 73 73 69 73 74 61 6e 74 73 20 63 6f 6e g Assistants con 184a0 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 figured... 184b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 184c0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 184d0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f fileName$mdaCo
184e0 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  nfigFileNames {.
184f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18500 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69   tryCopyBinaryFi
18510 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78  le EagleShell.ex
18520 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 22 22 20  e.mda.config ""
18530 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 18540 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 18550 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 18560 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 18570 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 65 78 OTE: Copy the ex 18580 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 2c ternal binaries, 18590 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 if any, to the 185a0 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 0d 0a directory that.. 185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 185c0 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 74 contains t 185d0 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 2e 20 he Eagle shell. 185e0 20 54 68 69 73 20 69 73 20 74 79 70 69 63 61 6c This is typical 185f0 6c 79 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 0d ly used to make. 18600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 18610 20 20 20 20 20 20 20 73 75 72 65 20 61 73 73 65 sure asse 18620 6d 62 6c 69 65 73 20 72 65 66 65 72 65 6e 63 65 mblies reference 18630 64 20 62 79 20 74 68 65 20 6f 6e 65 73 20 62 65 d by the ones be 18640 69 6e 67 20 74 65 73 74 65 64 20 61 72 65 0d 0a ing tested are.. 18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 18660 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 available 18670 64 75 72 69 6e 67 20 74 68 65 20 74 65 73 74 69 during the testi 18680 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 ng process... 18690 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 186a0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 186b0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 ach fileName$ex
186c0 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
186d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
186e0 20 20 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e     tryCopyExtern
186f0 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  alFile $fileName 18700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18710 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 18720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 18730 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 18740 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 18750 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 eNativeFiles)]} 18760 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 18770 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18780 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 18790 66 20 74 68 65 20 74 65 73 74 20 70 6c 61 74 66 f the test platf 187a0 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79 20 74 68 orm is likely th 187b0 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 e default for th 187c0 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 is.. 187d0 20 20 23 20 20 20 20 20 20 20 6d 61 63 68 69 6e # machin 187e0 65 2c 20 61 6c 73 6f 20 74 72 79 20 74 6f 20 63 e, also try to c 187f0 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 66 opy the native f 18800 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 iles to the.. 18810 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 18820 20 20 20 62 69 6e 61 72 79 20 6c 6f 63 61 74 69 binary locati 18830 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on... 18840 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18850 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 18860 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 18870 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c qliteImplicitFil 18880 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 18890 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 [is 188a0 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 DefaultBuildPlat 188b0 66 6f 72 6d 20 74 72 75 65 5d 7d 20 74 68 65 6e form true]} then 188c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 188d0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 188e0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
188f0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
18900 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
18910 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  pyAssembly $file 18920 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 18930 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 18940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 18950 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 18960 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 18970 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d (copySqliteNonIm 18980 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 18990 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 189a0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 189b0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 189c0 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d pySqlitePlatform 189d0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 189f0 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 18a00 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
18a10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18a20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
18a30 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 18a40 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18a60 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 18a70 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 bly$fileName $p 18a80 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 18a90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 18ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 18ac0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 18ad0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 18ae0 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 liteArchitecture 18af0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18b10 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 18b20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
18b30 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
18b50 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
18b60 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 18b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18b80 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 tryCopyA 18b90 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
18ba0 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d  e $architecture. 18bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 18bc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 18bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 18be0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 18bf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 18c00 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 18c10 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 18c20 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 pySqliteManagedF 18c30 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 18c50 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
18c60 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
18c70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
18c80 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d      tryCopyAssem
18c90 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  bly $fileName.. 18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 18cb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 18cc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 18cd0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18ce0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 18cf0 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 p trying to load 18d00 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e any files if in 18d10 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 18d20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 18d30 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 18d40 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 18d50 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iteFiles)]} then 18d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18d70 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 18d80 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 s ::no(loadSqlit 18d90 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d eImplicitFiles)] 18da0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18db0 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 tryLoadA 18dc0 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 ssembly System.D 18dd0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a ata.SQLite.dll.. 18de0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 18df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 18e00 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 18e10 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4c 69 :no(loadSqliteLi 18e20 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 nqFiles)]} then 18e30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18e40 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 tryLoadAssembly 18e50 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 18e60 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 ite.Linq.dll.. 18e70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 18e80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 18e90 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 18ea0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 36 46 o(loadSqliteEf6F 18eb0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 18ed0 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 yLoadAssembly Sy 18ee0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 18ef0 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 .EF6.dll.. 18f00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 18f10 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 18f20 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 18f30 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 adSqliteNonImpli 18f40 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e citFiles)]} then 18f50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18f60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 18f70 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 18f80 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 itePlatformFiles 18f90 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 18fa0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 18fb0 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
18fc0 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
18fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18fe0 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c    tryLoadAssembl
18ff0 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
19000 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f  Lite.dll $platfo 19010 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm.. 19020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 19030 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 19040 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 exists ::no(load 19050 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 SqliteArchitectu 19060 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a reFiles)] && \.. 19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19080 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 19090 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
190a0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
190c0 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73  LoadAssembly Sys
190d0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
190e0 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72  dll $architectur 190f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 19100 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 19110 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 19120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 19130 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 19140 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
19150 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
19160 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19170 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
19180 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
19190 20 5c 22 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22   \"sqlite3.dll\"
191a0 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ... " \..
191b0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72         [file ver
191c0 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46  sion [getBinaryF
191d0 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e  ileName sqlite3.
191e0 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  dll]] \n]..
191f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
19200 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
19210 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 19220 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 19230 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 19240 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 19250 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 version of \"SQ 19260 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 19270 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 \"... " \.. 19280 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 [file v 19290 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar 192a0 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 yFileName SQLite 192b0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c .Interop.dll]] \ 192c0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d n].. }... 192d0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 192e0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 192f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
19300 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
19310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
19320 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
19330 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61  n of \"System.Da
19340 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e  ta.SQLite.dll\".
19350 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
19360 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
19370 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
19380 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61  leName System.Da
19390 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20  ta.SQLite.dll]]
193a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
193b0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
193c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
193d0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 193e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 193f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19400 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 19410 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 on of \"System.D 19420 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e ata.SQLite.Linq. 19430 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 dll\"... " \.. 19440 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 19450 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 e version [getBi 19460 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 naryFileName Sys 19470 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 19480 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a Linq.dll]] \n].. 19490 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 194a0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 194b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
194c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
194d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
194e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
194f0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
19500 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \"System.Data.S
19510 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5c 22 2e  QLite.EF6.dll\".
19520 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
19530 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
19540 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
19550 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61  leName System.Da
19560 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c  ta.SQLite.EF6.dl
19570 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  l]] \n]..
19580 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
19590 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
195a0 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d   $platform] > 0} 195b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 195c0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 195d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
195e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
195f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
19610 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
19620 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d  of \"" $platform 19630 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19640 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c "/sqlite3.dl 19650 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 l\"... " [file v 19660 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ersion \.. 19670 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 [getBi 19680 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c naryFileName sql 19690 69 74 65 33 2e 64 6c 6c 20 24 70 6c 61 74 66 6f ite3.dll$platfo
196a0 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rm]] \n]..
196b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
196c0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
196d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 196e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 196f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 19700 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 19710 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 19720 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d of \""$platform
19730 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19740 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74      "/SQLite.Int
19750 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  erop.dll\"... "
19760 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
19770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19780 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
19790 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72  ame SQLite.Inter
197a0 6f 70 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d  op.dll $platform 197b0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 197c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 197d0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 197e0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
197f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
19800 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
19810 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
19820 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
19830 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c   \"" $platform \ 19840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19850 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e "/System.Data. 19860 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 19870 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 " [file version 19880 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19890 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c [getBinaryFil 198a0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 198b0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c a.SQLite.dll$pl
198c0 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20  atform]] \n]..
198d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
198e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
198f0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
19900 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65  th $architecture 19910 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 19920 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 19930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 19940 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
19950 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
19960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19970 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
19980 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72  rsion of \"" $ar 19990 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 chitecture \.. 199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f "/ 199b0 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e sqlite3.dll\"... 199c0 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e " [file version 199d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 199e0 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 [getBinaryFi 199f0 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 leName sqlite3.d 19a00 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 ll$architecture
19a10 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
19a20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
19a30 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
19a40 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 19a50 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 19a60 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 19a70 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 19a80 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 19a90 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 \""$architectu
19aa0 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  re \..
19ab0 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49        "/SQLite.I
19ac0 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20  nterop.dll\"...
19ad0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  " [file version
19ae0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19af0 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c     [getBinaryFil
19b00 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74  eName SQLite.Int
19b10 65 72 6f 70 2e 64 6c 6c 20 24 61 72 63 68 69 74  erop.dll $archit 19b20 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 ecture]] \n].. 19b30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 19b40 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 19b50 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 19b60 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
19b70 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
19b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19b90 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
19ba0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68  ion of \"" $arch 19bb0 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 itecture \.. 19bc0 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79 "/Sy 19bd0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 19be0 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c .dll\"... " [fil 19bf0 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 e version \.. 19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 19c10 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 19c20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 19c30 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 te.dll$architec
19c40 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  ture]] \n]..
19c50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
19c60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
19c70 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
19c80 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f   Grab the list o
19c90 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  f managed assemb
19ca0 6c 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 72  lies for the cur
19cb0 72 65 6e 74 20 70 72 6f 63 65 73 73 0d 0a 20 20  rent process..
19cc0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
19cd0 64 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20  d report on the
19ce0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
19cf0 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e  te related ones.
19d00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
19d10 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c       set assembl
19d20 69 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ies [object invo
19d30 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72  ke AppDomain.Cur
19d40 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 73  rentDomain GetAs
19d50 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20  semblies]....
19d60 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
19d70 61 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61 73  ach assembly $as 19d80 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 semblies {.. 19d90 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 19da0 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 6d g match \{System 19db0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 .Data.SQLite*$a
19dc0 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b  ssembly]} then {
19dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
19de0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 19df0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 19e00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19e10 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c "---- found l 19e20 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 oaded assembly: 19e30 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d "$assembly \n].
19e40 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
19e50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
19e60 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
19e70 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 19e80 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 19ea0 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 -- define consta 19eb0 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d nts for \"System 19ec0 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e .Data.SQLite\".. 19ed0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 19ee0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 19ef0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 19f00 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 19f10 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 19f30 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 19f40 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 .SQLite3 DefineC 19f50 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 onstants.. 19f60 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 } defineCons 19f70 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tants] == 0} the 19f80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 19f90 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
19fa0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
19fb0 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b  gs [formatList [
19fc0 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20  lsort \..
19fd0 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65           $define 19fe0 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 Constants] <none 19ff0 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 >] \n].. 1a000 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1a010 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1a020 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
1a030 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
1a040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1a050 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
1a060 20 7b 0d 0a 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 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 1a090 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 "---- sourc 1a0a0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 e version of \"S 1a0b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1a0c0 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a e.dll\"... ".... 1a0d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 1a0e0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1a0f0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1a100 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 1a110 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 1a120 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 1a130 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 1a140 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 Connection Provi 1a150 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 derVersion.. 1a160 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d } version] 1a170 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1a180 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 1a190 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
1a1a0 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
1a1b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1a1c0 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20      set version
1a1d0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  null..
1a1e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1a1f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1a200 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1a210 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d gs$version \n].
1a220 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
1a230 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1a240 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1a250 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 1a260 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1a270 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1a280 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 1a290 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1a2a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1a2c0 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b  --- source check
1a2d0 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e  out of \"System.
1a2e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c  Data.SQLite.dll\
1a2f0 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  "... "....
1a300 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
1a320 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
1a330 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
1a340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a350 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1a360 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite.SQLiteConnec
1a370 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75  tion ProviderSou
1a380 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  rceId..
1a390 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20   } sourceId] ==
1a3a0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1a3b0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
1a3c0 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63  ng length $sourc 1a3d0 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then 1a3e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a3f0 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu 1a400 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 1a410 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 1a420 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1a430 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1a440 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a   $sourceId \n].. 1a450 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1a460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a470 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1a480 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
1a490 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1a4a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1a4b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1a4c0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20  NOTE: Check the
1a4d0 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73  available builds
1a4e0 20 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22   (and "releases"
1a4f0 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d  ) of SQLite and.
1a500 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1a510 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1a520 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
1a530 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
1a540 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a  rSQLiteBuilds $: 1a550 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 :test_channel.. 1a560 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 1a570 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a QLiteReleases$:
1a580 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
1a590 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1a5a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c      # NOTE: Now,
1a5b0 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77   we need to know
1a5c0 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
1a5d0 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61  ore library is a
1a5e0 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..
1a5f0 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20    #       (i.e.
1a600 62 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61  because the mana
1a610 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e  ged-only System.
1a620 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65  Data.SQLite asse
1a630 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20  mbly can..
1a640 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77    #       load w
1a650 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76  ithout it; howev
1a660 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f  er, it cannot do
1a670 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c   anything useful
1a680 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20   without..
1a690 20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20    #       it).
1a6a0 49 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20  If we are using
1a6b0 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
1a6c0 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61  ssembly and we a
1a6d0 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20  lready..
1a6e0 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74  #       found it
1a6f0 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73   (above), this s
1a700 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63  hould always suc
1a710 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  ceed...        #
1a720 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
1a730 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20  orSQLiteLibrary
1a740 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 1a750 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1a760 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1a770 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 eck if the SQLit 1a780 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 1a790 6c 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e ly is available. 1a7a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a7b0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 1a7c0 69 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 iteInterop$::te
1a7d0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
1a7e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a7f0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
1a800 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  he SQLite databa
1a810 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
1a820 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20   directories...
1a830 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a840 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
1a850 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74  Directories $::t 1a860 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 1a870 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a880 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 1a890 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 t to determine i 1a8a0 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c f various compil 1a8b0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e e-time options n 1a8c0 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 eeded for.. 1a8d0 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 1a8e0 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 constraints were 1a8f0 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 enabled for the 1a900 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 1a910 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 y. There.. 1a920 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 # are s 1a930 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 ome compile-time 1a940 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 options that mu 1a950 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 st also have bee 1a960 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 n enabled.. 1a970 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 # for t 1a980 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d he interop assem 1a990 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 bly in order to 1a9a0 62 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 be effective. F 1a9b0 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 or those.. 1a9c0 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e # option 1a9d0 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 s, it will be as 1a9e0 73 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 sumed that it wa 1a9f0 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 s enabled for th 1aa00 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 e interop.. 1aa10 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d # assem 1aa20 62 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e bly if it was en 1aa30 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 abled for the ma 1aa40 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d naged assembly.. 1aa50 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1aa60 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 foreach defi 1aa70 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 neConstant [list 1aa80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1aa90 43 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e CHECK_STATE COUN 1aaa0 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 T_HANDLE DEBUG I 1aab0 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 NTEROP_CODEC INT 1aac0 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 EROP_DEBUG \.. 1aad0 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 1aae0 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 P_EXTENSION_FUNC 1aaf0 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 4c 45 TIONS INTEROP_LE 1ab00 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 GACY_CLOSE INTER 1ab10 4f 50 5f 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 OP_LOG \.. 1ab20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 INTEROP_TE 1ab30 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 ST_EXTENSION INT 1ab40 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 1ab50 4c 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 LE NET_20 NET_35 1ab60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ab70 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 NET_40 NET_45 NE 1ab80 54 5f 34 35 31 20 4e 45 54 5f 43 4f 4d 50 41 43 T_451 NET_COMPAC 1ab90 54 5f 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f T_20 PLATFORM_CO 1aba0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c MPACTFRAMEWORK \ 1abb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 52 .. PR 1abc0 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 ELOAD_NATIVE_LIB 1abd0 52 41 52 59 20 52 45 54 41 52 47 45 54 41 42 4c RARY RETARGETABL 1abe0 45 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 E SQLITE_STANDAR 1abf0 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 D \.. 1ac00 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 THROW_ON_DISPOS 1ac10 45 44 20 54 52 41 43 45 20 54 52 41 43 45 5f 43 ED TRACE TRACE_C 1ac20 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f ONNECTION TRACE_ 1ac30 44 45 54 45 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 DETECTION \.. 1ac40 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 48 TRACE_H 1ac50 41 4e 44 4c 45 20 54 52 41 43 45 5f 50 52 45 4c ANDLE TRACE_PREL 1ac60 4f 41 44 20 54 52 41 43 45 5f 53 48 41 52 45 44 OAD TRACE_SHARED 1ac70 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 TRACE_STATEMENT 1ac80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ac90 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 TRACE_WARNING TR 1aca0 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 ACK_MEMORY_BYTES 1acb0 20 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d USE_ENTITY_FRAM 1acc0 45 57 4f 52 4b 5f 36 20 5c 0d 0a 20 20 20 20 20 EWORK_6 \.. 1acd0 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52 USE_INTER 1ace0 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 OP_DLL USE_PREPA 1acf0 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b RE_V2 WINDOWS] { 1ad00 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1ad10 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1ad20 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f Check if the co 1ad30 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 1ad40 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 n is listed in t 1ad50 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 he list of.. 1ad60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64 # "d 1ad70 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 efine constants" 1ad80 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 kept track of b 1ad90 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 y the managed as 1ada0 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 1adb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1adc0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 checkForSQLiteDe 1add0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a fineConstant$::
1ade0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65  test_channel $de 1adf0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 fineConstant.. 1ae00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1ae10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1ae20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 1ae30 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 current build ye 1ae40 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 ar. Basically, 1ae50 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a this indicates.. 1ae60 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ae70 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 which version of 1ae80 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 MSBuild and/or 1ae90 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 Visual Studio wa 1aea0 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 s used to.. 1aeb0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 # compi 1aec0 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 le the assembly 1aed0 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 binaries under t 1aee0 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d est... #. 1aef0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1af00 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
1af10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
1af20 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
1af30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1af40 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e  ite build year..
1af50 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  . "....        s
1af60 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c  et year [getBuil
1af70 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20  dYear]..
1af80 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  addConstraint [a
1af90 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59  ppendArgs buildY
1afa0 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20  ear. $year].. 1afb0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1afc0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1afd0 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20  ndArgs \" $year 1afe0 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 \"\n].... 1aff0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1b000 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 TE: Check the cu 1b010 72 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 rrent build .NET 1b020 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 Framework. Bas 1b030 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 ically, this.. 1b040 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 1b050 64 69 63 61 74 65 73 20 77 68 69 63 68 20 76 65 dicates which ve 1b060 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 rsion of the .NE 1b070 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 T Framework is b 1b080 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 eing.. # 1b090 20 20 20 20 20 20 75 73 65 64 20 62 79 20 74 68 used by th 1b0a0 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 e assembly binar 1b0b0 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d ies under test.. 1b0c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1b0d0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1b0e0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
1b0f0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
1b100 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
1b110 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62  em.Data.SQLite b
1b120 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77  uild .NET Framew
1b130 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ork... "....
1b140 20 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b 67      set netFx [g
1b150 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20  etBuildNetFx]..
1b160 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
1b170 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1b180 20 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e   buildFramework.
1b190 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20   $netFx].. 1b1a0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1b1b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1b1c0 72 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22  rgs \" $netFx \" 1b1d0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 1b1e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1b1f0 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 : Check the curr 1b200 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 ent build config 1b210 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 uration. This s 1b220 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a hould normally.. 1b230 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1b240 62 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 be either "Debug 1b250 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d " or "Release".. 1b260 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1b270 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1b280 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
1b290 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
1b2a0 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
1b2b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62  em.Data.SQLite b
1b2c0 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69  uild configurati
1b2d0 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  on... "....
1b2e0 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61     set configura
1b2f0 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f  tion [getBuildCo
1b300 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20  nfiguration]..
1b310 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
1b320 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
1b330 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  buildConfigurati
1b340 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69  on. $configurati 1b350 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 on].. tpu 1b360 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1b370 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1b380 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  " $configuration 1b390 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 \"\n].... 1b3a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1b3b0 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 OTE: Try to setu 1b3c0 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 p an interrupt c 1b3d0 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 allback using th 1b3e0 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 e script debugge 1b3f0 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 r.. # 1b400 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e that will can 1b410 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 cel all SQL quer 1b420 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 ies in progress 1b430 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 for all database 1b440 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1b450 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e connections kn 1b460 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 own to this inte 1b470 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 1b480 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 1b490 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1b4a0 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 :no(sqliteInterr 1b4b0 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 uptCallback)]} t 1b4c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1b4d0 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 setupDbInterrup 1b4e0 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 tCallback$::tes
1b4f0 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73  t_channel $::tes 1b500 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d t_log.. } 1b510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1b520 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 1b530 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 heck for the nat 1b540 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ive runtime opti 1b550 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 on, which would 1b560 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 mean we are.. 1b570 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 # usi 1b580 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 ng the mixed-mod 1b590 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 e assembly... 1b5a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b5b0 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f checkForRuntimeO 1b5c0 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 ption$::test_ch
1b5d0 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a  annel native....
1b5e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1b5f0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
1b600 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69   if the test sui
1b610 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20  te should count
1b620 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1b630 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20  nnections..
1b640 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e     #       "open
1b650 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22  ed" and "closed"
1b660 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77   from the pool w
1b670 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  hen determining
1b680 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20  if a test..
1b690 20 20 20 23 20 20 20 20 20 20 20 70 61 73 73 65     #       passe
1b6a0 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68  d.  Disabling th
1b6b0 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 73  is behavior is s
1b6c0 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61  ometimes necessa
1b6d0 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  ry (e.g...
1b6e0 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67    #       during
1b6f0 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 73   the release tes
1b700 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65  ting process) be
1b710 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20  cause there are
1b720 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20  several..
1b730 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74   #       tests t
1b740 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20  hat rely on the
1b750 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f  "opened from poo
1b760 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67  l" count being g
1b770 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20  reater..
1b780 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72  #       than zer
1b790 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20  o.  These tests
1b7a0 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20  may fail due to
1b7b0 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e  the non-determin
1b7c0 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23  istic..        #
1b7d0 20 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20         behavior
1b7e0 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65  of the CLR GC, e
1b7f0 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69  ven when there i
1b800 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20  s no bug in the
1b810 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20  code..        #
1b820 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74        being test
1b830 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
1b840 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
1b850 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a  RuntimeOption $: 1b860 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f :test_channel no 1b870 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 PoolCounts.... 1b880 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1b890 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 # NOTE: Report 1b8a0 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 the resource usa 1b8b0 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e ge prior to runn 1b8c0 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a ing any tests... 1b8d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1b8e0 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 reportSQLiteR 1b8f0 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 esources$::test
1b900 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
1b910 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1b920 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the
1b930 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6d  list of native m
1b940 6f 64 75 6c 65 73 20 66 6f 72 20 74 68 65 20 63  odules for the c
1b950 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 61  urrent process a
1b960 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  nd..        #
1b970 20 20 20 20 72 65 70 6f 72 74 20 6f 6e 20 74 68      report on th
1b980 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
1b990 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65  Lite related one
1b9a0 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
1b9b0 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c         set modul
1b9c0 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  es [object invok
1b9d0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1b9e0 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74   System.Diagnost
1b9f0 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43  ics.Process.GetC
1ba00 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f  urrentProcess Mo
1ba10 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  dules]....
1ba20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
1ba30 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24   -alias module $1ba40 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20 modules {.. 1ba50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1ba60 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f # NOTE: The mo 1ba70 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 dule file name h 1ba80 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d ere must be norm 1ba90 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 alized... 1baa0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1bab0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 1bac0 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d le normalize [$m
1bad0 6f 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d  odule FileName]]
1bae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1baf0 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match
1bb00 2d 6e 6f 63 61 73 65 20 2a 2f 73 71 6c 69 74 65  -nocase */sqlite
1bb10 33 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d  3.dll $fileName] 1bb20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1bb30 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1bb40 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1bb50 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1bb60 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1bb70 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51   found loaded SQ
1bb80 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72  Lite native libr
1bb90 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d  ary module: " \.
1bba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1bbb0 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a   $fileName \n].. 1bbc0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1bbd0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 if {[string matc 1bbe0 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h \.. 1bbf0 20 20 20 2d 6e 6f 63 61 73 65 20 2a 2f 53 51 4c -nocase */SQL 1bc00 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 ite.Interop.dll 1bc10 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
1bc20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1bc30 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1bc40 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1bc50 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1bc60 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 "---- found 1bc70 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69 loaded SQLite i 1bc80 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 1bc90 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 module: " \.. 1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69$fi
1bcb0 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20  leName \n]..
1bcc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1bcd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
1bce0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1bcf0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1bd00 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 1bd10 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 1bd20 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 1bd30 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f ns for SQLite co 1bd40 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d re library... ". 1bd50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1bd60 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1bd70 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1bd80 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1bd90 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1bda0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1bdb0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1bdc0 69 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 ite3 SQLiteCompi 1bdd0 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 leOptions.. 1bde0 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 } compileOp 1bdf0 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tions] == 0} the 1be00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1be10 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1be20 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1be30 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b  gs [formatList [
1be40 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20  lsort \..
1be50 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c           $compil 1be60 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e eOptions] <none> 1be70 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 1be80 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1be90 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1bea0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b  test_channel unk
1beb0 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20  nown\n..
1bec0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1bed0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
1bee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1bef0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1bf00 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 1bf10 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c "---- compil 1bf20 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 e-time options f 1bf30 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f or SQLite intero 1bf40 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d p assembly... ". 1bf50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1bf60 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1bf70 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1bf80 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1bf90 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1bfa0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1bfb0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1bfc0 69 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 ite3 InteropComp 1bfd0 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 ileOptions.. 1bfe0 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f } compileO 1bff0 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 ptions] == 0} th 1c000 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1c010 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1c020 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1c030 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20  rgs [formatList
1c040 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  [lsort \..
1c050 20 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69            $compi 1c060 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 leOptions] <none 1c070 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 >] \n].. 1c080 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1c090 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1c0a0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
1c0b0 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
1c0c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1c0d0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1c0e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
1c0f0 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 74 65  ow the active te
1c100 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d  st constraints..
1c110 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1c120 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1c130 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1c140 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 dArgs "---- cons 1c150 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 traints: " \.. 1c160 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 [forma 1c170 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 tList [lsort [ge 1c180 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c tConstraints]] < 1c190 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 none>] \n].... 1c1a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1c1b0 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 # NOTE: Save th 1c1c0 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e e test constrain 1c1d0 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 ts for use by th 1c1e0 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69 6e reads created in 1c1f0 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 this.. # 1c200 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 applicati 1c210 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 on domain. This 1c220 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 is necessary be 1c230 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 cause all the Ea 1c240 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 gle.. # 1c250 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 "test conte 1c260 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 xt" information 1c270 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a is per-thread... 1c280 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1c290 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1c2a0 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 ists ::test_cons 1c2b0 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b traints]} then { 1c2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1c2d0 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e ::test_constrain 1c2e0 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 ts$::eagle_test
1c2f0 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a  s(constraints)..
1c300 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1c310 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c320 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65  # NOTE: Load the
1c330 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69   "after-constrai
1c340 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d  nts" custom per-
1c350 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d  user and/or per-
1c360 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  host..        #
1c370 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69        test setti
1c380 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ngs now...
1c390 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c    #..        upl
1c3a0 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61  evel 1 [list loa
1c3b0 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69  dSQLiteTestSetti
1c3c0 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ngs $::test_chan 1c3d0 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 nel .after].... 1c3e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1c3f0 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 # NOTE: Show w 1c400 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 hen our tests ac 1c410 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f tually began (no 1c420 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a w)... #.. 1c430 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1c440 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1c450 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1c460 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53           "---- S
1c470 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1c480 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74  e tests began at
1c490 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1c4a0 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    [clock format
1c4b0 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d  [clock seconds]]
1c4c0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   \n]..      }..
1c4d0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1c4e0 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45  c runSQLiteTestE
1c4f0 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20  pilogue {} {..
1c500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1c510 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e  OTE: Skip runnin
1c520 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69  g our custom epi
1c530 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69  logue if the mai
1c540 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a  n one has been..
1c550 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b        #       sk
1c560 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ipped...      #.
1c570 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66  .      if {![inf
1c580 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70  o exists ::no(ep
1c590 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20  ilogue.eagle)]}
1c5a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1c5b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1c5c0 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72  E: Show when our
1c5d0 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20   tests actually
1c5e0 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20  ended (now)...
1c5f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c600 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1c610 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1c620 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1c630 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 "---- System.D 1c640 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 ata.SQLite tests 1c650 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 ended at " \.. 1c660 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 [cloc 1c670 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 k format [clock 1c680 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d seconds]] \n]... 1c690 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1c6a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 # NOTE: Load 1c6b0 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22 20 the "epilogue" 1c6c0 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 1c6d0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 and/or per-host 1c6e0 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 test.. # 1c6f0 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20 6e settings n 1c700 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ow... #.. 1c710 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 1c720 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 1 [list loadSQLi 1c730 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 teTestSettings$
1c740 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e  ::test_channel .
1c750 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20  epilogue]....
1c760 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c770 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65  # BUGFIX: Before
1c780 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69   checking the fi
1c790 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e  nal resources in
1c7a0 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20   use by SQLite,
1c7b0 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20  make..        #
1c7c0 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74          sure bot
1c7d0 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20  h of the PRAGMA
1c7e0 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72  related director
1c7f0 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65  y names are free
1c800 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
1c810 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
1c820 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73  QLiteDirectories
1c830 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1c840 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... 1c850 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1c860 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 TE: Also report 1c870 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 the resource usa 1c880 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 ge after running 1c890 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 the tests... 1c8a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1c8b0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f reportSQLiteReso 1c8c0 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 urces$::test_ch
1c8d0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
1c8e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1c8f0 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63  TE: Report the c
1c900 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
1c910 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e  ounts after runn
1c920 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a  ing the tests...
1c930 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1c940 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64     getSQLiteHand
1c950 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74  leCounts \$::test
1c960 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20  _channel..
1c970 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1c980 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
1c990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c9c0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..
1c9d0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
1c9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 20  ###############
1c9f0 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23  END Eagle ONLY #
1ca00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca10 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############..
1ca20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
1ca30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ca60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1ca70 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
1ca80 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 6e  NOTE: Save the n
1ca90 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65 63  ame of the direc
1caa0 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tory containing
1cab0 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d  this file...  #.
1cac0 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
1cad0 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65  ists common_dire
1cae0 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
1caf0 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64      set common_d
1cb00 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
1cb10 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72  irname [info scr
1cb20 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ipt]]..  }....
1cb30 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f  #..  # NOTE: Pro
1cb40 76 69 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e  vide the System.
1cb50 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
1cb60 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20   package to the
1cb70 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
1cb80 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f  #..  package pro
1cb90 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61  vide System.Data
1cba0 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30  .SQLite.Test 1.0
1cbb0 0d 0a 7d 0d 0a                                   ..}..