System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact dcb069e210d9db86f48bc435d8aa60ed52af6d7a:

• File Tests/common.eagle — part of check-in [b310edde93] at 2014-01-24 01:27:08 on branch trunk — More work on getting 32-bit on 64-bit testing support working. (user: mistachkin size: 113161)

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 70 72 6f 63 20 67 65 74 42 75 69 6c proc getBuil 1550: 64 50 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 dPlatform { nati 1560: 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 ve } {.. if 1570: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 1580: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 :test_platform] 1590: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 15a0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
15b0: 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d  ::test_platform]
15c0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
15d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15e0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
15f0: 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20   specified test
1600: 70 6c 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68  platform.  If th
1610: 69 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e  is variable is n
1620: 6f 74 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20  ot set,..
1630: 20 23 20 20 20 20 20 20 20 74 68 65 20 64 65 66   #       the def
1640: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will
1650: 62 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  be based on the
1660: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
1670: 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ture...        #
1680: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1690: 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20   [expr {$native 16a0: 3f 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f ?$::test_platfo
16b0: 72 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20  rm : ""}]..
16c0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f   } elseif {[info
16d0: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d   exists ::test_m
16e0: 61 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20  achine] && \..
16f0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
1700: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d  length $::test_m 1710: 61 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 achine] > 0} the 1720: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 1730: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1740: 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 For native build 1750: 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c s, return the pl 1760: 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 atform name corr 1770: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 esponding to.. 1780: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 1790: 65 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 e test machine a 17a0: 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 rchitecture; oth 17b0: 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 erwise, return a 17c0: 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 n empty.. 17d0: 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e # string. 17e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 17f0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1800: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 r {..$
1810: 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e  native ? [machin
1820: 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74  eToPlatform $::t 1830: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 est_machine] : " 1840: 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 ".. }].. 1850: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 1860: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc 1870: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 l_platform(machi 1880: 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ne)]} then {.. 1890: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18a0: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 # NOTE: For nat 18b0: 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 ive builds, retu 18c0: 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 rn the platform 18d0: 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 name correspondi 18e0: 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 ng to.. # 18f0: 20 20 20 20 20 20 20 74 68 65 20 6d 61 63 68 69 the machi 1900: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 3b ne architecture; 1910: 20 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 otherwise, retu 1920: 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 rn an empty stri 1930: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ng... #.. 1940: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 1950: 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 expr {.. 1960: 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63$native ? [mac
1970: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24  hineToPlatform $1980: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d ::tcl_platform(m 1990: 61 63 68 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 achine)] : "".. 19a0: 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 }].. 19b0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 19c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 19d0: 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 NOTE: No machine 19e0: 20 61 72 63 68 69 74 65 63 74 75 72 65 20 69 73 architecture is 19f0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 available, retu 1a00: 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 rn an empty stri 1a10: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ng... # 1a20: 20 20 20 20 20 49 74 20 69 73 20 69 6d 70 6f 72 It is impor 1a30: 74 61 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 61 tant to return a 1a40: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 68 n empty string h 1a50: 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65 0d ere because the. 1a60: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1a70: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20 result of this 1a80: 70 72 6f 63 65 64 75 72 65 20 6d 61 79 20 62 65 procedure may be 1a90: 20 75 73 65 64 20 77 69 74 68 20 5b 66 69 6c 65 used with [file 1aa0: 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 join]... 1ab0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1ac0: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rn "".. }.. 1ad0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1ae0: 6f 63 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 oc getBuildConfi 1af0: 67 75 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 guration {} {.. 1b00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1b10: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 NOTE: See if the 1b20: 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 "configuration" 1b30: 20 73 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 setting has bee 1b40: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 n overridden by 1b50: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 1b60: 20 20 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e user (e.g. on 1b70: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 1b80: 65 29 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 e). This helps 1b90: 63 6f 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d control exactly. 1ba0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 . # w 1bb0: 68 69 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 hich set of bina 1bc0: 72 69 65 73 20 77 65 20 61 72 65 20 74 65 73 74 ries we are test 1bd0: 69 6e 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 ing (i.e. those 1be0: 62 75 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 built in the.. 1bf0: 20 20 20 20 23 20 20 20 20 20 20 20 22 44 65 62 # "Deb 1c00: 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 ug" or "Release" 1c10: 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 build configura 1c20: 74 69 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 tions). To over 1c30: 72 69 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 ride this.. 1c40: 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 # value v 1c50: 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c ia the command l 1c60: 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d ine, enter a com 1c70: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 mand similar to 1c80: 6f 6e 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 one of.. # 1c90: 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 the follow 1ca0: 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 ing (all on one 1cb0: 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d line):.. #. 1cc0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 1cd0: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 1ce0: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 1cf0: 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 t test_configura 1d00: 74 69 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 tion Debug".. 1d10: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 1d20: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 1d30: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 1d40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 1d50: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 1d60: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 1d70: 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 t test_configura 1d80: 74 69 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 tion Release".. 1d90: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d # - 1da0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 file .\path\to\a 1db0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 ll.eagle.. 1dc0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 1dd0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 1de0: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 1df0: 61 6c 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 all.eagle -preTe 1e00: 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 st.. # 1e10: 20 20 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f "unset -noco 1e20: 6d 70 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 mplain test_conf 1e30: 69 67 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 iguration".. 1e40: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 1e50: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1e60: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 1e70: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1e80: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1e90: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75$::test_configu
1ea0: 72 61 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65  ration] > 0} the
1eb0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
1ec0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1ed0: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
1ee0: 64 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61  d test configura
1ef0: 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75  tion.  The defau
1f00: 6c 74 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20  lt value used..
1f10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
1f20: 6f 72 20 74 68 69 73 20 76 61 72 69 61 62 6c 65  or this variable
1f30: 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52   is typically "R
1f40: 65 6c 65 61 73 65 22 2c 20 61 73 20 73 65 74 20  elease", as set
1f50: 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20  by the test..
1f60: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 69       #       sui
1f70: 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20  te itself...
1f80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
1f90: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f  eturn $::test_co 1fa0: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 nfiguration.. 1fb0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1fc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1fd0: 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 # NOTE: Normally 1fe0: 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 , we will never 1ff0: 68 69 74 20 74 68 69 73 20 63 61 73 65 20 62 65 hit this case be 2000: 63 61 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 cause the value 2010: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 of the.. 2020: 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e # test con 2030: 66 69 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 figuration varia 2040: 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 ble is always se 2050: 74 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 t by the test su 2060: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ite.. # 2070: 20 20 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 itself; how 2080: 65 76 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 ever, it can be 2090: 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 overridden using 20a0: 20 74 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 the unset comma 20b0: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 nd.. # 20c0: 20 20 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 from the -pr 20d0: 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 eTest option to 20e0: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. 20f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2100: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 return$::ea
2110: 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e  gle_platform(con
2120: 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20  figuration)..
2130: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
2140: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
2150: 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20  dConfigurations
2160: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
2170: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65       # NOTE: See
2180: 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20   if the list of
2190: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69  test configurati
21a0: 6f 6e 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ons has been ove
21b0: 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20  rridden by..
21c0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 73    #       the us
21d0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
21e0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
21f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
2200: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
2210: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
2220: 74 69 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20  tions] && \..
2230: 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20         [llength
2240: 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72  $::test_configur 2250: 61 74 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 ations] > 0} the 2260: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 2270: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2280: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 2290: 64 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 d list of test c 22a0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a onfigurations... 22b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 22c0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
22d0: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t_configurations
22e0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
22f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2300: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
2310: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73   the default lis
2320: 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67  t of test config
2330: 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20  urations...
2340: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
2350: 74 75 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67  turn [list Debug
2360: 20 52 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20   Release]..
2370: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
2380: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42    proc getBuildB
2390: 61 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20  aseDirectory {}
23a0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
23b0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65    # NOTE: Figure
23c0: 20 6f 75 74 20 74 68 65 20 62 61 73 65 20 64 69   out the base di
23d0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c  rectory where al
23e0: 6c 20 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f  l the builds sho
23f0: 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20  uld be..      #
2400: 20 20 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20        located.
2410: 54 68 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65  This will be the
2420: 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 20   directory that
2430: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74  contains the act
2440: 75 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ual..      #
2450: 20 20 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20     build output
2460: 64 69 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20  directory (e.g.
2470: 70 61 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29  parent of "bin")
2480: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2490: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
24a0: 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f  ts ::build_base_
24b0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d  directory] && \.
24c0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
24d0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69  ng length $::bui 24e0: 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 ld_base_director 24f0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 2500: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2510: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 2520: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 ocation of the b 2530: 75 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 uild base direct 2540: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 ory has been ove 2550: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 rridden;.. 2560: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 2570: 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 ore, use it verb 2580: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 atim... # 2590: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 25a0: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64$::build_base_d
25b0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
25c0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
25d0: 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f  exists ::common_
25e0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d  directory] && \.
25f0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
2600: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d  ng length $::com 2610: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e mon_directory] > 2620: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2630: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2640: 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c NOTE: Next, fal 2650: 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 lback to the par 2660: 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 ent directory of 2670: 20 74 68 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e the one contain 2680: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ing.. # 2690: 20 20 20 20 20 74 68 69 73 20 66 69 6c 65 20 28 this file ( 26a0: 69 2e 65 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 i.e. "common.eag 26b0: 6c 65 22 29 2c 20 69 66 20 61 76 61 69 6c 61 62 le"), if availab 26c0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 26d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 26e0: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a file dirname$::
26f0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
2700: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  ]..      } elsei
2710: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
2720: 3a 3a 70 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20  ::path] && \..
2730: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
2740: 6c 65 6e 67 74 68 20 24 3a 3a 70 61 74 68 5d 20  length $::path] 2750: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 2760: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2770: 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c # NOTE: Finally, 2780: 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 fallback to the 2790: 20 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 parent director 27a0: 79 20 6f 66 20 74 68 65 20 45 61 67 6c 65 54 65 y of the EagleTe 27b0: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 27c0: 20 20 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 path. The E 27d0: 61 67 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 agleTest package 27e0: 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 guarantees that 27f0: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a this variable.. 2800: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2810: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 74 will be set to t 2820: 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e he directory con 2830: 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 72 73 taining the firs 2840: 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 t file to.. 2850: 20 20 20 23 20 20 20 20 20 20 20 65 78 65 63 75 # execu 2860: 74 65 20 74 68 65 20 5b 72 75 6e 54 65 73 74 50 te the [runTestP 2870: 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 70 74 20 rologue] script 2880: 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 library procedur 2890: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 28a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 return [f 28b0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 ile dirname$::p
28c0: 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ath]..      } el
28d0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
28e0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28f0: 20 4e 6f 20 70 61 74 68 20 69 73 20 61 76 61 69   No path is avai
2900: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e  lable, return an
2910: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20   empty string.
2920: 54 68 69 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20  This point..
2930: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
2940: 6c 64 20 6e 6f 74 20 62 65 20 72 65 61 63 68 65  ld not be reache
2950: 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
2960: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
2970: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2980: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73  .....    proc is
2990: 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c  MixedModeAssembl
29a0: 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61  y { fileName {va
29b0: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  rName ""} } {..
29c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
29d0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d 61 6b  NOTE: First, mak
29e0: 65 20 73 75 72 65 20 74 68 65 20 74 65 73 74 20  e sure the test
29f0: 73 75 69 74 65 20 69 6e 66 72 61 73 74 72 75 63  suite infrastruc
2a00: 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  ture is allowed
2a10: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
2a20: 20 20 75 73 65 20 74 68 65 20 5b 65 78 65 63 5d    use the [exec]
2a30: 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 20   command...
2a40: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b   #..      if {![
2a50: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
2a60: 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69 6e 66  (exec)] && ![inf
2a70: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
2a80: 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e 20 7b  rFlags)]} then {
2a90: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2aa0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
2ab0: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  the location of
2ac0: 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72 65 73  CorFlags is pres
2ad0: 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76 69 72  ent in the envir
2ae0: 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20  onment,..
2af0: 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 3b   #       use it;
2b00: 20 6f 74 68 65 72 77 69 73 65 20 61 73 73 75 6d   otherwise assum
2b10: 65 20 69 74 20 69 73 20 69 6e 20 74 68 65 20 50  e it is in the P
2b20: 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ATH...        #.
2b30: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 72  .        set cor
2b40: 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d 0a 20  Flags [expr {..
2b50: 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65           [info e
2b60: 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f 72 46  xists ::env(CorF
2b70: 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e 76 28  lags)] ? $::env( 2b80: 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 6f 72 CorFlags) : "Cor 2b90: 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 20 20 Flags".. 2ba0: 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }].... #. 2bb0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2bc0: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63 Attempt to exec 2bd0: 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f 6e 20 ute CorFlags on 2be0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 the specified fi 2bf0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 2c00: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 2c10: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 2c20: 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c 61 67 exec --$corFlag
2c30: 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  s [file nativena
2c40: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  me $fileName].. 2c50: 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d 20 3d } exec] = 2c60: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 2c70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2c80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 # NOTE: If r 2c90: 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20 equested by our 2ca0: 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 74 20 caller, attempt 2cb0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 to determine the 2cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 2cd0: 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 platform for 2ce0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 the specified f 2cf0: 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 ile as well... 2d00: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2d10: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 2d20: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 length$varName
2d30: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
2d40: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
2d50: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2d60: 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c 61 74  : Store the plat
2d70: 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61 6d 65  form in the name
2d80: 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68  d variable in th
2d90: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  e..            #
2da0: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f         context o
2db0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20  f our caller...
2dc0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
2dd0: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20            upvar
2de0: 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61 74 66  1 $varName platf 2df0: 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 orm.... 2e00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2e10: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 2e20: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 t to extract the 2e30: 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 PE line from th 2e40: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 e captured.. 2e50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2e60: 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 69 73 output. If this 2e70: 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 32 22 value is "PE32" 2e80: 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 68 65 or "PE32+", the 2e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 2ea0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66 assembly f 2eb0: 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 6f 72 ile is 32-bit or 2ec0: 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 63 74 64-bit, respect 2ed0: 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 ively;.. 2ee0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65 # othe 2ef0: 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 65 20 rwise, its type 2f00: 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20 is unknown... 2f10: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2f20: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74 set patt 2f30: 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 20 20 ern {^PE 2f40: 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b 29 5c : (PE32|PE32\+)\ 2f50: 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 s+$}....
2f60: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp
2f70: 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72  -line -- $patter 2f80: 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 70 65 n$exec dummy pe
2f90: 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  32]} then {..
2fa0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 48 41              # HA
2fc0: 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74 63 68  CK: This [switch
2fd0: 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 33  ] assumes that 3
2fe0: 32 2d 62 69 74 20 65 78 65 63 75 74 61 62 6c 65  2-bit executable
2ff0: 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20  s are..
3000: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77       #       alw
3010: 61 79 73 20 78 38 36 20 61 6e 64 20 74 68 61 74  ays x86 and that
3020: 20 36 34 2d 62 69 74 20 65 78 65 63 75 74 61 62   64-bit executab
3030: 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73 0d 0a  les are always..
3040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
3050: 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20 20 20        x64...
3060: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
3070: 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
3080: 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70 65 33  h -exact -- $pe3 3090: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 2 {.. 30a0: 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 20 20 PE32 {.. 30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s 30c0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 6e 33 et platform Win3 30d0: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2.. 30e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 30f0: 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d 0a 20 PE32+ {.. 3100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3110: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 78 36 set platform x6 3120: 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 4.. 3130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 3140: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d default {. 3150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 3160: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 3170: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "".. 3180: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 3190: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 31a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 31b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 31c0: 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 platform "".. 31d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 31e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 31f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3200: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 3210: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 t to extract the 3220: 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 72 6f ILONLY line fro 3230: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a m the captured.. 3240: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 3250: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 output. If th 3260: 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f is value is zero 3270: 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 , the specified 3280: 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 20 20 file must.. 3290: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 # be 32a0: 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 a mixed-mode ass 32b0: 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 73 65 embly; otherwise 32c0: 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e , it contains on 32d0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ly.. # 32e0: 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 63 6f managed co 32f0: 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 20 20 mponents... 3300: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3310: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e set pattern {^ 3320: 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 7c 31 ILONLY : (0|1 3330: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 )\s+$}....
3340: 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70      if {![regexp
3350: 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65   -line -- $patte 3360: 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 69 rn$exec dummy i
3370: 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  lOnly]} then {..
3380: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3390: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  rn false..
33a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
33b0: 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d     if {!$ilOnly} 33c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 33d0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 33e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 33f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 3400: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 3410: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 # NOTE: If t 3420: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 63 61 he test suite ca 3430: 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 5d 20 nnot use [exec] 3440: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 or execution of 3450: 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 CorFlags.. 3460: 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 2c 20 # failed, 3470: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d 0a 20 return false... 3480: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 3490: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. 34a0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 34b0: 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 sBuildAvailable 34c0: 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74 6f { native directo 34d0: 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 ry {varName ""} 34e0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 34f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 3500: 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c d the fully qual 3510: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 ified file name 3520: 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79 20 for the primary 3530: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 assembly.. 3540: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 # containi 3550: 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 ng the System.Da 3560: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 ta.SQLite manage 3570: 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 d components. I 3580: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 t.. # 3590: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64 should be noted 35a0: 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65 6d that this assem 35b0: 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c 73 bly file may als 35c0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 o contain the.. 35d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 # nat 35e0: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 ive components, 35f0: 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c if a native buil 3600: 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 d is in use... 3610: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 3620: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 3630: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 3640: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 join$directory
3650: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79   \..          Sy
3660: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
3670: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .dll]]....
3680: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
3690: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 36a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 36b0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. 36c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 36d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 36e0: 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 tempt to automat 36f0: 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69 66 ically detect if 3700: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 the primary ass 3710: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 embly.. # 3720: 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e contains an 3730: 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 y native compone 3740: 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61 72 nts, if necessar 3750: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. 3760: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 3770: 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20 3d ength$native] =
3780: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
3790: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
37a0: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 37b0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 37c0: 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 upvar 1 37d0: 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61$varName $varNa 37e0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d me.. }... 37f0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 . set nat 3800: 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65 ive [isMixedMode 3810: 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
3820: 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20  me $varName].. 3830: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 3840: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 3850: 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 If the primary a 3860: 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e ssembly also con 3870: 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76 65 tains the native 3880: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20 components,.. 3890: 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20 68 # we h 38a0: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 ave everything w 38b0: 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 e need... # 38c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 .. if {$nat
38d0: 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ive} then {..
38e0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
38f0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
3900: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
3910: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
3920: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
3930: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the
3940: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
3950: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
3960: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
3970: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
3980: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  e native compone
3990: 6e 74 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  nts.  If this..
39a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
39b0: 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f  e exists, we sho
39c0: 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 74 68  uld have everyth
39d0: 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20  ing we need...
39e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
39f0: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file
3a00: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
3a10: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory 3a20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 \.. SQ 3a30: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 3a40: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b ]].... if { 3a50: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
3a60: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
3a70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3a80: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
3a90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3aa0: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68  # NOTE: Build th
3ab0: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
3ac0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20  d file name for
3ad0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
3ae0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c  .      #       l
3af0: 69 62 72 61 72 79 2e 20 20 49 66 20 74 68 69 73  ibrary.  If this
3b00: 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65   file exists, we
3b10: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65   should have eve
3b20: 72 79 74 68 69 6e 67 20 77 65 0d 0a 20 20 20 20  rything we..
3b30: 20 20 23 20 20 20 20 20 20 20 6e 65 65 64 2e 0d    #       need..
3b40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3b50: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
3b60: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
3b70: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 3b80: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 3b90: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a sqlite3.dll]].. 3ba0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c .. if {[fil 3bb0: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
3bc0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
3bd0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
3be0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
3bf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
3c00: 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20  TE: One or more
3c10: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
3c20: 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 74  s needed by Syst
3c30: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a  em.Data.SQLite..
3c40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
3c50: 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20  e missing...
3c60: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
3c70: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
3c80: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 65  ...    proc isRe
3c90: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 7b  leaseAvailable {
3ca0: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e   directory {varN
3cb0: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
3cc0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
3cd0: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20  ength $varName] 3ce0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 3cf0: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
3d00: 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a  rName $varName.. 3d10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 3d20: 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 return [isBuild 3d30: 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64 69 Available ""$di
3d40: 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d 65  rectory $varName 3d50: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 3d60: 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 proc joinBuildD 3d70: 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 irectory { nativ 3d80: 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61 74 e path year plat 3d90: 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 form configurati 3da0: 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d on } {.. #. 3db0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 3dc0: 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74 68 igure out and th 3dd0: 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66 75 en return the fu 3de0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 lly qualified pa 3df0: 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64 0d th to the build. 3e00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 3e10: 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20 6f irectory based o 3e20: 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d 65 n all the argume 3e30: 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 nts provided by 3e40: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 3e50: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 3e60: 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d$native} then {.
3e70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3e80: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68  [file join $path 3e90: 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61 74 bin$year $plat 3ea0: 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 form$configurat
3eb0: 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ion]..      } el
3ec0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  se {..        re
3ed0: 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  turn [file join
3ee0: 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20  $path bin$year
3ef0: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62  $configuration b 3f00: 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 in].. }.. 3f10: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 3f20: 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f getBuildDirecto 3f30: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ry {} {.. # 3f40: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 3f50: 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 See if the "nati 3f60: 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ve" runtime opti 3f70: 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e on has been set. 3f80: 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 If so, use the 3f90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3fa0: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 directory for th 3fb0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 3fc0: 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 embly (a.k.a. th 3fd0: 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 e native interop 3fe0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3ff0: 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 assembly). To e 4000: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f nable this optio 4010: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e n via the comman 4020: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d d line, enter a. 4030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 4040: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 ommand similar t 4050: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c o one of the fol 4060: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f lowing (all on o 4070: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 4080: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 4090: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 40a0: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 -initialize -ru 40b0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 ntimeOption nati 40c0: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ve.. # 40d0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 40e0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 40f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 4100: 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 To enable 4110: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 4120: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 4130: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 prior to the "b 4140: 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 eta 16".. # 4150: 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f release o 4160: 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c f Eagle, the fol 4170: 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d lowing command m 4180: 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 ust be used inst 4190: 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ead.. # 41a0: 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 (also all on 41b0: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 41c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 41d0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 41e0: 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 e -initialize -p 41f0: 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 ostInitialize.. 4200: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 # " 4210: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e object invoke In 4220: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 4230: 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 ive AddRuntimeOp 4240: 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 tion native".. 4250: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 4260: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 4270: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 4280: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 4290: 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 o exists ::build 42a0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 42b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 42c0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 ing length$::bu
42d0: 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e  ild_directory] >
42e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
42f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
4300: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74   NOTE: The locat
4310: 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64  ion of the build
4320: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
4330: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
4340: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
4350: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
4360: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
4370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4380: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64   return $::build 4390: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 43a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 43b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 43c0: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e NOTE: If the "n 43d0: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f ative" runtime o 43e0: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 ption is set, th 43f0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 4400: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 embly.. # 4410: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 is being 4420: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 tested. In that 4430: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 case, the path 4440: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 to the build dir 4450: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. 4460: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e # will con 4470: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 tain the platfor 4480: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 m name and all t 4490: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 he binaries unde 44a0: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 r test.. 44b0: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 44c0: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 e present in tha 44d0: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 t directory. If 44e0: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 44f0: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 ntime.. # 4500: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 option is 4510: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 not set, the bu 4520: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 ild directory wi 4530: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 ll be considered 4540: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 to be.. 4550: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 # "platfor 4560: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 m-neutral", with 4570: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 the notable exc 4580: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 eption of any na 4590: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 tive.. # 45a0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 assembly ( 45b0: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 e.g. "SQLite.Int 45c0: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 erop.dll") copie 45d0: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 d there during t 45e0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 45f0: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 build proces 4600: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 s itself. If th 4610: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 e build process 4620: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 somehow does not 4630: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4640: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 copy the nativ 4650: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 e assembly for t 4660: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f his platform, mo 4670: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d st of the tests. 4680: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4690: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 in the suite wi 46a0: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 ll simply be ski 46b0: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 pped. Generally 46c0: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 speaking, there 46d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 46e0: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 are two ways t 46f0: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 o build the bina 4700: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 ries when prepar 4710: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a ing to run the.. 4720: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4730: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 test suite:.. 4740: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4750: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 # 1. Build 4760: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 the separate ma 4770: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 naged and native 4780: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e assemblies usin 4790: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 g some.. 47a0: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 # comma 47b0: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d nds similar to:. 47c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 47d0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 47e0: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
47f0: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64  guration}Managed
4800: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d  Only ${Platform} 4810: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4820: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 build.bat$
4830: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e  {Configuration}N
4840: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74  ativeOnly ${Plat 4850: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 form}.. # 4860: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4870: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e Where${Con
4880: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65  figuration} is e
4890: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
48a0: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a   "Release" and..
48b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
48c0: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69     ${Platform} i 48d0: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 s either "Win32" 48e0: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 or "x64"... 48f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4900: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 2. Build 4910: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 4920: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 ssembly using a 4930: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 command similar 4940: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a to:.. #.. 4950: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4960: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 build.bat${C
4970: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b  onfiguration} ${ 4980: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 Platform}.. 4990: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 49a0: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24 Where$
49b0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20  {Configuration}
49c0: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67  is either "Debug
49d0: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61  " or "Release" a
49e0: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  nd..        #
49f0: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72         ${Platfor 4a00: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69 m} is either "Wi 4a10: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 n32" or "x64". 4a20: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 If this command 4a30: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 is.. # 4a40: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 used, var 4a50: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20 ious tests that 4a60: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 require suppleme 4a70: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 ntary managed.. 4a80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 4a90: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e assemblies (e. 4aa0: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 g. LINQ) may be 4ab0: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 skipped unless t 4ac0: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 hose binaries.. 4ad0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 4ae0: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 are subsequent 4af0: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 ly copied into t 4b00: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 he correct direc 4b10: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 tory (i.e. by.. 4b20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 4b30: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 "test_all.bat" 4b40: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 4b50: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e # N 4b60: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 ote that all of 4b70: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e the build comman 4b80: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 ds above will de 4b90: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a fault to using.. 4ba0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4bb0: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 the latest versi 4bc0: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 on of MSBuild av 4bd0: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 ailable and the 4be0: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d "test_year" may. 4bf0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4c00: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 need to be adju 4c10: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 sted accordingly 4c20: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e to actually run 4c30: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 4c40: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4c50: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 Refer to the c 4c60: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 omments in [getB 4c70: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f uildYear] for mo 4c80: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f re information o 4c90: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 n.. # 4ca0: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 how to set th 4cb0: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 is variable... 4cc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4cd0: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 68 61 73 set native [has 4ce0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 RuntimeOption na 4cf0: 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 tive].... 4d00: 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 75 69 return [joinBui 4d10: 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 ldDirectory$nat
4d20: 69 76 65 20 5b 67 65 74 42 75 69 6c 64 42 61 73  ive [getBuildBas
4d30: 65 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20  eDirectory] \..
4d40: 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
4d50: 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 42 75  uildYear] [getBu
4d60: 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74  ildPlatform $nat 4d70: 69 76 65 5d 20 5b 67 65 74 42 75 69 6c 64 43 6f ive] [getBuildCo 4d80: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 5d 0d 0a 20 nfiguration]].. 4d90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 4da0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 65 .. proc getRe 4db0: 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d 20 leaseVersion {} 4dc0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 4dd0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 4de0: 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 73 65 out the release 4df0: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 73 65 version for use 4e00: 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 64 20 with the build 4e10: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 4e20: 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 63 68 # when ch 4e30: 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 69 6c ecking for avail 4e40: 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a able releases... 4e50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 4e60: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 4e70: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f ::release_versio 4e80: 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 n] && \.. 4e90: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 4ea0: 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 h$::release_ver
4eb0: 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20  sion] > 0} then
4ec0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
4ed0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
4ee0: 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f  e release versio
4ef0: 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  n has been overr
4f00: 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 65  idden; therefore
4f10: 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20 20 20  , use it..
4f20: 20 20 23 20 20 20 20 20 20 20 76 65 72 62 61 74    #       verbat
4f30: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
4f40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $4f50: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f ::release_versio 4f60: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 n.. } else 4f70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 4f80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f # NOTE: No 4f90: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e release version 4fa0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 is available, r 4fb0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 4fc0: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 4fd0: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d # It is im 4fe0: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 portant to retur 4ff0: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 5000: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 g here because t 5010: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 5020: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 result of th 5030: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 is procedure may 5040: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 be used with [f 5050: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 ile join]... 5060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 5070: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 5080: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 5090: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 46 69 proc getBuildFi 50a0: 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d leName { fileNam 50b0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 50c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 50d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 50e0: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 rns the specifie 50f0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 d file name as i 5100: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 f it were locate 5110: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 d in the.. 5120: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 # build di 5130: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 rectory, discard 5140: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 ing any director 5150: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 y information pr 5160: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 esent.. # 5170: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 in the file 5180: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 name as provide 5190: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e d by our caller. 51a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 51b0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 return [file na 51c0: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 tivename \.. 51d0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join 51e0: 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 [getBuildDirect 51f0: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b ory]$platform [
5200: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 5210: 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c ame]]].. }... 5220: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 .. proc getEx 5230: 74 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20 ternalDirectory 5240: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 5250: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 5260: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 5270: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 5280: 79 20 77 68 65 72 65 20 74 68 65 20 65 78 74 65 y where the exte 5290: 72 6e 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20 rnal binary.. 52a0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 # files 52b0: 20 61 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 are located... 52c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 52d0: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 turn [file nativ 52e0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e ename [file dirn 52f0: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ame [file dirnam 5300: 65 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d e [info binary]] 5310: 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 ]].. }..... 5320: 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 proc getBinary 5330: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a Directory {} {.. 5340: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 5350: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc 5360: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 edure returns th 5370: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 e directory wher 5380: 65 20 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 e the test appli 5390: 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 cation.. # 53a0: 20 20 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e itself (i. 53b0: 65 2e 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 e. the Eagle she 53c0: 6c 6c 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 ll) is located. 53d0: 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 This will be us 53e0: 65 64 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 ed as.. # 53f0: 20 20 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 the destina 5400: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 tion for the cop 5410: 69 65 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ied System.Data. 5420: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e SQLite native an 5430: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 5440: 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 5450: 69 65 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 ies (i.e. becaus 5460: 65 20 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 e this is one of 5470: 20 74 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d the few places. 5480: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 . # w 5490: 68 65 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c here the CLR wil 54a0: 6c 20 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 l actually find 54b0: 61 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 and load them pr 54c0: 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 operly)... 54d0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 54e0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 fo exists ::bina 54f0: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ry_directory] && 5500: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 5510: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
5520: 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79  binary_directory
5530: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
5540: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
5550: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
5560: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69  cation of the bi
5570: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68  nary directory h
5580: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
5590: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
55a0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
55b0: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e  use it verbatim.
55c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
55d0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62       return $::b 55e0: 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d inary_directory. 55f0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 5600: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 5610: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 [info binary].. 5620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 5630: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 .. proc getEx 5640: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b ternalFileName { 5650: 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 fileName } {.. 5660: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 5670: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 NOTE: Returns th 5680: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 e specified file 5690: 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 name as if it w 56a0: 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 ere located in t 56b0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 56c0: 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 directory cont 56d0: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 aining the exter 56e0: 6e 61 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 nal binaries... 56f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 5700: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 turn [file nativ 5710: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 5720: 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 [getExternalDir 5730: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d ectory]$fileNam
5740: 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  e]]..    }.....
5750: 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72     proc getBinar
5760: 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65  yFileName { file
5770: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
5780: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
5790: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
57a0: 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69  eturns the speci
57b0: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61  fied file name a
57c0: 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63  s if it were loc
57d0: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20  ated in the..
57e0: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
57f0: 79 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73  y directory, dis
5800: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65  carding any dire
5810: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  ctory informatio
5820: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20  n present..
5830: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20   #       in the
5840: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f  file name as pro
5850: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
5860: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
5870: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
5880: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a  e nativename \..
5890: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
58a0: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44  join [getBinaryD
58b0: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66  irectory] $platf 58c0: 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 orm [file tail$
58d0: 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20  fileName]]]..
58e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
58f0: 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c  getCoreBinaryFil
5900: 65 4e 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72  eName { {platfor
5910: 6d 20 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20  m ""} {standard
5920: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
5930: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
5940: 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 66  E: Returns the f
5950: 75 6c 6c 20 70 61 74 68 20 66 6f 72 20 74 68 65  ull path for the
5960: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
5970: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
5980: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5990: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63  native library c
59a0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61  ode for this pla
59b0: 74 66 6f 72 6d 2e 20 20 46 69 72 73 74 2c 20 63  tform.  First, c
59c0: 68 65 63 6b 20 61 6e 64 20 73 65 65 20 69 66 0d  heck and see if.
59d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
59e0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e  he SQLite core n
59f0: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 61  ative library ha
5a00: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c  s already been l
5a10: 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20  oaded.  Next,..
5a20: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 61 6c       #       fal
5a30: 6c 62 61 63 6b 20 74 6f 20 77 68 61 74 20 74 68  lback to what th
5a40: 65 20 66 75 6c 6c 20 70 61 74 68 20 73 68 6f 75  e full path shou
5a50: 6c 64 20 62 65 2c 20 62 61 73 65 64 20 6f 6e 20  ld be, based on
5a60: 77 68 65 74 68 65 72 20 74 68 65 0d 0a 20 20 20  whether the..
5a70: 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64     #       mixed
5a80: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 69  -mode assembly i
5a90: 73 20 62 65 69 6e 67 20 75 73 65 64 20 61 6e 64  s being used and
5aa0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
5ab0: 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20   current..
5ac0: 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d  #       platform
5ad0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
5ae0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
5af0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
5b00: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
5b10: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
5b20: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
5b30: 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
5b40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5f 53  NativeMethods _S
5b50: 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
5b60: 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  eFileName..
5b70: 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20   } fileName] ==
5b80: 30 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  0 && [string len
5b90: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e  gth $fileName] > 5ba0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 5bb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 5bc0: 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 4c 69 74 NOTE: The SQLit 5bd0: 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 e core native li 5be0: 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 brary has alread 5bf0: 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 76 69 y been loaded vi 5c00: 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 a.. # 5c10: 20 20 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 the native li 5c20: 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 64 65 72 brary pre-loader 5c30: 2e 20 20 52 65 74 75 72 6e 20 74 68 61 74 20 66 . Return that f 5c40: 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20 ile name now... 5c50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5c60: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 return$fileNa
5c70: 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  me..      }....
5c80: 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e       if {[hasRun
5c90: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
5ca0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
5cb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
5cc0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
5cd0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
5ce0: 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e  embly file name.
5cf0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5d00: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
5d10: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a  e nativename \..
5d20: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
5d30: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72  e join [getBinar
5d40: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61  yDirectory] $pla 5d50: 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 74 tform System.Dat 5d60: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a a.SQLite.dll]].. 5d70: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 5d80: 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20$standard} then
5d90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
5da0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
5db0: 74 75 72 6e 20 74 68 65 20 6e 61 74 69 76 65 2d  turn the native-
5dc0: 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51  only standard SQ
5dd0: 4c 69 74 65 20 6c 69 62 72 61 72 79 20 66 69 6c  Lite library fil
5de0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  e name...
5df0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
5e00: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  rn [file nativen
5e10: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
5e20: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67     [file join [g
5e30: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72  etBinaryDirector
5e40: 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 73 71 6c  y] $platform sql 5e50: 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 ite3.dll]].. 5e60: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 5e70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 5e80: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th 5e90: 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e e native-only in 5ea0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 terop assembly f 5eb0: 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 ile name... 5ec0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 5ed0: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 turn [file nativ 5ee0: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 ename \.. 5ef0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 [file join 5f00: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 [getBinaryDirect 5f10: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53 ory]$platform S
5f20: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c  QLite.Interop.dl
5f30: 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  l]]..      }..
5f40: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5f50: 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74   getCommonDirect
5f60: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
5f70: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5f80: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
5f90: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
5fa0: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
5fb0: 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20 20  test scripts..
5fc0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
5fd0: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20  ld be located.
5fe0: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73  By default, this
5ff0: 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74 68   just returns th
6000: 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23  e Eagle..      #
6010: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69         binary di
6020: 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20  rectory...
6030: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
6040: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d  fo exists ::comm
6050: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  on_directory] &&
6060: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
6070: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 6080: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 6090: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 60a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 60b0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f # NOTE: The lo 60c0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f cation of the co 60d0: 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 68 mmon directory h 60e0: 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 as been set;.. 60f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 6100: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e erefore, use it. 6110: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6120: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 63 return$::c
6130: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 0d  ommon_directory.
6140: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20  .      } elseif
6150: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
6160: 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79  vendor_directory
6170: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
6180: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
6190: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63   $::vendor_direc 61a0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 61b0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 61c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 61d0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 61e0: 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 6f e vendor directo 61f0: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b ry has been set; 6200: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6210: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 6220: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 6230: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6240: 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74$::vendor_direct
6250: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
6260: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
6270: 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d  s ::tcl_library]
6280: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
6290: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
62a0: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20  $::tcl_library] 62b0: 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 > 0 && \.. 62c0: 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 65 [file isdire 62d0: 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 62 ctory$::tcl_lib
62e0: 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rary]} then {..
62f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6300: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61    # NOTE: The va
6310: 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65 20  riable with the
6320: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
6330: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 69  script library i
6340: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
6350: 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65 61     set and appea
6360: 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  rs to be a real
6370: 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e 20  directory (i.e.
6380: 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20 20  not embedded..
6390: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69        #       wi
63a0: 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74 68  thin a file); th
63b0: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e  erefore, use it.
63c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
63d0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74       return $::t 63e0: 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 cl_library.. 63f0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 6400: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 6410: 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 NOTE: Fallback 6420: 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 to the directory 6430: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the 6440: 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 20 executable... 6450: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6460: 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e return [info bin 6470: 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 ary].. }.. 6480: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 6490: 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 72 c getDatabaseDir 64a0: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 ectory {} {.. 64b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 64c0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 TE: This procedu 64d0: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 re returns the d 64e0: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 irectory where t 64f0: 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65 he test database 6500: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 6510: 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 should be locat 6520: 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c ed. By default, 6530: 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 20 this just uses 6540: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 the temporary.. 6550: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 # dir 6560: 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 ectory configure 6570: 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 65 d for this syste 6580: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 6590: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 65a0: 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f 64 sts ::database_d 65b0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 65c0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 65d0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 61 g length$::data
65e0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20  base_directory]
65f0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
6600: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6610: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
6620: 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
6630: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68  base directory h
6640: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
6650: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
6660: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
6670: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
6680: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
6690: 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64  rn $::database_d 66a0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 66b0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 66c0: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 exists ::scratch 66d0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 66e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 66f0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 ing length$::sc
6700: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
6710: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
6720: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6730: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
6740: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72  ation of the scr
6750: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68  atch directory h
6760: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
6770: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
6780: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
6790: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
67a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
67b0: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69  rn $::scratch_di 67c0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 67d0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 67e0: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 return [getTemp 67f0: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 oraryPath].. 6800: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 6810: 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 6f proc getTempo 6820: 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d raryDirectory {} 6830: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 6840: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 6850: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e procedure return 6860: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 s the directory 6870: 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f 72 where the tempor 6880: 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ary files.. 6890: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 # should 68a0: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 be located. By 68b0: 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 default, this ju 68c0: 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 st uses the temp 68d0: 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 orary.. # 68e0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c 68f0: 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 onfigured for th 6900: 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 is system... 6910: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 6920: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 6930: 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 mporary_director 6940: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 6950: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 6960: 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 h$::temporary_d
6970: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74  irectory] > 0} t
6980: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
6990: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
69a0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  : The location o
69b0: 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  f the temporary
69c0: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
69d0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
69e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
69f0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
6a00: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
6a10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 6a20: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 :temporary_direc 6a30: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 6a40: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 6a50: 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 ts ::scratch_dir 6a60: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 ectory] && \.. 6a70: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 6a80: 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 length$::scratc
6a90: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  h_directory] > 0
6aa0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
6ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6ac0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
6ad0: 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68  n of the scratch
6ae0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
6af0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
6b00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6b10: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
6b20: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
6b30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $6b40: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 ::scratch_direct 6b50: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 6b60: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 e {.. ret 6b70: 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 urn [getTemporar 6b80: 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d yPath].. }. 6b90: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 6ba0: 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 72 roc getTestOverr 6bb0: 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b idesPreamble { { 6bc0: 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22 extraVarNames "" 6bd0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set 6be0: 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d varNames [list] 6bf0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 6c00: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 # NOTE: If av 6c10: 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77 ailable, start w 6c20: 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c ith the master l 6c30: 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72 ist of test over 6c40: 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20 ride.. # 6c50: 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a variables... 6c60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 6c70: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 6c80: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 ::test_overrides 6c90: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 6ca0: 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 [llength$::te
6cb0: 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20  st_overrides] >
6cc0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
6cd0: 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
6ce0: 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74  varNames $::test 6cf0: 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 _overrides.. 6d00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 6d10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 6d20: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 requested by ou 6d30: 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e r caller, add an 6d40: 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 y additional var 6d50: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 iable.. # 6d60: 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f names to co 6d70: 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 py now... # 6d80: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 .. if {[lle 6d90: 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 4e 61 ngth$extraVarNa
6da0: 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  mes] > 0} then {
6db0: 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c  ..        eval l
6dc0: 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20  append varNames
6dd0: 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a  $extraVarNames.. 6de0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 6df0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6e00: 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 69 : Build the scri 6e10: 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 pt fragment to b 6e20: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 72 e returned by pr 6e30: 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 ocessing each.. 6e40: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 6e50: 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 iable name and a 6e60: 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65 dding the necece 6e70: 73 73 61 72 79 20 73 63 72 69 70 74 20 66 72 61 ssary script fra 6e80: 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 gments for.. 6e90: 20 20 23 20 20 20 20 20 20 20 65 61 63 68 20 6f # each o 6ea0: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ne... #.. 6eb0: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 set result " 6ec0: 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 ".... forea 6ed0: 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e ch varName$varN
6ee0: 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
6ef0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
6f00: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 61  E: Build the qua
6f10: 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61  lified global va
6f20: 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20  riable name...
6f30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6f40: 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65   set fullVarName
6f50: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20   [appendArgs ::
6f60: 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  $varName].... 6f70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6f80: 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 # NOTE: Does the 6f90: 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 20 variable exist 6fa0: 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 in this interpre 6fb0: 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 ter context?.. 6fc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6fd0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 6fe0: 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d s$fullVarName]}
6ff0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
7000: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
7010: 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61  # NOTE: Append a
7020: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
7030: 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74   to the result t
7040: 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74  hat will correct
7050: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ly..          #
7060: 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63        copy any c
7070: 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74  ontained value t
7080: 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70  o another interp
7090: 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a  reter context...
70a0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
70b0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65         append re
70c0: 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24  sult \n "set " $70d0: 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b fullVarName " \{ 70e0: 22 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e " [set$fullVarN
70f0: 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20  ame] \}..
7100: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
7110: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7120: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65 73  NOTE: If the res
7130: 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ult contains one
7140: 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20   or more script
7150: 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e  fragments, appen
7160: 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20  d a..      #
7170: 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20     newline...
7180: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
7190: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $71a0: 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 result] > 0} the 71b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app 71c0: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 end result \n.. 71d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 71e0: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
71f0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
7200: 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50  oc getAppDomainP
7210: 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69  reamble { {prefi
7220: 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22  x ""} {suffix ""
7230: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
7240: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
7250: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
7260: 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75  urns a test setu
7270: 70 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  p script fragmen
7280: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a  t suitable for..
7290: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76        #       ev
72a0: 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69  aluation by an i
72b0: 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74  nterpreter creat
72c0: 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65  ed in an isolate
72d0: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  d application..
72e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d       #       dom
72f0: 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74  ain.  The script
7300: 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20   fragment being
7310: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65  returned will be
7320: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a   surrounded by..
7330: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
7340: 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66  e prefix and suf
7350: 66 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67  fix "script frag
7360: 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64  ments" specified
7370: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d   by our caller,.
7380: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
7390: 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69  f any.  The enti
73a0: 72 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20  re script being
73b0: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65  returned will be
73c0: 20 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61   substituted via
73d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
73e0: 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20  [subst], in the
73f0: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63  context of our c
7400: 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65  aller, before be
7410: 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20  ing returned...
7420: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69       #       Thi
7430: 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73  s step is necess
7440: 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65  ary so that some
7450: 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74   limited context
7460: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20   information,..
7470: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69       #       pri
7480: 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74  marily related t
7490: 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69  o the testing di
74a0: 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62  rectories, can b
74b0: 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20  e transferred..
74c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
74d0: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter
74e0: 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20  in the isolated
74f0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61  application doma
7500: 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20  in, making it..
7510: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c       #       abl
7520: 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c  e to successfull
7530: 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74  y run tests that
7540: 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20   require one or
7550: 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  more of the..
7560: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73     #       files
7570: 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74   in one of the t
7580: 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69  esting directori
7590: 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f  es.  Callers sho
75a0: 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20  uld keep in..
75b0: 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20     #       mind
75c0: 74 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63  that the test sc
75d0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65  ript fragment be
75e0: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e  ing returned can
75f0: 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20  not rely on..
7600: 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73     #       any s
7610: 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72  cript library pr
7620: 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72  ocedures that ar
7630: 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62  e not provided b
7640: 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  y the Eagle..
7650: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61     #       libra
7660: 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e  ry package (i.e.
7670: 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20   "init.eagle"),
7680: 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20  including those
7690: 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20  provided by..
76a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45     #       the E
76b0: 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67  agle test packag
76c0: 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69  e, unless the fi
76d0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
76e0: 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20  em is loaded..
76f0: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75      #       manu
7700: 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74  ally via some ot
7710: 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65  her mechanism (e
7720: 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67  .g. by including
7730: 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20   appropriate..
7740: 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63      #       [pac
7750: 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72  kage require] or
7760: 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e   [source] comman
7770: 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78  ds in the prefix
7780: 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20   or suffix..
7790: 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74    #       script
77a0: 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c   fragments).  Al
77b0: 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65  so, all variable
77c0: 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20   references and
77d0: 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20  all nested..
77e0: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e    #       comman
77f0: 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69  ds (i.e. those i
7800: 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
7810: 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  s) contained in
7820: 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20  the final..
7830: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20   #       script
7840: 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e  fragment will en
7850: 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75  d up being evalu
7860: 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74  ated in the cont
7870: 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ext of the..
7880: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e    #       callin
7890: 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e  g interpreter an
78a0: 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74  d not the target
78b0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65   interpreter cre
78c0: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20  ated in the..
78d0: 20 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61     #       isola
78e0: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ted application
78f0: 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68  domain unless th
7900: 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61  e dollar signs a
7910: 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20  nd/or square..
7920: 20 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63      #       brac
7930: 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c  kets are special
7940: 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62  ly quoted with b
7950: 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20  ackslashes...
7960: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
7970: 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c  rn [uplevel 1 [l
7980: 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e  ist subst [appen
7990: 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d  dArgs $prefix {. 79a0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 . if {[ha 79b0: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e sRuntimeOption n 79c0: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a ative]} then {.. 79d0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 79e0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 invoke Interpre 79f0: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 ter.GetActive Ad 7a00: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e dRuntimeOption n 7a10: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 7d ative.. } 7a20: 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 54 65 .. } [getTe 7a30: 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d stOverridesPream 7a40: 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 20 74 ble [list path t 7a50: 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 est_channel]]$s
7a60: 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d  uffix]]]..    }.
7a70: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
7a80: 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65  CopyExternalFile
7a90: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61   { fileName {pla
7aa0: 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69  tform ""} {newFi
7ab0: 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  leName ""} } {..
7ac0: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
7ad0: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78 74  FileName [getExt
7ae0: 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24 66  ernalFileName $f 7af0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... 7b00: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 7b10: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
7b20: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
7b30: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 7b40: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 7b50: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 7b60: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 7b70: 70 70 65 64 20 63 6f 70 79 69 6e 67 20 65 78 74 pped copying ext 7b80: 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22 22 20 24 ernal file \""$
7b90: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
7ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
7bb0: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
7bc0: 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20  xist\n"]....
7bd0: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20      return..
7be0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
7bf0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
7c00: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20  $newFileName] > 7c10: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 7c20: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil 7c30: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary 7c40: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c FileName$newFil
7c50: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] 7c60: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 7c70: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta 7c80: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge 7c90: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 7ca0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66$fileName $platf 7cb0: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d orm].. }... 7cc0: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 . set targe 7cd0: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 tDirectory [file 7ce0: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 dirname$target
7cf0: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  FileName]....
7d00: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
7d10: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66  .        if {![f
7d20: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67  ile exists $targ 7d30: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 etDirectory]} th 7d40: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 7d50: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 file mkdir$targ
7d60: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  etDirectory..
7d70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
7d80: 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65  file copy -force
7d90: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 7da0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
7db0: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d  ..      }] == 0}
7dc0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
7dd0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 7de0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 7df0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 7e00: 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 "---- copied e 7e10: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f xternal file fro 7e20: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
7e30: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22  eName "\" to \""
7e40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7e50: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName 7e60: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e 7e70: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 7e80: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
7e90: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
7ea0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7eb0: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to
7ec0: 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69  copy external fi
7ed0: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 7ee0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. 7ef0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 "\" t 7f00: 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c o \""$targetFil
7f10: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
7f20: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
7f30: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79      proc tryCopy
7f40: 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c  BinaryFile { fil
7f50: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
7f60: 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65  ""} {newFileName
7f70: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
7f80: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61  set sourceFileNa
7f90: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  me [getBinaryFil
7fa0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20  eName $fileName 7fb0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20$platform]....
7fc0: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
7fd0: 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c  xists $sourceFil 7fe0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 7ff0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
8000: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
8010: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
8020: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
8030: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62  kipped copying b
8040: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $8050: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ 8060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ 8070: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e 8080: 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 xist\n"].... 8090: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. 80a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 80b0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 80c0: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20$newFileName] >
80d0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
80e0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
80f0: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46  eName [getBuildF
8100: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65  ileName $newFile 8110: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
8120: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
8130: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72  .        set tar
8140: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  getFileName [get
8150: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66  BuildFileName $f 8160: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
8170: 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  m]..      }....
8180: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44       set targetD
8190: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
81a0: 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69  irname $targetFi 81b0: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 81c0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 81d0: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c if {![fil 81e0: 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 e exists$target
81f0: 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  Directory]} then
8200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   {..          fi
8210: 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74  le mkdir $target 8220: 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. 8230: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 }.. fi 8240: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
8250: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $8260: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. 8270: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t 8280: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 8290: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
82a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
82b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
82c0: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e  "---- copied bin
82d0: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22  ary file from \"
82e0: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 82f0: 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a e "\" to \"" \.. 8300: 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72$tar
8310: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  getFileName \"\n
8320: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
8330: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
8340: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 8350: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 8360: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 8370: 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 - failed to copy 8380: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f binary file fro 8390: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
83a0: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
83b0: 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20       "\" to \""
83c0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName 83d0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a \"\n].. }.. 83e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 83f0: 6f 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 oc tryCopyBuildF 8400: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b ile { fileName { 8410: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 platform ""} {ne 8420: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 wFileName ""} } 8430: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 {.. set sou 8440: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 rceFileName [get 8450: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 BuildFileName$f
8460: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 8470: 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b m].... if { 8480: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 ![file exists$s
8490: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20  ourceFileName]}
84a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
84b0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 84c0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 84d0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 84e0: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 "---- skipped c 84f0: 6f 70 79 69 6e 67 20 62 75 69 6c 64 20 66 69 6c opying build fil 8500: 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c e \""$sourceFil
8510: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
8520: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
8530: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
8540: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
8550: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
8560: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
8570: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e  length $newFileN 8580: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { 8590: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta 85a0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge 85b0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 85c0: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c$newFileName $pl 85d0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d atform].. } 85e0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 85f0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e set targetFileN 8600: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi 8610: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
8620: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. 8630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 }.... se 8640: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 t targetDirector 8650: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 y [file dirname 8660: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d$targetFileName]
8670: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
8680: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
8690: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
86a0: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  s $targetDirecto 86b0: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ry]} then {.. 86c0: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 file mkdi 86d0: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f r$targetDirecto
86e0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  ry..        }..
86f0: 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79         file copy
8700: 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46   -force $sourceF 8710: 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 ileName$targetF
8720: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d  ileName..      }
8730: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
8740: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 8750: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 8760: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 8770: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 8780: 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69 6c 65 opied build file 8790: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
87a0: 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f  eFileName "\" to
87b0: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
87c0: 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e      $targetFileN 87d0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 87e0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 87f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
8800: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
8810: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
8820: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
8830: 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 20 66   to copy build f
8840: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f  ile from \"" $so 8850: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a urceFileName \.. 8860: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" 8870: 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 to \""$targetFi
8880: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
8890: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
88a0: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c  .    proc tryDel
88b0: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 7b 20  eteBinaryFile {
88c0: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f  fileName {platfo
88d0: 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  rm ""} } {..
88e0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
88f0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
8900: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
8910: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
8920: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
8930: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 8940: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 8950: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
8960: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
8970: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
8980: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c  ---- skipped del
8990: 65 74 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c  eting binary fil
89a0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 89b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 89c0: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 \", it does not 89d0: 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 exist\n"].... 89e0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 return.. 89f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 8a00: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d 8a10: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
8a20: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
8a30: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 8a40: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 8a50: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 8a60: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d 8a70: 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 eleted binary fi 8a80: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
8a90: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20   \"\n]..      }
8aa0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
8ab0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 8ac0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 8ad0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 8ae0: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f "---- failed to 8af0: 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 delete binary f 8b00: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
8b10: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
8b20: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
8b30: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75  proc tryDeleteBu
8b40: 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61  ildFile { fileNa
8b50: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
8b60: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
8b70: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69  fileName [getBui
8b80: 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ldFileName $file 8b90: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
8ba0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
8bb0: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 8bc0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 8bd0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
8be0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
8bf0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
8c00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
8c10: 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62  ipped deleting b
8c20: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66  uild file \"" $f 8c30: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. 8c40: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 "\", it d 8c50: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 oes not exist\n" 8c60: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 ].... ret 8c70: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... 8c80: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 8c90: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
8ca0: 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20  ileName}] == 0}
8cb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8cc0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 8cd0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 8ce0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 8cf0: 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 "---- deleted b 8d00: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 uild file \""$f
8d10: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
8d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
8d30: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 8d40: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 8d50: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 8d60: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa 8d70: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 iled to delete b 8d80: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 uild file \""$f
8d90: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
8da0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
8db0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f  ..    proc tryCo
8dc0: 70 79 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c  pyAssembly { fil
8dd0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
8de0: 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7d  ""} {pdb true} }
8df0: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70   {..      tryCop
8e00: 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65  yBuildFile $file 8e10: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a Name$platform..
8e20: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 62  ..      if {$pdb 8e30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8e40: 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 tryCopyBuildFi 8e50: 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c le [appendArgs \ 8e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 8e70: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 ile rootname$fi
8e80: 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70  leName] .pdb] $p 8e90: 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 7d latform.. } 8ea0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 8eb0: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 proc tryDeleteAs 8ec0: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d sembly { fileNam 8ed0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 8ee0: 7b 70 64 62 20 74 72 75 65 7d 20 7d 20 7b 0d 0a {pdb true} } {.. 8ef0: 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 tryDeleteB 8f00: 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e inaryFile$fileN
8f10: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 0d  ame $platform... 8f20: 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d . if {$pdb}
8f30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8f40: 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79   tryDeleteBinary
8f50: 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73  File [appendArgs
8f60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8f70: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24  [file rootname $8f80: 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 fileName] .pdb] 8f90: 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20$platform..
8fa0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
8fb0: 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73    proc tryLoadAs
8fc0: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d  sembly { fileNam
8fd0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
8fe0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
8ff0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
9000: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 9010: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
9020: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
9030: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  tch {..        s
9040: 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a  et assembly [obj
9050: 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79  ect load -loadty
9060: 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24  pe File -alias $9070: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. 9080: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { 9090: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 90a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 # NOTE: Now 90b0: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess 90c0: 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 ary test constra 90d0: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d int... #. 90e0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 90f0: 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f traint [file roo 9100: 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c tname [file tail 9110: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a$fileName]]....
9120: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
9130: 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20     # NOTE: Grab
9140: 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  the image runtim
9150: 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74  e version from t
9160: 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61  he assembly beca
9170: 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  use..        #
9180: 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 65 73       several tes
9190: 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61  ts rely on it ha
91a0: 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76  ving a certain v
91b0: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  alue...        #
91c0: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
91d0: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
91e0: 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  rgs [file tail $91f0: 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 fileName] _ \.. 9200: 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 73 73 [$ass
9210: 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69  embly ImageRunti
9220: 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20  meVersion]]....
9230: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9240: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
9250: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f   the full path o
9260: 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c  f the loaded fil
9270: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
9280: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66         return $f 9290: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } 92a0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 92b0: 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "".. }..... 92c0: 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65 proc isSQLite 92d0: 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 Ready {} {.. 92e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 92f0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 9300: 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f e must return no 9310: 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 n-zero only if t 9320: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 he SQLite native 9330: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9340: 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 20 library and the 9350: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 9360: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d te managed assem 9370: 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a bly are loaded.. 9380: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 9390: 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 d ready for use 93a0: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 93b0: 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 e. Currently, t 93c0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 his procedure.. 93d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho 93e0: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e uld be called on 93f0: 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b 74 72 ly after the [tr 9400: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 yLoadAssembly] p 9410: 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20 rocedure has.. 9420: 20 20 20 20 23 20 20 20 20 20 20 20 62 65 65 6e # been 9430: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 called to probe 9440: 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e for the System. 9450: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 Data.SQLite mana 9460: 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 ged assembly.. 9470: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 9480: 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c the [checkForSQL 9490: 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68 ite] procedure h 94a0: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 as been called t 94b0: 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 o probe for.. 94c0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S 94d0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 QLite native lib 94e0: 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c rary; otherwise, 94f0: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure 9500: 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 will simply.. 9510: 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 # alway 9520: 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a s return zero... 9530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 9540: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 eturn [expr {.. 9550: 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons 9560: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 traint System.Da 9570: 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 ta.SQLite] && [h 9580: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 aveConstraint SQ 9590: 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d Lite].. }]. 95a0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 95b0: 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 6e 65 roc matchMachine 95c0: 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d { platform } {. 95d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 95e0: 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 # NOTE: An empty 95f0: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 string for the 9600: 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 platform means t 9610: 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 hat the build is 9620: 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 not.. # 9630: 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 [primarily] 9640: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 a native build; 9650: 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c therefore, it al 9660: 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 ways matches... 9670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9680: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 9690: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30$platform] == 0
96a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
96b0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
96c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
96d0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
96e0: 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66   Does the specif
96f0: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74  ied platform mat
9700: 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72  ch up to the cur
9710: 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20  rent process?..
9720: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
9730: 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b   {$platform eq [ 9740: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 machineToPlatfor 9750: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 m$::tcl_platfor
9760: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65  m(machine)]} the
9770: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
9780: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
9790: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
97a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
97b0: 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f  specified platfo
97c0: 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rm does not matc
97d0: 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c  h up with the pl
97e0: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20  atform..      #
97f0: 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75        for the cu
9800: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
9810: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
9820: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
9830: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
9840: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75  checkForSQLiteBu
9850: 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ilds { channel {
9860: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20  select false} }
9870: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
9880: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
9890: 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 62  for every possib
98a0: 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61  le valid combina
98b0: 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75  tion of values u
98c0: 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20  sed when..
98d0: 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67  #       locating
98e0: 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f   out the build o
98f0: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c  utput directory,
9900: 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76   showing each av
9910: 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23  ailable..      #
9920: 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 72         build var
9930: 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65  iation along the
9940: 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   way...      #..
9950: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
9960: 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65  tive [list false
9970: 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20   true] {..
9980: 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b    foreach year [
9990: 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b  getBuildYears] {
99a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
99b0: 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ach configuratio
99c0: 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69  n [getBuildConfi
99d0: 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20  gurations] {..
99e0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
99f0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
9a00: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20   Figure out the
9a10: 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20  effective build
9a20: 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20  platform.  This
9a30: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..
9a40: 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e  #       based on
9a50: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not
9a60: 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61  a [primarily] na
9a70: 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20  tive build..
9a80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9a90: 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  is being used.
9aa0: 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20  For [primarily]
9ab0: 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64  non-native build
9ac0: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..
9ad0: 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69 6c  #       this wil
9ae0: 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74  l be an empty st
9af0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ring...
9b00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
9b10: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b    set platform [
9b20: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d  getBuildPlatform
9b30: 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20   $native].... 9b40: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
9b50: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
9b60: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
9b70: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
9b80: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
9b90: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
9ba0: 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a  ld \"" [expr \..
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9bc0: 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69  {$native ? "nati 9bd0: 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 ve/" : ""}] [exp 9be0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt 9bf0: 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h \.. 9c00: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20$platform]
9c10: 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67  > 0 ? [appendArg
9c20: 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a  s $platform /] : 9c30: 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 ""}]$year \..
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9c50: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   $configuration 9c60: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 "\"... "].... 9c70: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 9c80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9c90: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 Build the fully 9ca0: 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 qualified direct 9cb0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 ory where the ne 9cc0: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 cessary.. 9cd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com 9ce0: 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 ponents for Syst 9cf0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 em.Data.SQLite s 9d00: 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d hould be found.. 9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 9d20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 9d30: 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 directory [joinB 9d40: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e uildDirectory$n
9d50: 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20  ative \..
9d60: 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
9d70: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d  ldBaseDirectory]
9d80: 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d   $year$platform
9d90: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d   $configuration] 9da0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 9db0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 9dc0: 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 NOTE: Do the ne 9dd0: 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78 cessary files ex 9de0: 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c ist? Currently, 9df0: 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d no other steps. 9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # 9e10: 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74 are taken t 9e20: 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62 75 o verify this bu 9e30: 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20 ild is actually 9e40: 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 viable... 9e50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9e60: 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 if {[isBuild 9e70: 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 Available$nativ
9e80: 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74  e $directory]} t 9e90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 9ea0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9eb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 # NOTE: Wh 9ec0: 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d en in "select" m 9ed0: 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c ode, automatical 9ee0: 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 ly select the fi 9ef0: 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rst.. 9f00: 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c # avail 9f10: 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79 able build of Sy 9f20: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 9f30: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e and then return 9f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9f50: 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74 # immediat 9f60: 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ely... 9f70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 9f80: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 if {$select
9f90: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e   && [matchMachin
9fa0: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  e $platform]} th 9fb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9fc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9fd0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 9fe0: 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 Manually overri 9ff0: 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 de all the build a000: 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 directory selec a010: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 tion.. a020: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re a030: 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69 lated test setti a040: 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 ngs in order to a050: 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 force this build a060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a070: 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 # of Sys a080: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite a090: 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 to be used... a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a0c0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e object invoke In a0d0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct a0e0: 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 ive [expr {$nati
a0f0: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ve ? \..
a100: 20 20 20 20 20 20 20 20 20 20 20 20 22 41 64 64              "Add
a110: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a  RuntimeOption" :
a120: 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f   "RemoveRuntimeO
a130: 70 74 69 6f 6e 22 7d 5d 20 20 6e 61 74 69 76 65  ption"}]  native
a140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
a150: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79      set ::test_y
a160: 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20  ear $year.. a170: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a set : a180: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 :test_platform$
a190: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
a1a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
a1b0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
a1c0: 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  on $configuratio a1d0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n.... a1e0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
a1f0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
a200: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a210: 20 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c         "yes, sel
a220: 65 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b  ected (" [expr {
a230: 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76  $native ? "nativ a240: 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 e/" : ""}] \.. a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a260: 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 [expr {[string a270: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
a280: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64  m] > 0 ? [append
a290: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61              $pla a2b0: 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 tform /] : ""}] a2c0: 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75$year / $configu a2d0: 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d ration ")\n"]... a2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . a2f0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. a300: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el a310: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. a320: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
a330: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20  nnel yes\n..
a340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
a350: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
a360: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
a370: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel a380: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 no\n.. a390: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } a3a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. a3b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re a3c0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. a3d0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c a3e0: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c heckForSQLiteRel a3f0: 65 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 eases { channel a400: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d {select false} } a410: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. a420: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check a430: 20 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 for past releas a440: 65 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 es of System.Dat a450: 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 a.SQLite in the a460: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. a470: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e # contain a480: 65 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 ed in the "Syste a490: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 m.Data.SQLite" e a4a0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 nvironment varia a4b0: 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 ble, if.. # a4c0: 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d present.. a4d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. a4e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists a4f0: 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 ::env(System.Da a500: 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c ta.SQLite)] && \ a510: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str a520: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e ing length$::en
a530: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  v(System.Data.SQ
a540: 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e  Lite)] > 0} then
a550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
a560: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
a570: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
a580: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f  ualified directo
a590: 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63  ry where the nec
a5a0: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20  essary..
a5b0: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e  #       componen
a5c0: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ts for System.Da
a5d0: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64  ta.SQLite should
a5e0: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20   be found...
a5f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
a600: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69  et directory [fi
a610: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
a620: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
a630: 20 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53          $::env(S a640: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a650: 65 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 e) [getReleaseVe a660: 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 rsion]]].... a670: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
a680: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
a690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
a6a0: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
a6b0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
a6c0: 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20  ite release \""
a6d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $a6e0: 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e directory "\"... a6f0: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 "].... i a700: 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 f {[isReleaseAva a710: 69 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 ilable$director
a720: 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65  y platform]} the
a730: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
a740: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
a750: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20  h $platform] == a760: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. a770: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf a780: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 orm unknown.. a790: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... a7a0: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 if {$selec
a7b0: 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69  t && [matchMachi
a7c0: 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74  ne $platform]} t a7d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a7e0: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 set ::build_d a7f0: 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 irectory$direct
a800: 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ory....
a810: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe a820: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 l [appendArgs "y a830: 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 es, selected (" a840: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
a850: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
a860: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
a870: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
a880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
a890: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app a8a0: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 endArgs "yes (" a8b0: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
a8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
a8d0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
a8e0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
a8f0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. a900: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore a910: 61 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 ach path [lsort a920: 2d 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c -decreasing [fil a930: 65 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 e list$director
a940: 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20  y *]] {..
a950: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
a960: 78 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20  xists $path] && a970: 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector a980: 79 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b y$path]} then {
a990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a9a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ a9b0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a9d0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f a9e0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S a9f0: 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 QLite release \" aa00: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. aa10: 20 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22$path "\"
aa20: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
aa30: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52          if {[isR
aa40: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20  eleaseAvailable
aa50: 24 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d  $path platform]} aa60: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. aa70: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st aa80: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
aa90: 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65  tform] == 0} the
aaa0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
aab0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
aac0: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20  orm unknown..
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
aae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
aaf0: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && ab00: 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 [matchMachine$
ab10: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
ab20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
ab30: 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64       set ::build
ab40: 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68  _directory $path ab50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... ab60: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
ab70: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
ab80: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20   "yes, selected
ab90: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c  (" $platform ")\ aba0: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... abb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return abc0: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. abd0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 abf0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
ac00: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
ac10: 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  s (" $platform " ac20: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 )\n"].. ac30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. ac40: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { ac50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ac60: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
ac70: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20   no\n..
ac80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
ac90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
aca0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
acb0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
acc0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch acd0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg ace0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. acf0: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 "---- environme ad00: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 nt variable \"Sy ad10: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite ad20: 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 \" is not " \.. ad30: 20 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c "set, ad40: 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 skipping check ad50: 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c for releases...\ ad60: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a n"].. }.... ad70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal ad80: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... ad90: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS ada0: 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 QLiteLibrary { c adb0: 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 hannel } {.. adc0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
add0: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
ade0: 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20  for SQLite core
adf0: 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a  library... "....
ae00: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
ae10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
ae20: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
ae30: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
ae40: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
ae50: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
ae60: 4c 69 74 65 33 20 53 51 4c 69 74 65 56 65 72 73  Lite3 SQLiteVers
ae70: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72  ion..      } ver
ae80: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
ae90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
aea0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
aeb0: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
aec0: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73  rned version was
aed0: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d   null.  If so, m
aee0: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20  ake it easy..
aef0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
af00: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
af10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
af20: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve af30: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the af40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s af50: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. af60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... af70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. af80: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt af90: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo afa0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden afb0: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S afc0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # afd0: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr afe0: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. aff0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca b000: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. b010: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - b020: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic b030: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b040: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ b050: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c Lite.SQLite3 SQL b060: 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 iteSourceId.. b070: 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d } sourceId] b080: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b090: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. b0a0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c # NOTE: We fail b0b0: 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 ed to query the b0c0: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id b0d0: 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 entifier... b0e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b0f0: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 set sourceId u b100: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. b110: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. b120: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: b130: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret b140: 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 urned Fossil sou b150: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 rce identifier w b160: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 as null. If.. b170: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so b180: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 , make it easy t b190: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 o spot... b1a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { b1b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
b1c0: 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
b1d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b1e0: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
b1f0: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
b200: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b210: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
b220: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  , the SQLite cor
b230: 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72  e library appear
b240: 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c  s to be availabl
b250: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
b260: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
b270: 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20  aint SQLite....
b280: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch b290: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg b2a0: 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 s "yes ("$versi
b2b0: 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64  on " " $sourceId b2c0: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ")\n"].. } b2d0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. b2e0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
b2f0: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  no\n..      }..
b300: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
b310: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
b320: 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65  Interop { channe
b330: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
b340: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- b350: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S b360: 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as b370: 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... b380: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch b390: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec b3a0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags b3b0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. b3c0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System b3d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL b3e0: 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 ite3 InteropVers b3f0: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 ion.. } ver b400: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then b410: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. b420: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C b430: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu b440: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 rned version was b450: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d null. If so, m b460: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 ake it easy.. b470: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to b480: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # b490: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s b4a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
b4b0: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
b4c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
b4d0: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
b4e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
b4f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b500: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
b510: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
b520: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
b530: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53  tifier for the S
b540: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  QLite..        #
b550: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
b560: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ary...        #.
b570: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
b580: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
b590: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
b5a0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
b5b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b5c0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
b5d0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
b5e0: 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20  eropSourceId..
b5f0: 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64        } sourceId
b600: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
b610: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b620: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69    # NOTE: We fai
b630: 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  led to query the
b640: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69   Fossil source i
b650: 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20  dentifier...
b660: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b670: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
b680: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
b690: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
b6a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
b6b0: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65   Check if the re
b6c0: 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f  turned Fossil so
b6d0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
b6e0: 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20  was null.  If..
b6f0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
b700: 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20  o, make it easy
b710: 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20  to spot...
b720: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
b730: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
b740: 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d  $sourceId] == 0} b750: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b760: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId b770: 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d null.. }. b780: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. b790: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye b7a0: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e s, the SQLite in b7b0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 terop assembly a b7c0: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 ppears to be ava b7d0: 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 ilable... b7e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC b7f0: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 onstraint SQLite b800: 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20 20 Interop.... b810: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
b820: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79  l [appendArgs "y
b830: 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22  es (" $version " b840: 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c "$sourceId ")\
b850: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  n"]..      } els
b860: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
b870: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n b880: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } b890: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 ..... proc ch b8a0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 eckForSQLiteDefi b8b0: 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 neConstant { cha b8c0: 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 nnel name } {.. b8d0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
b8e0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
b8f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d  \..          "--
b900: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
b910: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b920: 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  te define consta
b930: 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a  nt \"" $name \.. b940: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e "\"... b950: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 "].... if b960: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. b970: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke b980: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl b990: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. b9a0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ b9b0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 Lite.SQLite3 Def b9c0: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 ineConstants.. b9d0: 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 } defineCons b9e0: 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tants] == 0} the b9f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if ba00: 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 {[lsearch -exact ba10: 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 -nocase$define
ba20: 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d  Constants $name] ba30: 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a != -1} then {.. ba40: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. ba50: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 # NOTE: Y ba60: 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 es, this define ba70: 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 constant was ena ba80: 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 bled when the ma ba90: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 naged.. baa0: 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c # assembl bab0: 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d y was compiled.. bac0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. bad0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst bae0: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg baf0: 73 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 s defineConstant bb00: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL bb10: 69 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 ite.$name]....
bb20: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $bb30: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 channel yes\n.. bb40: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. bb50: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs bb60: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a$channel no\n..
bb70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
bb80: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
bb90: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe bba0: 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 l error\n.. bbb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... bbc0: 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 proc getDateTi bbd0: 6d 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 meFormat {} {.. bbe0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # bbf0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce bc00: 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 dure simply retu bc10: 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 rns the "default bc20: 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 " DateTime forma bc30: 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 t used.. # bc40: 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 by the tes bc50: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... bc60: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in bc70: 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 fo exists ::date bc80: 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 time_format] && bc90: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st bca0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
bcb0: 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
bcc0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
bcd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
bce0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
bcf0: 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  he manually over
bd00: 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72  ridden value for
bd10: 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   the DateTime fo
bd20: 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  rmat...        #
bd30: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
bd40: 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72   $::datetime_for bd50: 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 mat.. } els bd60: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. bd70: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: bd80: 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 Return an ISO860 bd90: 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 1 DateTime forma bda0: 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 t compatible wit bdb0: 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 h SQLite,.. bdc0: 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 # Syste bdd0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 m.Data.SQLite, a bde0: 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 nd suitable for bdf0: 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 round-tripping w be00: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ith the.. be10: 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d # DateTim be20: 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 e class of the f be30: 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 ramework. If th be40: 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e is value is chan be50: 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ged,.. # be60: 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 various te be70: 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 sts may fail... be80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. be90: 20 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d return "yyyy-M bea0: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 M-dd HH:mm:ss.FF beb0: 46 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d FFFFFK".. } bec0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... bed0: 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 proc enumerableT bee0: 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 oList { enumerab bef0: 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 le } {.. se bf00: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d t result [list]. bf10: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st bf20: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 ring length$enu
bf30: 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c  merable] == 0 ||
bf40: 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20   $enumerable eq bf50: 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a "null"} then {.. bf60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
bf70: 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d  result..      }.
bf80: 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  ...      object
bf90: 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69  foreach -alias i
bfa0: 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20  tem $enumerable bfb0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ bfc0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 string length$i
bfd0: 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tem] > 0} then {
bfe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  ..          lapp
bff0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65  end result [$ite c000: 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 m ToString].. c010: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. c020: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return c030: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
c040: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63  ...    proc catc
c050: 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72  hAndReturn { scr
c060: 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20  ipt {stackTrace
c070: 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74  false} {strict t
c080: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
c090: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
c0a0: 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63   Evaluate the sc
c0b0: 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79  ript provided by
c0c0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74   our caller in t
c0d0: 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20  heir context,..
c0e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70       #       cap
c0f0: 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20  turing both the
c100: 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72  result and the r
c110: 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...
c120: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
c130: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c  code [catch {upl
c140: 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20  evel 1 $script} c150: 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 result].... c160: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE c170: 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 : Did the script c180: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our c190: 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 caller NOT rais c1a0: 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 e an error?.. c1b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { c1c0: 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65$strict && $code c1d0: 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 == 0 || !$stric
c1e0: 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d  t && $code != 1} c1f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c200: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO c210: 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 TE: Success. Re c220: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with c230: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code c240: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e and the result. c250: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. c260: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis c270: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d t$code $result] c280: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif c290: 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 {$stackTrace} t
c2a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
c2b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
c2c0: 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20  : Failure.  Our
c2d0: 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66  caller wants a f
c2e0: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
c2f0: 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c  (if applicable),
c300: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
c310: 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20    return a list
c320: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
c330: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73  code and the res
c340: 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20  ult verbatim...
c350: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
c360: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $c370: 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 code$result]..
c380: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
c390: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
c3a0: 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
c3b0: 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64  e.  Our caller d
c3c0: 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66  oes not want a f
c3d0: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
c3e0: 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20  (if..        #
c3f0: 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29       applicable)
c400: 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20  , return a list
c410: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
c420: 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d  code, the error.
c430: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
c440: 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e   code for the in
c450: 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74  terpreter, and t
c460: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
c470: 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20   up to the..
c480: 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e      #       poin
c490: 74 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63  t where the stac
c4a0: 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73  k trace should s
c4b0: 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  tart...        #
c4c0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e  ..        set in
c4d0: 64 65 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73  dex [string firs
c4e0: 74 20 22 20 20 20 61 74 20 22 20 24 72 65 73 75  t "   at " $resu c4f0: 6c 74 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c lt]; # HACK: Rel c500: 69 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 iable?.... c510: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 return [list$
c520: 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64  code $::errorCod c530: 65 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 e [expr {$index
c540: 21 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20  != -1 ? \..
c550: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74         [string t
c560: 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  rim [string rang
c570: 65 20 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64  e $result 0$ind
c580: 65 78 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d  ex]] : $result}] c590: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. c5a0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c c5b0: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 ompileCSharpWith c5c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. c5d0: 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 text memory symb c5e0: 6f 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c ols strict resul c5f0: 74 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 tsVarName errors c600: 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 VarName fileName c610: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 s.. a c620: 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 rgs } {.. # c630: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: c640: 53 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 Since we are goi c650: 6e 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d ng to use this m c660: 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 ethod name a lot c670: 2c 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 , assign it to a c680: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # c690: 76 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d variable first.. c6a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c6b0: 73 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 set add Referenc c6c0: 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 edAssemblies.Add c6d0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. c6e0: 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 # NOTE: Creat c6f0: 65 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 e the base comma c700: 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 nd to evaluate a c710: 6e 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 nd add the prope c720: 72 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 rty settings.. c730: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that c740: 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 are almost alwa c750: 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 ys needed by our c760: 20 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 unit tests (i.e c770: 2e 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 . the System.. c780: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and c790: 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 System.Data asse c7a0: 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 mbly references) c7b0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. c7c0: 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c set command [l c7d0: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. c7e0: 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 compileCSharp$
c7f0: 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79  text $memory$sy
c800: 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65  mbols $strict re c810: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a sults errors \.. c820: 20 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53$add S
c830: 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53  ystem.dll $add S c840: 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 ystem.Data.dll$
c850: 61 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73  add System.Trans
c860: 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20  actions.dll \..
c870: 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy c880: 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d stem.Xml.dll]... c890: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c8a0: 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 # NOTE: Add all c8b0: 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c the provided fil c8c0: 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d e names as assem c8d0: 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d bly references.. c8e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c8f0: 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName c900: 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20$fileNames {..
c910: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
c920: 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74  ommand $add [get c930: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
c940: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
c950: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
c960: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
c970: 20 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d   the extra argum
c980: 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f  ents, if any, to
c990: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20   the command to
c9a0: 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20  evaluate...
c9b0: 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c   #..      eval l
c9c0: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24  append command $c9d0: 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d args.... #. c9e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A c9f0: 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 lias the compile ca00: 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 r local results ca10: 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 and errors varia ca20: 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 bles to the.. ca30: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia ca40: 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 ble names provid ca50: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller ca60: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ca70: 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75 6c upvar 1$resul
ca80: 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74  tsVarName result
ca90: 73 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  s..      upvar 1
caa0: 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20   $errorsVarName cab0: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 errors.... cac0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: cad0: 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f Evaluate the co cae0: 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 nstructed [compi caf0: 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e leCSharp] comman cb00: 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 d and return the cb10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # cb20: 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 result... # cb30: 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f .. eval$co
cb40: 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  mmand..    }....
cb50: 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f  .    proc isMemo
cb60: 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20  ryDb { fileName
cb70: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
cb80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74      # NOTE: Is t
cb90: 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
cba0: 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20  abase file name
cbb0: 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d  really an in-mem
cbc0: 6f 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20  ory database?..
cbd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
cbe0: 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c  turn [expr {$fil cbf0: 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 eName eq ":memor cc00: 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 y:" || \.. cc10: 20 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 [string rang cc20: 65 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 e$fileName 0 12
cc30: 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f  ] eq "file::memo
cc40: 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  ry:"}]..    }...
cc50: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62  ..    proc isTab
cc60: 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76  leInDb { name {v
cc70: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
cc80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
cc90: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
cca0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
ccb0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
ccc0: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
ccd0: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
cce0: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
ccf0: 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   It contains the
cd00: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
cd10: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74  tion handle that
cd20: 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..
cd30: 23 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20  #       used to
cd40: 65 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72  execute the quer
cd50: 79 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  y used to determ
cd60: 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64  ine if the named
cd70: 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20   table is..
cd80: 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74   #       present
cd90: 20 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73   in that databas
cda0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
cdb0: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN cdc0: 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 ame db.... cdd0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: cde0: 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f Use the sqlite_ cdf0: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 master table to ce00: 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 determine if the ce10: 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d named table is. ce20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 . # p ce30: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 resent in the da ce40: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # ce50: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 .. set sql ce60: 7b 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 {.. SELEC ce70: 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 T COUNT(*) FROM ce80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 sqlite_master WH ce90: 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c ERE type = 'tabl cea0: 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b e' AND name = ?; ceb0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cec0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO ced0: 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a TE: Return non-z cee0: 65 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 ero if the named cef0: 20 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e table is presen cf00: 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. cf10: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr cf20: 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 {.. [sql cf30: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 execute -execute cf40: 20 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c scalar$db $sql cf50: 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 [list param1 St cf60: 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 ring$name]] > 0
cf70: 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20  ..      }]..
cf80: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
cf90: 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b  rimSql { sql } {
cfa0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
cfb0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b  regsub -all -- {
cfc0: 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
cfd0: 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20  m $sql] " "].. cfe0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc cff0: 20 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 executeSql { sq d000: 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d l {execute none} d010: 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b {format none} { d020: 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b fileName ""} } { d030: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str d040: 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 ing length$file
d050: 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  Name] == 0} then
d060: 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a   {set fileName :
d070: 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20  memory:}..
d080: 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam d090: 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 e "" "" "" "" "" d0a0: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c false false fal d0b0: 73 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 se false db true d0c0: 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d .... try {. d0d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return d0e0: 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 [uplevel 1 [list d0f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d100: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 sql execute -exe d110: 63 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 cute$execute -f
d120: 6f 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64  ormat $format$d
d130: 62 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20  b $sql]].. d140: 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 } finally {.. d150: 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 cleanupDb$
d160: 66 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73  fileName db fals
d170: 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  e false false..
d180: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
d190: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f  ..    proc getCo
d1a0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20  nnectionFlags {
d1b0: 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b  fileName flags {
d1c0: 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
d1d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d1e0: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20   # NOTE: Figure
d1f0: 6f 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61  out which databa
d200: 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20  se file name or
d210: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
d220: 67 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23  g these..      #
d230: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
d240: 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74  n flags will act
d250: 75 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20  ually apply to.
d260: 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63   This is not nec
d270: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20  essary..      #
d280: 20 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d        in quiet m
d290: 6f 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73  ode because this
d2a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is
d2b0: 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f  only used for lo
d2c0: 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20  gging..      #
d2d0: 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69       and reporti
d2e0: 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20  ng purposes...
d2f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
d300: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { d310: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s d320: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 tring length$fi
d330: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  leName] > 0} the
d340: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
d350: 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70  et database [app
d360: 65 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61  endArgs "file na
d370: 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  me \"" $fileName d380: 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 \"].. } d390: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex d3a0: 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 ists ::dataSourc d3b0: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 e] && \.. d3c0: 20 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 ![array exi d3d0: 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 sts ::dataSource d3e0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. d3f0: 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 set databas d400: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 e [appendArgs "d d410: 61 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 ata source \""$
d420: 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d  ::dataSource \"]
d430: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
d440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
d450: 74 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e  t database <unkn
d460: 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  own>..        }.
d470: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
d480: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
d490: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
d4a0: 29 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e  ) the local conn
d4b0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64  ection flags and
d4c0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d   the associated.
d4d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
d4e0: 61 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69  ata source or fi
d4f0: 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...
d500: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71  #..      if {!$q d510: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. d520: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
d530: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
d540: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
d550: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63         "---- loc
d560: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  al connection fl
d570: 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62  ags for " $datab d580: 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ase \.. d590: 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 " are: " [exp d5a0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt d5b0: 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 h$flags] > 0 ?
d5c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
d5d0: 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66  appendArgs \" $f d5e0: 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e lags \"] : "<non d5f0: 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 e>"}] \n].. d600: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. d610: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If d620: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c there are any gl d630: 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 obal (per test r d640: 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 un) connection f d650: 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a lags currently.. d660: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se d670: 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 t, use them now d680: 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 (i.e. by combini d690: 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 ng them with the d6a0: 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a ones for this.. d6b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co d6c0: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 nnection)... d6d0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ d6e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co d6f0: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 nnection_flags] d700: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. d710: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
d720: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
d730: 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  gs] > 0} then {.
d740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
d750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
d760: 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 64   (and log) the d
d770: 65 74 65 63 74 65 64 20 67 6c 6f 62 61 6c 20 63  etected global c
d780: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e  onnection flags.
d790: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
d7a0: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet d7b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. d7c0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
d7d0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
d7e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
d7f0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f         "---- glo
d800: 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  bal connection f
d810: 6c 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22  lags detected: "
d820: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d830: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
d840: 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69  xists ::connecti
d850: 6f 6e 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a  on_flags] && \..
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
d870: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: d880: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags d890: 5d 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20 ] > 0 ? \.. d8a0: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append d8b0: 41 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 Args \"$::conne
d8c0: 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20  ction_flags \"]
d8d0: 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d  : "<none>"}] \n]
d8e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
d8f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
d900: 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e    # NOTE: Combin
d910: 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65  e and/or replace
d920: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
d930: 66 6c 61 67 73 20 61 6e 64 20 74 68 65 6e 20 73  flags and then s
d940: 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 20 20  how the..
d950: 20 23 20 20 20 20 20 20 20 6e 65 77 20 76 61 6c   #       new val
d960: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ue...        #..
d970: 20 20 20 20 20 20 20 20 73 65 74 20 66 6c 61 67          set flag
d980: 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20  s [combineFlags
d990: 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63  $flags$::connec
d9a0: 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20  tion_flags]....
d9b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
d9c0: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28    # NOTE: Show (
d9d0: 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e 65 77  and log) the new
d9e0: 20 65 66 66 65 63 74 69 76 65 20 63 6f 6e 6e 65   effective conne
d9f0: 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20  ction flags...
da00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
da10: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th da20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. da30: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
da40: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
da50: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
da60: 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65     "---- combine
da70: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  d connection fla
da80: 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61  gs for " $databa da90: 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 se \.. daa0: 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 " are: " [ex dab0: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng dac0: 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f th$flags] > 0 ?
dad0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
dae0: 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22    [appendArgs \"
daf0: 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c   $flags \"] : "< db00: 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 none>"}] \n].. db10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } db20: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return db30: 20 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a$flags..    }..
db40: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 46  ...    proc getF
db50: 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20 7b  lagsProperty { {
db60: 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74  flags ""} {quiet
db70: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
db80: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
db90: 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  TE: Determine wh
dba0: 61 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20  at the combined
dbb0: 28 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61  (global and loca
dbc0: 6c 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  l) connection..
dbd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6c 61       #       fla
dbe0: 67 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f  gs should be, po
dbf0: 73 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d  ssibly quietly..
dc00: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
dc10: 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f  set flags [getCo
dc20: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22  nnectionFlags ""
dc30: 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d   $flags$quiet].
dc40: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
dc50: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20    # NOTE: If no
dc60: 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20  global or local
dc70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
dc80: 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2c   were specified,
dc90: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
dca0: 20 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e      default conn
dcb0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f  ection flags sho
dcc0: 75 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68 65  uld be used; the
dcd0: 72 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a  refore, return..
dce0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
dcf0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 6e   empty string in
dd00: 20 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20   that case...
dd10: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
dd20: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $dd30: 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 flags] == 0} the dd40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret dd50: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d urn "".. }. dd60: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. dd70: 20 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 # NOTE: In ord dd80: 65 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 er to check if t dd90: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 he default conne dda0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 ction flags are ddb0: 62 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 being used.. ddc0: 20 20 23 20 20 20 20 20 20 20 69 74 20 69 73 20 # it is ddd0: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 74 74 necessary to att dde0: 65 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69 6f empt a conversio ddf0: 6e 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 n to the actual de00: 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 enumerated.. de10: 20 20 23 20 20 20 20 20 20 20 74 79 70 65 2e 20 # type. de20: 20 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 Failing that, t de30: 68 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73 74 he check against de40: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c the default val de50: 75 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 ue will be.. de60: 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 # skippe de70: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. de80: 20 20 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c set error nul de90: 6c 3b 20 23 20 49 47 4e 4f 52 45 44 0d 0a 20 20 l; # IGNORED.. dea0: 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f set value [o deb0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 bject invoke Uti dec0: 6c 69 74 79 20 54 72 79 50 61 72 73 65 46 6c 61 lity TryParseFla ded0: 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 gsEnum "" \.. dee0: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da def0: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite df00: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 ConnectionFlags df10: 22 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74 ""$flags null t
df20: 72 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rue \..
df30: 20 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 20 20 20   error]....
df40: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
df50: 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 69 6e 65  : If the combine
df60: 64 20 66 6c 61 67 73 20 73 74 72 69 6e 67 20 63  d flags string c
df70: 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c  ould not actuall
df80: 79 20 62 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a  y be converted..
df90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
dfa0: 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20   the enumerated
dfb0: 74 79 70 65 20 69 74 20 69 73 20 74 68 65 20 64  type it is the d
dfc0: 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 68  efault value, th
dfd0: 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 20  en just use..
dfe0: 20 20 20 23 20 20 20 20 20 20 20 69 74 20 76 65     #       it ve
dff0: 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 73  rbatim; otherwis
e000: 65 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 61  e, just return a
e010: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20  n empty string.
e020: 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20   In that..
e030: 23 20 20 20 20 20 20 20 63 61 73 65 2c 20 74 68  #       case, th
e040: 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63  e default connec
e050: 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20  tion flags will
e060: 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  be used...
e070: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
e080: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c  ring length $val e090: 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c ue] == 0 ||$val
e0a0: 75 65 20 6e 65 20 22 44 65 66 61 75 6c 74 22 7d  ue ne "Default"}
e0b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e0c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 57 41   #..        # WA
e0d0: 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 74 75  RNING: This retu
e0e0: 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 76  rns the string v
e0f0: 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6d 62  alue of the comb
e100: 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d  ined flags, not.
e110: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
e120: 20 20 20 20 74 68 65 20 65 6e 75 6d 65 72 61 74      the enumerat
e130: 65 64 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  ed value.  This
e140: 69 73 20 62 79 20 64 65 73 69 67 6e 20 61 6e 64  is by design and
e150: 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20   should not..
e160: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
e170: 62 65 20 63 68 61 6e 67 65 64 20 77 69 74 68 6f  be changed witho
e180: 75 74 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 69  ut careful consi
e190: 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69  deration (e.g. i
e1a0: 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20  t would..
e1b0: 20 23 20 20 20 20 20 20 20 20 20 20 70 72 65 76   #          prev
e1c0: 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65 43 6f  ent the SQLiteCo
e1d0: 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 66  nnection class f
e1e0: 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76  rom allowing inv
e1f0: 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 23 20  alid..        #
e200: 20 20 20 20 20 20 20 20 20 5b 22 6d 61 67 69 63           ["magic
e210: 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29  al"] meta-flags)
e220: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
e230: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70        return [ap
e240: 70 65 6e 64 41 72 67 73 20 22 46 6c 61 67 73 3d  pendArgs "Flags=
e250: 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20  " $flags \;].. e260: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r e270: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d eturn "".. }. e280: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 .... proc set e290: 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 upDb {.. e2a0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f fileName {mo e2b0: 64 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 de ""} {dateTime e2c0: 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 Format ""} {date e2d0: 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c TimeKind ""} {fl e2e0: 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 ags ""}.. e2f0: 20 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 {extra ""} e300: 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b {qualify true} { e310: 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 delete true} {ur e320: 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 i false}.. e330: 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 {temporary e340: 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 true} {varName e350: 64 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 db} {quiet false e360: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. e370: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi e380: 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 rst, see if our e390: 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 caller has reque e3a0: 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 sted an in-memor e3b0: 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 y database... e3c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set e3d0: 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f isMemory [isMemo e3e0: 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ryDb$fileName].
e3f0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e400: 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f    # NOTE: For no
e410: 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61  w, all test data
e420: 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68  bases used by th
e430: 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65  e test suite are
e440: 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23   placed..      #
e450: 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20         into the
e460: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
e470: 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 61  ry.  Each databa
e480: 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66  se and related f
e490: 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20  iles..      #
e4a0: 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74 65      used by a te
e4b0: 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65  st should be cle
e4c0: 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20  aned up by that
e4d0: 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a  test using the..
e4e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 63        #       "c
e4f0: 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64  leanupDb" proced
e500: 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20  ure, below...
e510: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
e520: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71  !$isMemory &&$q
e530: 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a  ualify} then {..
e540: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
e550: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
e560: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
e570: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69  ctory] [file tai
e580: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20  l $fileName]].. e590: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e5a0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: e5b0: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c By default, del e5c0: 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 ete any pre-exis e5d0: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 ting database wi e5e0: 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 th the same file e5f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # e600: 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 name if it curre e610: 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 ntly exists... e620: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if e630: 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 {!$isMemory && $e640: 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 delete && [file e650: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
e660: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
e670: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
e680: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
e690: 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d   delete any pre-
e6a0: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
e6b0: 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same
e6c0: 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  file..        #
e6d0: 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20        name...
e6e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e6f0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65  if {[catch {file
e700: 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d   delete $fileNam e710: 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 e} error]} then e720: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. e730: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE e740: 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai e750: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 led to delete th e760: 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 e file, report w e770: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 hy... # e780: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { e790: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
e7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
e7b0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann e7c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ e7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e7e0: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: e7f0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet e800: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 e database file e810: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d \""$fileName \.
e820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e830: 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74 75   "\" during setu
e840: 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  p, error: " \n\t
e850: 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. e860: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. e870: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... e880: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # e890: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to e8a0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va e8b0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db e8c0: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex e8d0: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. e8e0: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. e8f0: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t e900: 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 he opened databa e910: 73 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 se will be store e920: 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... e930: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 e940: 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
e950: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
e960: 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69   NOTE: Start bui
e970: 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  lding the connec
e980: 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68  tion string.  Th
e990: 65 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20  e only required
e9a0: 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23  portion..      #
e9b0: 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
e9c0: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
e9d0: 69 73 20 74 68 65 20 64 61 74 61 20 73 6f 75 72  is the data sour
e9e0: 63 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69  ce, which contai
e9f0: 6e 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  ns the..      #
ea00: 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66        database f
ea10: 69 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e  ile name itself.
ea20: 20 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20    If our caller
ea30: 77 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55  wants to use a U
ea40: 52 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20  RI as..      #
ea50: 20 20 20 20 20 74 68 65 20 64 61 74 61 20 73 6f       the data so
ea60: 75 72 63 65 2c 20 75 73 65 20 74 68 65 20 46 75  urce, use the Fu
ea70: 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e  llUri connection
ea80: 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79   string property
ea90: 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   to..      #
eaa0: 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 64     prevent the d
eab0: 61 74 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e  ata source strin
eac0: 67 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e  g from being man
ead0: 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  gled...      #..
eae0: 20 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20        if {$uri} eaf0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. eb00: 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b set connection { eb10: 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 FullUri=${fileNa
eb20: 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  me}}..      } el
eb30: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
eb40: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61  t connection {Da
eb50: 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65  ta Source=${file eb60: 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d Name}}.. }. eb70: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. eb80: 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 # NOTE: Since eb90: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 this procedure h eba0: 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e as no special kn ebb0: 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 owledge of what ebc0: 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 the default.. ebd0: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 69 # setti ebe0: 6e 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f ng is for the To ebf0: 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 FullPath connect ec00: 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 ion string prope ec10: 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 ry, always.. ec20: 20 20 23 20 20 20 20 20 20 20 61 64 64 20 74 68 # add th ec30: 65 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 e value we know ec40: 61 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e about to the con ec50: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d nection string.. ec60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ec70: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f append connectio ec80: 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 n {;ToFullPath=$
ec90: 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20  {qualify}}....
eca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
ecb0: 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c  OTE: If our call
ecc0: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 6a  er specified a j
ecd0: 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64  ournal mode, add
ece0: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70   the necessary p
ecf0: 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
ed00: 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
ed10: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e  nection string n
ed20: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
ed30: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
ed40: 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20  length $mode] > ed50: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. ed60: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec ed70: 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d tion {;Journal M ed80: 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 ode=${mode}}..
ed90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
eda0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
edb0: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
edc0: 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69  ecified a DateTi
edd0: 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74  me format, add t
ede0: 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20  he necessary..
edf0: 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74      #       port
ee00: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65  ion of the conne
ee10: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
ee20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
ee30: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
ee40: 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f  ngth $dateTimeFo ee50: 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 rmat] > 0} then ee60: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen ee70: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 d connection {;D ee80: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b ateTimeFormat=${
ee90: 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d  dateTimeFormat}}
eea0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
eeb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
eec0: 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
eed0: 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61  r specified a Da
eee0: 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20  teTimeKind, add
eef0: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f  the necessary po
ef00: 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  rtion..      #
ef10: 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e       of the conn
ef20: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
ef30: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
ef40: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
ef50: 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b  ength $dateTimeK ef60: 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ind] > 0} then { ef70: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append ef80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 connection {;Da ef90: 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 teTimeKind=${dat
efa0: 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20  eTimeKind}}..
efb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
efc0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
efd0: 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 20 74  igure out what t
efe0: 68 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20 66  he final flags f
eff0: 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  or this connecti
f000: 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a  on need to be...
f010: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
f020: 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e  et flags [getCon
f030: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66 69  nectionFlags $fi f040: 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 71 leName$flags $q f050: 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 uiet].... # f060: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: f070: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 If our caller sp f080: 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 4c ecified some SQL f090: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 iteConnectionFla f0a0: 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 20 gs, add the.. f0b0: 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 73 # neces f0c0: 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 sary portion of f0d0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s f0e0: 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 tring now... f0f0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ f100: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
f110: 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  lags] > 0} then
f120: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
f130: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46  d connection {;F
f140: 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a  lags=${flags}}.. f150: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f160: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE f170: 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 : If our caller f180: 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 74 specified an ext f190: 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 ra payload to th f1a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 e connection.. f1b0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69 # stri f1c0: 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e 6f ng, append it no f1d0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. f1e0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l f1f0: 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 ength$extra] >
f200: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
f210: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
f220: 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a  tion \; $extra.. f230: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f240: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE f250: 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 : Open the datab f260: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e ase connection n f270: 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 ow, placing the f280: 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 opaque handle va f290: 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 lue.. # f2a0: 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 into the vari f2b0: 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 able specified b f2c0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... f2d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se f2e0: 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d t db [sql open - f2f0: 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 type SQLite [sub f300: 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d st$connection]]
f310: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
f320: 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69     # NOTE: Confi
f330: 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61  gure the tempora
f340: 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  ry directory for
f350: 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65   the newly opene
f360: 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  d database..
f370: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
f380: 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20  tion now unless
f390: 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69  our caller forbi
f3a0: 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d  ds it...      #.
f3b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70  .      if {$temp f3c0: 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 orary && ![info f3d0: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 exists ::no(setT f3e0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector f3f0: 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 y)]} then {.. f400: 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 sql execute f410: 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73$db [appendArgs
f420: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f430: 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f  "PRAGMA temp_sto
f440: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c  re_directory = \
f450: 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79  "" [getTemporary
f460: 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d  Directory] \"\;]
f470: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
f480: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
f490: 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72  TE: Always retur
f4a0: 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  n the connection
f4b0: 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63   handle upon suc
f4c0: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  cess...      #..
f4d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62        return $db f4e0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... f4f0: 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 proc getDbConnec f500: 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 tion { {varName f510: 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 db} } {.. # f520: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: f530: 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe f540: 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable f550: 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t f560: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou f570: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # f580: 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 caller. The ha f590: 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 ndle to the data f5a0: 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 base previously f5b0: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a opened via the.. f5c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 # [s f5d0: 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 etupDb] procedur f5e0: 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 e should be stor f5f0: 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... f600: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar f610: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
f620: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
f630: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74  # NOTE: This ret
f640: 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54  urns the ADO.NET
f650: 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f   IDbConnection o
f660: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66  bject instance f
f670: 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  or the..      #
f680: 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20        specified
f690: 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20  databse handle.
f6a0: 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74   Since getting t
f6b0: 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65  his object relie
f6c0: 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20  s upon..      #
f6d0: 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65        Eagle inte
f6e0: 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72  rnals, great car
f6f0: 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  e should be take
f700: 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f  n to avoid dispo
f710: 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23  sing of..      #
f720: 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65         this obje
f730: 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20  ct or otherwise
f740: 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20  putting it into
f750: 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65  an invalid state
f760: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f770: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
f780: 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ts db]} then {..
f790: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
f7a0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
f7b0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
f7c0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
f7d0: 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f  -objectflags +No
f7e0: 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c  Dispose -alias \
f7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f800: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
f810: 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e  ctive.connection
f820: 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20  s Item $db.. f830: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d } result] == f840: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. f850: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f860: 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 # NOTE: Succe f870: 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f ss, return the o f880: 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e paque object han f890: 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 dle... f8a0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 #.. ret f8b0: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
f8c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
f8d0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
f8e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
f8f0: 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68  ilure, report wh
f900: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  y...          #.
f910: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
f920: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel f930: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= f950: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai f960: 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 led to get conne f970: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 ction handle for f980: 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d database \"" \. f990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 .$
f9a0: 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  db "\", error: "
f9b0: 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n f9c0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. f9d0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... f9e0: 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 . proc freeDb f9f0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 Connection { {va fa00: 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e rName connection fa10: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. fa20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re fa30: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci fa40: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e fa50: 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 .g. "connection" fa60: 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 ) in the.. fa70: 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 # context fa80: 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 of our caller. fa90: 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 The opaque objec faa0: 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 t handle for an fab0: 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 ADO.NET.. # fac0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio fad0: 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 n previously ret fae0: 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 urned by [getDbC faf0: 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c onnection] shoul fb00: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 d be.. # fb10: 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 stored there fb20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. fb30: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
fb40: 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  me connection...
fb50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fb60: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
fb70: 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70  to remove the op
fb80: 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
fb90: 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65  le from the inte
fba0: 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23  rpreter..      #
fbb0: 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69         now.  Thi
fbc0: 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73  s [object dispos
fbd0: 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74  e] call will not
fbe0: 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73   actually dispos
fbf0: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
fc00: 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69  #       underlyi
fc10: 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73  ng object becaus
fc20: 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65  e the +NoDispose
fc30: 20 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e   flag was set on
fc40: 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20   it..      #
fc50: 20 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69     during creati
fc60: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  on of the opaque
fc70: 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d   object handle..
fc80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fc90: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
fca0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20   connection] &&
fcb0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61  \..          [ca
fcc0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70  tch {object disp
fcd0: 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d  ose $connection} fce0: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. fcf0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. fd00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s fd10: 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to fd20: 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 remove the hand fd30: 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d le, report why.. fd40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. fd50: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
fd60: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
fd70: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
fd80: 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
fd90: 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
fda0: 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  move connection
fdb0: 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e  handle \"" $conn fdc0: 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ection \.. fdd0: 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 "\", error fde0: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
fdf0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
fe00: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
fe10: 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e   addDbConnection
fe20: 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76   { connection {v
fe30: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
fe40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
fe50: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
fe60: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
fe70: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
fe80: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
fe90: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
fea0: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d  #       caller..
feb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
fec0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName fed0: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. fee0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 # NOTE: Cr fef0: 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 eate a correctly ff00: 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 formatted name ff10: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 for the database ff20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a connection to.. ff30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be ff40: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 added to the li ff50: 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 st managed by th ff60: 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 e Eagle interpre ff70: 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ter... #.. ff80: 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a set db [obj ff90: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag ffa0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. ffb0: 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e Eagle. ffc0: 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 _Components.Priv ffd0: 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 ate.FormatOps Da ffe0: 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 tabaseObjectName fff0: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a$connection \..
10000 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
10010 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65  Connection [obje
10020 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
10030 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive
10040 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20  NextId]]....
10050 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
10060 45 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62  E: Add the datab
10070 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  ase connection p
10080 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
10090 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73  aller to the lis
100a0 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
100b0 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20   of those known
100c0 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74  to the Eagle int
100d0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
100e0 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74   #..      object
100f0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
10100 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70  NonPublic Interp
10110 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e  reter.GetActive.
10120 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20  connections Add
10130 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62  \..          $db 10140 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20$connection..
10150 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
10160 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c   cleanupDb { fil
10170 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64  eName {varName d
10180 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65  b} {collect true
10190 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d  } {qualify true}
101a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
101b0 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74         {delete t
101c0 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
101d0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
101e0 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63   Attempt to forc
101f0 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67  e all pending "g
10200 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20  arbage" objects
10210 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c  to be collected,
10220 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
10230 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65  including SQLite
10240 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and
10250 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20  backup objects;
10260 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f  this should allo
10270 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  w..      #
10280 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying
10290 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
102a0 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20   be deleted...
102b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
102c0 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20  {$collect} then 102d0 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 {.. colle 102e0 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 ctGarbage$::tes
102f0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20  t_channel..
10300 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
10310 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
10320 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
10330 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
10340 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
10350 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
10360 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
10370 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c  ller.  The handl
10380 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
10390 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
103a0 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20  ned via the..
103b0 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75     #       [setu
103c0 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73  pDb] procedure s
103d0 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20  hould be stored
103e0 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
103f0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $10400 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 10410 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10420 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 OTE: Close the c 10430 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 onnection to the 10440 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 database now. 10450 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f This should allo 10460 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 w us.. # 10470 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 to delete th 10480 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 e underlying dat 10490 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 abase file... 104a0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 104b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d [info exists db] 104c0 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 && [catch {sql 104d0 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 close$db} error
104e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
104f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
10500 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
10510 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
10520 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72   the database, r
10530 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
10540 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
10550 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 10560 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10570 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10580 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 10590 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 ailed to close d 105a0 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 atabase \""$db
105b0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  "\", error: " \.
105c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c  .            \n\
105d0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 105e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 105f0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 10600 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 First, see if ou 10610 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 r caller has req 10620 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d uested an in-mem 10630 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 ory database... 10640 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 10650 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 t isMemory [isMe 10660 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 moryDb$fileName
10670 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
10680 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
10690 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20  d the full path
106a0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
106b0 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20  file name.  For
106c0 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20  now, all test..
106d0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
106e0 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20  abase files are
106f0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65  stored in the te
10700 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
10710 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
10720 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor 10730 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
10740 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
10750 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
10760 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
10770 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
10780 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 10790 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... 107a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 107b0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 107c0 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 the file still 107d0 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 exists... # 107e0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 .. if {!$is
107f0 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74  Memory && $delet 10800 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 e && [file exist 10810 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
10820 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
10830 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10840 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64   Skip deleting d
10850 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 66  atabase files if
10860 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74   somebody sets t
10870 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20  he global..
10880 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61     #       varia
10890 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69  ble to prevent i
108a0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
108b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
108c0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c  o exists ::no(cl
108d0 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74  eanupDbFile)]} t
108e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
108f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
10900 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
10910 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74   delete the test
10920 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
10930 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ow...          #
10940 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
10950 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68  [set code [catch
10960 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f 10970 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d ileName} error]] 10980 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10990 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 109a0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 109b0 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 109c0 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c o delete the fil 109d0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 109e0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 109f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 10a00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
10a10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10a30 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
10a40 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
10a50 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
10a60 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 10a80 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 \" during cleanu 10a90 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 p, error: " \n\t 10aa0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
10ab0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10ac0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10ad0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10ae0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
10af0 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20  that we skipped
10b00 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c  deleting the fil
10b10 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e...          #.
10b20 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63  .          set c
10b30 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20  ode 0....
10b40 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 10b50 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 10b60 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 10b70 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 10b80 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c ING: skipped del 10b90 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 eting database f 10ba0 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
10bb0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
10bc0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
10bd0 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20  eanup\n"]..
10be0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
10bf0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
10c00 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10c10 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e   The file does n
10c20 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73  ot exist, succes
10c30 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s!..        #..
10c40 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20         set code
10c50 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  0..      }....
10c60 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65      return $code 10c70 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 10c80 70 72 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65 proc setupDbInte 10c90 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 rruptCallback { 10ca0 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d channel log } {. 10cb0 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
10cc0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74  annel "---- sett
10cd0 69 6e 67 20 75 70 20 64 65 62 75 67 67 65 72 20  ing up debugger
10ce0 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61  interrupt callba
10cf0 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ck... "....
10d00 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
10d10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10d20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
10d30 75 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64  ure the script d
10d40 65 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20  ebugger and the
10d50 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
10d60 65 74 65 72 20 61 72 65 0d 0a 20 20 20 20 20 20  eter are..
10d70 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70 20    #       setup
10d80 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
10d90 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
10da0 20 20 20 20 20 20 20 64 65 62 75 67 20 73 65 74         debug set
10db0 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a 0d 0a  up true true....
10dc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10dd0 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20     # NOTE: Load
10de0 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 61  the necessary pa
10df0 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20  ckages into the
10e00 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
10e10 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
10e20 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20  ..        debug
10e30 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20  eval {..
10e40 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72    package requir
10e50 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20  e Eagle..
10e60 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69     package requi
10e70 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79  re Eagle.Library
10e80 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b  ..          pack
10e90 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
10ea0 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e.Test..
10eb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
10ec0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10ed0 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73 61  Copy the necessa
10ee0 72 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74  ry variables int
10ef0 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69  o the isolated i
10f00 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
10f10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10f20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73  debug invoke 0 s
10f30 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  et ::test_channe
10f40 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f  l $channel; # NO 10f50 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e TE: For [tputs]. 10f60 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug 10f70 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 invoke 0 set ::t 10f80 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 est_log$log; #
10f90 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d  NOTE: For [tlog]
10fa0 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  .....        #..
10fb0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10fc0 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c  Install the call
10fd0 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f 20 62  back script to b
10fe0 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74  e evaluated in t
10ff0 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20  he isolated..
11000 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74       #       int
11010 65 72 70 72 65 74 65 72 20 77 68 65 6e 20 74 68  erpreter when th
11020 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  is interpreter i
11030 73 20 69 6e 74 65 72 72 75 70 74 65 64 20 62 79  s interrupted by
11040 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 20 20   script..
11050 20 23 20 20 20 20 20 20 20 63 61 6e 63 65 6c 6c   #       cancell
11060 61 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20  ation, etc...
11070 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11080 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61  debug callback a
11090 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d  pply {{sender e}
110a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
110b0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
110c0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73  E: Check if this
110d0 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65   callback is one
110e0 20 74 68 61 74 20 77 65 20 63 61 72 65 20 61 62   that we care ab
110f0 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  out...
11100 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
11110 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 5b  {"Canceled" in [
11120 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72  split [$e Interr 11130 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d 7d 20 uptType] ", "]} 11140 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11150 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 11160 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 # NOTE: Itera 11170 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 te through all d 11180 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 11190 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 ons known to the 111a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 111b0 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 6e 74 parent int 111c0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 111d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 111e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 111f0 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 11200 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11210 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f [object invo 11220 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 11230 62 6c 69 63 20 24 65 20 49 6e 74 65 72 70 72 65 blic$e Interpre
11240 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d  ter.connections]
11250 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
11260 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
11270 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
11280 70 74 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79  pt to cancel any
11290 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20   SQL queries in
112a0 70 72 6f 67 72 65 73 73 20 6f 6e 20 74 68 69 73  progress on this
112b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
112c0 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65  #       database
112d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...
112e0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
11300 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72 20 56  {[catch {$pair V 11310 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 72 alue.Cancel} err 11320 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 11330 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 11340 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
11350 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
11360 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
11370 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
11380 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
11390 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66  o cancel query f
113a0 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22  or connection \"
113b0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
113c0 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20           [$pair 113d0 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a Key] "\", error: 113e0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
113f0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
11400 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
11410 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
11420 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20  .        }}..
11430 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30     } error] == 0
11440 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11450 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
11460 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63  interruptCallbac
11470 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20  k.sqlite3....
11480 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11490 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. 114a0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 114b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
114c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e  l [appendArgs "n
114d0 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  o, error: " \n\t
114e0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 114f0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 11500 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 proc cleanup 11510 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 File { fileName 11520 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b {collect true} { 11530 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b force false} } { 11540 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11550 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 11560 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 to force all pe 11570 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 nding "garbage" 11580 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f objects to be co 11590 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 llected,.. 115a0 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e # includin 115b0 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 g SQLite stateme 115c0 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f nts and backup o 115d0 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f bjects; this sho 115e0 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 uld allow.. 115f0 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 # the und 11600 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 erlying database 11610 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 file to be dele 11620 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ted... #.. 11630 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 if {$collec
11640 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
11650 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67     collectGarbag
11660 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  e $::test_channe 11670 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 l.. }.... 11680 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 11690 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 116a0 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 e file still exi 116b0 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sts... #.. 116c0 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 116d0 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
116e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
116f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
11700 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69  OTE: Skip deleti
11710 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66  ng test files if
11720 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74   somebody sets t
11730 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
11740 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
11750 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69      to prevent i
11760 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
11770 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63         if {$forc 11780 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 e || ![info exis 11790 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 ts ::no(cleanupF 117a0 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ile)]} then {.. 117b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 117c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 117d0 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 tempt to delete 117e0 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f the test file no 117f0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d w... #. 11800 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 11810 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 set code [catch 11820 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
11830 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d  leName} error]]}
11840 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11850 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11860 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73      # NOTE: We s
11870 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f  omehow failed to
11880 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65   delete the file
11890 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20  , report why...
118a0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
118b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
118c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 118d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 118e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 118f0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 11900 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 11910 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 est file \""$fi
11920 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
11930 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
11940 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72  ring cleanup, er
11950 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 11960 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 11970 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 11980 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 11990 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 119a0 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 NOTE: Show that 119b0 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 we skipped delet 119c0 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 ing the file... 119d0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 119e0 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 119f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 .... tp 11a00 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
11a10 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
11a20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
11a30 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
11a40 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
11a50 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24   test file \"" $11a60 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. 11a70 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du 11a80 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d ring cleanup\n"] 11a90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 11aa0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 11ab0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11ac0 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 # NOTE: The file 11ad0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c does not exist, 11ae0 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 success!.. 11af0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 11b00 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 t code 0.. 11b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 11b20 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a n$code..    }..
11b30 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c  ...    proc coll
11b40 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 61  ectGarbage { cha
11b50 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e  nnel {millisecon
11b60 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20  ds 1000} {quiet
11b70 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
11b80 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a   if {[catch {obj
11b90 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65  ect invoke GC Ge
11ba0 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c  tTotalMemory fal
11bb0 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30  se} result] == 0
11bc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11bd0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 11be0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 11bf0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11c00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
11c20 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65  -- memory in use
11c30 20 62 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f   by the CLR befo
11c40 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e  re collection...
11c50 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
11c60 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79      $result " by 11c70 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 11c80 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 11c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 11ca0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
11cb0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
11cc0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
11cd0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
11ce0 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73  et CLR memory us
11cf0 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  age, error: " \.
11d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c  .            \n\
11d10 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 11d20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 11d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11d70 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 11d80 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11d90 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 TE: Repeatedly a 11da0 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 ttempt to collec 11db0 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 t garbage until 11dc0 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d the allotted num 11dd0 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ber.. # 11de0 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e of millisecon 11df0 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 ds has elapsed. 11e00 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 Always attempt 11e10 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 to collect garba 11e20 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ge.. # 11e30 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e at least once. 11e40 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11e50 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 set start [cloc 11e60 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 k seconds].. 11e70 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 set stop [expr 11e80 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c {$start + ($mil 11e90 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 liseconds / 1000 11ea0 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20 )}].... do 11eb0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 11ec0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 11ed0 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 tempt to force a 11ee0 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f full garbage co 11ef0 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 llection now. R 11f00 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 eport any.. 11f10 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 # error 11f20 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 that is encount 11f30 65 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e ered if we fail. 11f40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11f50 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 11f60 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 {object invoke G 11f70 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 C GetTotalMemory 11f80 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74 true} error]} t 11f90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 11fa0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11fb0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
11fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
11fd0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
11fe0 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20  ed full garbage
11ff0 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f  collection, erro
12000 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
12010 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f        \n\t $erro 12020 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d r \n].. } 12030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 12040 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e now [clock secon 12050 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 69 ds].. } whi 12060 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e le {$start <= $n 12070 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 ow &&$now < $st 12080 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 op}.... ### 12090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 120a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 120b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 120c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 120d0 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 ######.... 120e0 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje 120f0 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 ct invoke GC Get 12100 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 TotalMemory fals 12110 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d e} result] == 0} 12120 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12130 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
12140 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
12150 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 12160 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 12170 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 12180 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 - memory in use 12190 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72 by the CLR after 121a0 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 collection... " 121b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 121c0 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65$result " byte
121d0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  s\n"]..        }
121e0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
121f0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
12200 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 12210 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 12220 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 12230 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 12240 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 CLR memory usag 12250 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 e, error: " \.. 12260 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 12270 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
12280 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
12290 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69      proc getSQLi
122a0 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b  teHandleCounts {
122b0 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20   channel {quiet
122c0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
122d0 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
122e0 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  st]....      if
122f0 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  {[haveConstraint
12300 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12310 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74    defineConstant
12320 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
12330 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  ite.COUNT_HANDLE
12340 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12350 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
12360 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20 63  NOTE: Add each c
12370 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
12380 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75  ount to the resu
12390 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20  lting list...
123a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
123b0 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69  foreach name [li
123c0 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75  st connectionCou
123d0 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e  nt statementCoun
123e0 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b  t backupCount] {
123f0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
12400 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e  value [object in
12410 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
12420 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
12430 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
12440 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
12450 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24  eNativeMethods $12460 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 name].... 12470 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
12480 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12490 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 124a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 124b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 124c0 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c "---- critical 124d0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 handle count \" 124e0 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 "$name "\" is "
124f0 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20   $value \n].. 12500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 12510 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re 12520 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 sult$value..
12530 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
12540 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d  elseif {!$quiet} 12550 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12560 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 12570 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 TE: The actual h 12580 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 andle counts are 12590 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 not available; 125a0 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d therefore, just. 125b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 125c0 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 return an empty 125d0 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 list... 125e0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 125f0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
12600 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
12610 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62  counts unavailab
12620 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  le\n"..      }..
12630 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $12640 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c result.. }... 12650 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 .. proc shutd 12660 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e ownSQLite { chan 12670 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 nel {force false 12680 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 } {quiet false} 12690 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 126a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 # NOTE: Make 126b0 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 sure that SQLit 126c0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 126d0 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 s completely shu 126e0 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 tdown. This.. 126f0 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 75 # is u 12700 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 61 sed by tests tha 12710 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 t change configu 12720 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 ration options a 12730 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 nd/or those.. 12740 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that 12750 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 need to make sur 12760 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 e logging is ini 12770 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a tialized (i.e. j 12780 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 ust in case.. 12790 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S 127a0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 127b0 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a ry was initializ 127c0 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 ed in the proces 127d0 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 s prior to.. 127e0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 # the SQ 127f0 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 LiteLog class be 12800 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 ing able to setu 12810 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 p its logging ca 12820 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 llback)... 12830 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 # Normally 12840 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e , this should on 12850 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 ly be performed 12860 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 if SQLite is loa 12870 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 ded and.. # 12880 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 ready for 12890 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 use by the test 128a0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 suite... # 128b0 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 .. if {$for
128c0 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52  ce || [isSQLiteR
128d0 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  eady]} then {..
128e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
128f0 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f    # BUGFIX: Befo
12900 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e  re calling the n
12910 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66  ative shutdown f
12920 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75  unction, make su
12930 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20  re both..
12940 20 23 20 20 20 20 20 20 20 20 20 6f 66 20 74 68   #         of th
12950 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64  e PRAGMA related
12960 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73   directory names
12970 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20   are freed...
12980 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12990 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
129a0 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e  rectories $chann 129b0 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 el true.... 129c0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 129d0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 129e0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 129f0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 12a00 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 12a10 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 12a20 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 12a30 64 73 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 ds sqlite3_shutd 12a40 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 own.. } r 12a50 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 12a60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 12a70 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
12a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
12a90 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 12aa0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 12ac0 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 12ad0 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f _shutdown()... o 12ae0 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d k: "$result \n]
12af0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
12b00 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
12b10 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
12b20 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 12b30 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 12b40 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
12b50 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
12b60 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
12b70 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75  call sqlite3_shu
12b80 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72  tdown()... error
12b90 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74  : " \n\t $result 12ba0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 12bb0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 12bc0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 12bd0 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 . proc report 12be0 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 SQLiteResources 12bf0 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 { channel {quiet 12c00 20 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 74 false} {collect 12c10 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 12c20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12c30 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75 74 70 E: Skip all outp 12c40 75 74 20 69 66 20 77 65 20 61 72 65 20 72 75 6e ut if we are run 12c50 6e 69 6e 67 20 69 6e 20 22 71 75 69 65 74 22 20 ning in "quiet" 12c60 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a mode... #.. 12c70 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 if {[haveC 12c80 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 onstraint \.. 12c90 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e defin 12ca0 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d eConstant.System 12cb0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 .Data.SQLite.INT 12cc0 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 12cd0 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 LE] && \.. 12ce0 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 [haveConstra 12cf0 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 int \.. 12d00 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 defineConst 12d10 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e ant.System.Data. 12d20 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45 4d SQLite.TRACK_MEM 12d30 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e ORY_BYTES]} then 12d40 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 12d50 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
12d60 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
12d70 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 12d80 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 12d90 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d n use by SQLiteM 12da0 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 emory... ".. 12db0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 12dc0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 12dd0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 12de0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 12df0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 12e00 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 12e10 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 12e20 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 73 41 iteMemory bytesA 12e30 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 llocated.. 12e40 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 } memory] == 0 12e50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12e60 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
12e70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12e80 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 12e90 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 12ea0 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
12eb0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
12ec0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
12ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
12ee0 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
12ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
12f00 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 12f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 12f20 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
12f30 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 12f40 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 12f50 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 12f60 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
12f70 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
12f80 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12f90 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 hannel "---- max 12fa0 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 imum memory in u 12fb0 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f se by SQLiteMemo 12fc0 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 ry... ".. 12fd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 12fe0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 12ff0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 13000 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 13010 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 13020 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 13030 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 13040 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79 Memory maximumBy 13050 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 tesAllocated.. 13060 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 } memory] 13070 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 13080 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
13090 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
130a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $130b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 130c0 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 rgs$memory " by
130d0 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
130e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
130f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
13100 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b    set memory unk
13110 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nown....
13120 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 13130 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 13140 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
13150 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 13160 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 13170 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 13180 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 13190 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
131a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
131b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 131c0 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 "---- current me 131d0 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 mory in use by S 131e0 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 QLite... ".. 131f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 13200 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 13210 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 13220 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 13230 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 13240 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 13250 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 13260 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 eMethods sqlite3 13270 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20 _memory_used.. 13280 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d } memory] == 13290 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 132a0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
132b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
132c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 132d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
132e0 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
132f0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
13300 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
13310 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13320 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74   # NOTE: Maybe t
13330 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
13340 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69  ibrary is unavai
13350 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20  lable?..
13360 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  #..        set m
13370 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
13380 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 13390 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 133a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
133b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
133c0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 133d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 133e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set 133f0 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 result$memory;
13400 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d  # NOTE: Return m
13410 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20  emory in-use to
13420 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20  our caller.....
13430 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 13440 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13450 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
13460 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d   "---- maximum m
13470 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
13480 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20  SQLite... "..
13490 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
134a0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
134b0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
134c0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
134d0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
134e0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
134f0 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
13500 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65  veMethods sqlite
13510 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74  3_memory_highwat
13520 65 72 20 30 0d 0a 20 20 20 20 20 20 7d 20 6d 65  er 0..      } me
13530 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  mory] == 0} then
13540 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
13550 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 13560 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 13570 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
13580 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 13590 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 135a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 135b0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 135c0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 135d0 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 Maybe the SQLit 135e0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 135f0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a s unavailable?.. 13600 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13610 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 13620 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 known.... 13630 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
13640 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
13650 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 13660 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
13670 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
13680 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
13690 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74      if {$collect 136a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 136b0 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 collectGarbage 136c0 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20$channel..
136d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
136e0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 136f0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
13700 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75  channel "---- cu
13710 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20  rrent memory in
13720 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e 2e  use by the CLR..
13730 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  . "..      }....
13740 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
13750 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
13760 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
13770 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 79 5d  y false} memory]
13780 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
13790 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
137a0 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73  ng is integer -s
137b0 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20  trict $memory]} 137c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 137d0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
137e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
137f0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 13800 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
13810 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
13820 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
13830 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
13840 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
13850 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a  memory invalid..
13860 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
13870 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 13880 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 13890 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
138a0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 138b0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 138c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 138d0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 138e0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 138f0 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 unknown.... 13900 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
13910 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13920 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 13930 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
13940 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mory \n]..
13950 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
13960 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 13970 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 13980 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 13990 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 rSQLiteDirectori 139a0 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 es { channel {re 139b0 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a set false} } {.. 139c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 139d0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 139e0 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 139f0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 13a00 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 function is avai 13a10 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d lable... #. 13a20 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
13a30 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
13a40 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
13a50 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73  g for function s
13a60 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
13a70 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d  _directory... ".
13a80 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
13a90 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63    # NOTE: This c
13aa0 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74  all to the sqlit
13ab0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
13ac0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20  ectory function
13ad0 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20  uses the..
13ae0 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20  #       invalid
13af0 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20  value 0 for the
13b00 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20  first argument.
13b10 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65   This code is de
13b20 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20  signed..      #
13b30 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69        to check i
13b40 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75  f calling the fu
13b50 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73  nction will rais
13b60 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28  e an exception (
13b70 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20  i.e...      #
13b80 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 72      the actual r
13b90 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
13ba0 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d  ction does not m
13bb0 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73  atter as long as
13bc0 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   no..      #
13bd0 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 20     directory is
13be0 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20  changed)...
13bf0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63   #..      if {[c
13c00 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
13c10 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
13c20 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
13c30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
13c40 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
13c50 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
13c60 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
13c70 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e       sqlite3_win
13c80 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
13c90 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d   0 null..      }
13ca0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
13cb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13cc0 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69     # NOTE: Calli
13cd0 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77  ng the sqlite3_w
13ce0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
13cf0 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  ry function does
13d00 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20   not..        #
13d10 20 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 65        cause an e
13d20 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66  xception; theref
13d30 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ore, it must be
13d40 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d  available (i.e..
13d50 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
13d60 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20   even though it
13d70 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20  should return a
13d80 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63  failure return c
13d90 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20  ode in this..
13da0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73       #       cas
13db0 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e)...        #..
13dc0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
13dd0 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69  raint sqlite3_wi
13de0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
13df0 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  y....        tpu
13e00 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ 13e10 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n.... #.. 13e20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 13e30 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 Does our caller 13e40 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 want to reset th 13e50 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a e directories?.. 13e60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13e70 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 if {$reset} t
13e80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
13e90 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
13ea0 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73  NOTE: Now make s
13eb0 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
13ec0 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64   and temporary d
13ed0 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a  irectories are..
13ee0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
13ef0 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65    reset their de
13f00 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68  fault values, wh
13f10 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75  ich should be nu
13f20 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20  ll for both...
13f30 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13f40 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65  Since the sqlite
13f50 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
13f60 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69  ctory function i
13f70 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20  s available,..
13f80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13f90 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
13fa0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
13fb0 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31  for {set index 1
13fc0 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b  } {$index < 3} { 13fd0 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 incr index} {.. 13fe0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 13ff0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 14000 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 14010 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 14020 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 14030 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 14040 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 14050 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 14060 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ds \.. 14070 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f sqlite3_ 14080 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 14090 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d ory$index null.
140a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 72  .            } r
140b0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
140c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
140d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 140e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 140f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14100 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 "---- call sq 14110 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 14120 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 directory("$ind
14130 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ex \..
14140 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29          ", null)
14150 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c  ... ok: " $resul 14160 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 14170 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 14180 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 14190 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
141a0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
141b0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
141c0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69   call sqlite3_wi
141d0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
141e0 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20  y(" $index \.. 141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14200 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f ", null)... erro 14210 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c r: " \n\t$resul
14220 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
14230 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
14240 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
14250 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
14260 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 14270 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 nnel no\n.... 14280 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14290 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 # NOTE: Does our 142a0 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 caller want to 142b0 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 reset the direct 142c0 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e ories? This can 142d0 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 only.. # 142e0 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f 72 be perfor 142f0 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 med if SQLite is 14300 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64 loaded and read 14310 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 y for use by the 14320 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 14330 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 suite... 14340 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 14350 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26 20 if {$reset &&
14360 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d  [isSQLiteReady]}
14370 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14380 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
14390 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65  # NOTE: Now make
143a0 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
143b0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
143c0 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65   directories are
143d0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
143e0 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20      reset their
143f0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20  default values,
14400 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20  which should be
14410 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a  null for both...
14420 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
14430 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69    Since the sqli
14440 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
14450 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
14460 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20   does not..
14470 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70       #       app
14480 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c 61  ear to be availa
14490 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 73  ble, use the ass
144a0 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 63  ociated PRAGMA c
144b0 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 20  ommands..
144c0 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65     #       inste
144d0 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ad...          #
144e0 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
144f0 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c  ach directory [l
14500 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  ist data_store_d
14510 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74  irectory temp_st
14520 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b  ore_directory] {
14530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
14540 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67  t sql [appendArg
14550 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72  s "PRAGMA " $dir 14560 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b ectory " = \"\"; 14570 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 14580 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 if {[catch {ex 14590 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 ecuteSql$sql} r
145a0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
145b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
145c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 145d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 145e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 145f0 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 "---- execute 14600 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 PRAGMA "$direc
14610 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22  tory "... ok: \"
14620 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
14630 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 5c         $result \ 14640 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 14650 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 14660 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 14670 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
14680 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
14690 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
146a0 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22  execute PRAGMA "
146b0 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e   $directory "... 146c0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c \ 146e0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
146f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
14700 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
14710 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
14720 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
14730 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c    # NOTE: Finall
14740 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 72  y, show the curr
14750 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
14760 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65   database and te
14770 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23  mporary..      #
14780 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 69         directori
14790 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e  es.  This can on
147a0 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20  ly be performed
147b0 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61  if SQLite is loa
147c0 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ded..      #
147d0 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72     and ready for
147e0 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
147f0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23   suite...      #
14800 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53  ..      if {[isS
14810 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65  QLiteReady]} the
14820 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  n {..        for
14830 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b  each directory [
14840 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f  list data_store_
14850 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73  directory temp_s
14860 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20  tore_directory]
14870 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
14880 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 14890 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 endArgs "---- ch 148a0 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74 ecking "$direct
148b0 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20  ory "... "]....
148c0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c           set sql
148d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52   [appendArgs "PR
148e0 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72  AGMA " $director 148f0 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 y \;].... 14900 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 if {[catch {e 14910 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73 xecuteSql$sql s
14920 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d  calar} result] =
14930 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
14940 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $14950 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 14960 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 rgs "ok: \""$re
14970 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  sult \"\n]..
14980 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
14990 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
149a0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 149b0 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22 ndArgs "error: " 149c0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
149d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
149e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
149f0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
14a00 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74    proc loadSQLit
14a10 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20  eTestSettings {
14a20 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20  channel {suffix
14a30 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65  ""} {quiet false
14a40 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
14a50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
14a60 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73  ip loading the s
14a70 65 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 72  ettings if their
14a80 20 75 73 61 67 65 20 68 61 73 20 62 65 65 6e 20   usage has been
14a90 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20  disabled...
14aa0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b   #..      if {![
14ab0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
14ac0 28 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 69  (sqliteTestSetti
14ad0 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ngs)]} then {..
14ae0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14af0 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63    # NOTE: Load c
14b00 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61  ustom per-user a
14b10 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74  nd/or per-host t
14b20 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77  est settings now
14b30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
14b40 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
14b50 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61  exists ::tcl_pla
14b60 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68  tform(user)]} th
14b70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
14b80 73 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 73  set userSettings
14b90 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a  FileName [file j
14ba0 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69  oin [getCommonDi
14bb0 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20  rectory] \..
14bc0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
14bd0 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24  dArgs settings $14be0 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f suffix .$::tcl_
14bf0 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e  platform(user) .
14c00 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eagle]]....
14c10 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
14c20 78 69 73 74 73 20 24 75 73 65 72 53 65 74 74 69  xists $userSetti 14c30 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 ngsFileName]} th 14c40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14c50 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
14c60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14c70 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 14c80 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 14c90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14ca0 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 "---- loadi 14cb0 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 ng per-user test 14cc0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 14cd0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 14ce0 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74$userSet
14cf0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22  tingsFileName \"
14d00 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ...\n]..
14d10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
14d20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
14d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
14d40 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
14d50 20 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 74   source $userSet 14d60 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a tingsFileName].. 14d70 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 } er 14d80 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 14d90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 14da0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
14db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14dc0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 14dd0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14df0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 14e00 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 : failed to load 14e10 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e per-user settin 14e20 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 gs file \"" \.. 14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14e40 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73$userSettings
14e50 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72  FileName "\", er
14e60 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 14e70 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 14e80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 14e90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 14ea0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 14eb0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
14ec0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
14ed0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
14ee0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 14ef0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 14f00 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 14f10 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 skipped loading 14f20 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 per-user test s 14f30 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 14f40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14f50 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69$userSetti
14f60 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c  ngsFileName "\",
14f70 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
14f80 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
14f90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
14fa0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
14fb0 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23  .        #######
14fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
15010 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
15020 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74  cl_platform(host
15030 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
15040 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65        set hostSe
15050 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b  ttingsFileName [
15060 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f  file join [getCo
15070 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c  mmonDirectory] \
15080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15090 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74  [appendArgs sett
150a0 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24  ings $suffix .$
150b0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68  ::tcl_platform(h
150c0 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d  ost) .eagle]]...
150d0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
150e0 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73  file exists $hos 150f0 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 15100 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 15110 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
15120 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
15130 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
15140 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 15150 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 15160 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 15170 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 loading per-hos 15180 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 t test settings 15190 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68$h
151b0 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
151c0 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20  ame \"...\n]..
151d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
151e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
151f0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
15200 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31         uplevel 1
15210 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68   [list source $h 15220 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 15230 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ame].. 15240 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e } error]} then 15250 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15260 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
15270 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15280 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 15290 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 152a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 152b0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 152c0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 152d0 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 o load per-host 152e0 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 settings file \" 152f0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 15300 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65$hostSe
15310 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22  ttingsFileName "
15320 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
15330 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 15340 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 15350 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 15360 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 15370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 15380 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
15390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
153a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 153b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 153d0 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c "---- skipped l 153e0 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 oading per-host 153f0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 test settings fi 15400 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 le \"" \.. 15410 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73$hos
15420 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
15430 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e  e "\", it does n
15440 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
15450 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
15460 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15470 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
15480 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
15490 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72   runSQLiteTestPr
154a0 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20  ologue {} {..
154b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
154c0 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67  TE: Skip running
154d0 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c   our custom prol
154e0 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e  ogue if the main
154f0 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20   one has been..
15500 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69       #       ski
15510 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  pped...      #..
15520 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
15530 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f   exists ::no(pro
15540 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74  logue.eagle)]} t
15550 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
15560 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
15570 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f  : Load the "befo
15580 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  re-constraints"
15590 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
155a0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d  and/or per-host.
155b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
155c0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e   test settings n
155d0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
155e0 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
155f0 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
15600 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $15610 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 15620 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 before].... 15630 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 15640 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 NOTE: Determine 15650 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 the names of the 15660 20 6e 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d native platform 15670 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 and architectur 15680 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 15690 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 156a0 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 orm [getBuildPla 156b0 74 66 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 tform true].. 156c0 20 20 20 20 20 73 65 74 20 61 72 63 68 69 74 65 set archite 156d0 63 74 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 cture [architect 156e0 75 72 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 ureForPlatform$
156f0 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
15700 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15710 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65  # NOTE: Show the
15720 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72   platform and ar
15730 63 68 69 74 65 63 74 75 72 65 20 75 73 65 64 20  chitecture used
15740 74 6f 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74  to help locate t
15750 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
15760 20 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64      native build
15770 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20   files...
15780 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
15790 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 157a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 157b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 157c0 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 -- platform for 157d0 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 locating native 157e0 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c build files is \ 157f0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 15800 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e$platform \"\n
15810 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  ]....        tpu
15820 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 15830 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 15840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 15850 2d 2d 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 --- architecture 15860 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 for locating na 15870 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 tive build files 15880 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 is \"" \.. 15890 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63$architec
158a0 74 75 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20  ture \"\n]....
158b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
158c0 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61   # NOTE: Build a
158d0 20 6c 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75   list of configu
158e0 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61  ration files tha
158f0 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  t we handle...
15900 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15910 20 73 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e   set configFileN
15920 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  ames [list \..
15930 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
15940 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
15950 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20  .config]....
15960 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
15970 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c   NOTE: Build a l
15980 69 73 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79  ist of auxiliary
15990 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69   Managed Debuggi
159a0 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d  ng Assistants (M
159b0 44 41 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20  DA)..        #
159c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
159d0 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  on files that we
159e0 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
159f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
15a00 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61   mdaConfigFileNa
15a10 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
15a20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 53 68           EagleSh
15a30 65 6c 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f  ell32.exe.mda.co
15a40 6e 66 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65  nfig Installer.e
15a50 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d  xe.mda.config \.
15a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
15a70 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  t.exe.mda.config
15a80 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64   testlinq.exe.md
15a90 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20  a.config \..
15aa0 20 20 20 20 20 20 20 20 74 65 73 74 65 66 36 2e          testef6.
15ab0 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d  exe.mda.config].
15ac0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15ad0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
15ae0 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  ild the list of
15af0 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74  external files t
15b00 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20  hat we handle.
15b10 53 6f 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20  Some of..
15b20 20 23 20 20 20 20 20 20 20 74 68 65 73 65 20 66   #       these f
15b30 69 6c 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69  iles may be nati
15b40 76 65 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65  ve and/or manage
15b50 64 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61  d assemblies tha
15b60 74 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23  t are..        #
15b70 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20         required
15b80 74 6f 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f  to perform vario
15b90 75 73 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20  us tests...
15ba0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
15bb0 74 20 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61  t externalFileNa
15bc0 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
15bd0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
15be0 6f 69 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77  oin EntityFramew
15bf0 6f 72 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20  ork lib [string
15c00 6d 61 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d  map [list Fx ""]
15c10 20 5b 73 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20   [string \..
15c20 20 20 20 20 20 20 20 20 6d 61 70 20 5b 6c 69 73          map [lis
15c30 74 20 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78  t netFx451 netFx
15c40 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74  45] [getBuildNet
15c50 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d  Fx]]] EntityFram
15c60 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  ework.dll]]....
15c70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15c80 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
15c90 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69  the list of nati
15ca0 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  ve assembly file
15cb0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
15cc0 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  .  The..
15cd0 23 20 20 20 20 20 20 20 72 65 61 73 6f 6e 20 74  #       reason t
15ce0 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  he "System.Data.
15cf0 53 51 4c 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65  SQLite.dll" file
15d00 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65 72   is included her
15d10 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  e is..        #
15d20 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74        because it
15d30 20 63 6f 75 6c 64 20 62 65 20 74 68 65 20 6d 69   could be the mi
15d40 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
15d50 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
15d60 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
15d70 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  eFileNames [list
15d80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15d90 73 71 6c 69 74 65 33 2e 64 6c 6c 20 53 51 4c 69  sqlite3.dll SQLi
15da0 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 53  te.Interop.dll S
15db0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
15dc0 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  e.dll]....
15dd0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
15de0 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c  OTE: Build the l
15df0 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61  ist of managed a
15e00 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68  ssembly files th
15e10 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20  at we handle...
15e20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15e30 20 20 73 65 74 20 6d 61 6e 61 67 65 64 46 69 6c    set managedFil
15e40 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  eNames [list \..
15e50 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
15e60 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
15e70 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ll System.Data.S
15e80 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 5c  QLite.Linq.dll \
15e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
15ea0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15eb0 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  .EF6.dll]....
15ec0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15ed0 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  # NOTE: Remove a
15ee0 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  ny test constrai
15ef0 6e 74 73 20 74 68 61 74 20 72 65 66 65 72 20 74  nts that refer t
15f00 6f 20 74 68 65 20 6e 61 74 69 76 65 20 61 6e 64  o the native and
15f10 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  /or..        #
15f20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73       managed ass
15f30 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
15f40 20 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73   we handle unles
15f50 73 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d  s forbidden from
15f60 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
15f70 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20    doing so...
15f80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15f90 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
15fa0 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d  s ::no(sqliteRem
15fb0 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  oveConstraints)]
15fc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15fd0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
15fe0 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65  Name $configFile 15ff0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 16000 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 16010 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 16020 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
16030 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
16040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
16050 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 16060 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 daConfigFileName 16070 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 16080 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 16090 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 160a0 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
160b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
160c0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
160d0 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72   fileName $exter 160e0 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a nalFileNames {.. 160f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f remo 16100 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 16110 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5b pendArgs file_ [ 16120 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e file tail$fileN
16130 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20  ame]]..
16140 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
16150 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
16160 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65   $nativeFileName 16170 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 16180 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 16190 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 161a0 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
161b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
161c0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
161d0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67   fileName $manag 161e0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 161f0 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 16200 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 16210 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 endArgs file_$f
16220 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
16230 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
16240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
16250 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
16260 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44  kip all System.D
16270 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
16280 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67  ed file handling
16290 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20   (deleting,..
162a0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70       #       cop
162b0 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e  ying, and loadin
162c0 67 29 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  g) if instructed
162d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
162e0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
162f0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
16300 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
16310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
16320 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
16330 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
16340 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c  o delete any fil
16350 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  es if instructed
16360 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
16370 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
16380 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
16390 28 64 65 6c 65 74 65 53 71 6c 69 74 65 46 69 6c  (deleteSqliteFil
163a0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
163b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
163c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
163d0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 43 6f 6e  (deleteSqliteCon
163e0 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  figFiles)]} then
163f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16400 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
16410 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61  me $configFileNa 16420 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 16430 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 16440 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 BinaryFile$file
16450 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
16460 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
16470 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
16480 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
16490 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
164a0 65 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46  eSqliteExternalF
164b0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
164d0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $164e0 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d mdaConfigFileNam 164f0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 16500 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 tryDeleteB 16510 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 uildFile$fileNa
16520 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..
16530 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
16540 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
16550 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 16560 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 16570 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 16580 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 16590 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
165a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
165b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
165c0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
165d0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
165e0 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69  deleteSqliteNati
165f0 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
16600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
16610 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
16620 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
16630 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65  liteImplicitFile
16640 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
16660 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 16670 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 16680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16690 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 166a0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d embly$fileName.
166b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
166c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
166d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
166e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
166f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
16700 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69  teSqliteNonImpli
16710 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
16720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16730 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
16740 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
16750 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  eSqlitePlatformF
16760 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16780 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
16790 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 167a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 167b0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 167c0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
167d0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
167f0 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
16800 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
16810 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
16820 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
16850 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
16860 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
16870 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74  eSqliteArchitect
16880 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ureFiles)] && \.
16890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
168a0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
168b0 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 168c0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 168e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 168f0 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
16900 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
16910 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
16920 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 16930 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63 leName$architec
16940 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..
16950 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
16960 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
16970 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
16980 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
169a0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
169b0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d  no(deleteSqliteM
169c0 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74  anagedFiles)]} t
169d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
169e0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
169f0 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69  eName $managedFi 16a00 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 16a10 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 16a20 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 leteAssembly$fi
16a30 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
16a40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
16a50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
16a60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
16a70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
16a80 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20  NOTE: Check for
16a90 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22  the "autoSelect"
16aa0 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e   runtime option.
16ab0 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20    If present,..
16ac0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
16ad0 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f   attempt to auto
16ae0 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74  matically select
16af0 20 74 68 65 20 66 69 72 73 74 20 61 76 61 69 6c   the first avail
16b00 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..
16b10 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 28 6f  #       build (o
16b20 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f 66 20  r "release") of
16b30 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73 74 65  SQLite and Syste
16b40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20  m.Data.SQLite..
16b50 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
16b60 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68   for use with th
16b70 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
16b80 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
16b90 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
16ba0 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f  ntimeOption auto
16bb0 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d  Select]} then {.
16bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
16bd0 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  {![checkForSQLit
16be0 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f  eBuilds $::test_ 16bf0 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 channel true]} t 16c00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 16c10 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 16c20 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 iteReleases$::t
16c30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
16c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16c50 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
16c60 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
16c70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
16c80 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 76 65  kip trying to ve
16c90 72 69 66 79 20 74 68 65 20 62 75 69 6c 64 20 64  rify the build d
16ca0 69 72 65 63 74 6f 72 79 20 69 66 20 69 6e 73 74  irectory if inst
16cb0 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  ructed;..
16cc0 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65 72     #       other
16cd0 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  wise, make sure
16ce0 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73  it actually exis
16cf0 74 73 20 6f 72 20 68 61 6c 74 20 74 68 65 20 65  ts or halt the e
16d00 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20  ntire..
16d10 20 23 20 20 20 20 20 20 20 74 65 73 74 69 6e 67   #       testing
16d20 20 70 72 6f 63 65 73 73 20 69 66 20 69 74 20 64   process if it d
16d30 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a  oes not exist...
16d40 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
16d50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
16d60 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65  o exists ::no(ve
16d70 72 69 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f  rifyBuildDirecto
16d80 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ry)]} then {..
16d90 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
16da0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
16db0 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point,
16dc0 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
16dd0 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74 20 61  ory MUST exist a
16de0 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s a..
16df0 20 23 20 20 20 20 20 20 20 76 61 6c 69 64 20 64   #       valid d
16e00 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
16e10 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
16e20 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20   to continue...
16e30 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
16e40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69            set di
16e50 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c  rectory [getBuil
16e60 64 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20  dDirectory]....
16e70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
16e80 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69  [file exists $di 16e90 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 rectory] || \.. 16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 ! 16eb0 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector 16ec0 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 y$directory]} t
16ed0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
16ee0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16ef0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75        # NOTE: Ju
16f00 73 74 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75  st prior to actu
16f10 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65  ally halting the
16f20 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
16f30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..
16f40 20 23 20 20 20 20 20 20 20 61 64 64 20 61 6e 20   #       add an
16f50 65 72 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73  error to the tes
16f60 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20  t log file...
16f70 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
16f80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
16f90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 16fa0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16fc0 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e "---- could n 16fd0 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 ot verify build 16fe0 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 directory \""$d
16ff0 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
17010 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68  ", all testing h
17020 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20  alted\n"]....
17030 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
17040 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
17050 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63  TE: Raising a sc
17060 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20  ript error from
17070 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c  this point shoul
17080 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20  d halt..
17090 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
170a0 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
170b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...
170c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
170d0 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
170e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
170f0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
17100 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c   not verify buil
17110 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20  d directory \""
17120 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17140 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 "\", all testing 17150 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 halted"].. 17160 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 17170 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 17180 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 17190 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 171a0 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 ing to copy any 171b0 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 files if instruc 171c0 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ted... 171d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 171e0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 171f0 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 69 :no(copySqliteFi 17200 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 17210 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 17220 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 17230 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66 o(copySqliteConf 17240 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 igFiles)]} then 17250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17260 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 17270 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d e$configFileNam
17280 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
17290 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69        tryCopyBui
172a0 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ldFile $fileName 172b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 172c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 172d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 172e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 172f0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 17300 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d eExternalFiles)] 17310 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17320 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17330 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 17340 20 43 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65 Copy the Manage 17350 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 d Debugging Assi 17360 73 74 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e stants (MDA) con 17370 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 figuration.. 17380 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 17390 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 file for the E 173a0 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 agle shell to th 173b0 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 e build output d 173c0 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 irectory,.. 173d0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 173e0 20 77 68 69 6c 65 20 75 73 69 6e 67 20 65 61 63 while using eac 173f0 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 6f h of the names o 17400 66 20 74 68 65 20 76 61 72 69 6f 75 73 20 6c 65 f the various le 17410 67 61 63 79 20 74 65 73 74 0d 0a 20 20 20 20 20 gacy test.. 17420 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 17430 20 65 78 65 63 75 74 61 62 6c 65 73 2e 20 20 54 executables. T 17440 68 69 73 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f his will help to 17450 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 make sure that 17460 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 all the.. 17470 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c # l 17480 65 67 61 63 79 20 74 65 73 74 73 20 72 75 6e 20 egacy tests run 17490 77 69 74 68 20 65 78 61 63 74 6c 79 20 74 68 65 with exactly the 174a0 20 73 61 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e same set of Man 174b0 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 aged.. 174c0 20 20 20 20 23 20 20 20 20 20 20 20 44 65 62 75 # Debu 174d0 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 gging Assistants 174e0 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 configured... 174f0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 17500 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 17510 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
17520 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  daConfigFileName
17530 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
17540 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61       tryCopyBina
17550 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c  ryFile EagleShel
17560 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  l.exe.mda.config
17570 20 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20   "" $fileName.. 17580 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 17590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 175a0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 175b0 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th 175c0 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 e external binar 175d0 69 65 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 ies, if any, to 175e0 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 the directory th 175f0 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 at.. 17600 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 # contai 17610 6e 73 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 ns the Eagle she 17620 6c 6c 2e 20 20 54 68 69 73 20 69 73 20 74 79 70 ll. This is typ 17630 69 63 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d ically used to m 17640 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ake.. 17650 20 20 20 23 20 20 20 20 20 20 20 73 75 72 65 20 # sure 17660 61 73 73 65 6d 62 6c 69 65 73 20 72 65 66 65 72 assemblies refer 17670 65 6e 63 65 64 20 62 79 20 74 68 65 20 6f 6e 65 enced by the one 17680 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 20 61 s being tested a 17690 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 re.. 176a0 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 # availa 176b0 62 6c 65 20 64 75 72 69 6e 67 20 74 68 65 20 74 ble during the t 176c0 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d esting process.. 176d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 176e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 176f0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 17700 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61$externalFileNa
17710 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
17720 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 45 78         tryCopyEx
17730 74 65 72 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65  ternalFile $file 17740 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 17750 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 17760 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 17770 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 17780 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 17790 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 qliteNativeFiles 177a0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 177b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 177c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 177d0 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 (copySqliteImpli 177e0 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e citFiles)]} then 177f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17800 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 17810 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
17820 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
17830 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
17840 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  pyAssembly $file 17850 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 17860 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 17870 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 17880 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 17890 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 178a0 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d (copySqliteNonIm 178b0 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 178c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 178d0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 178e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 178f0 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d pySqlitePlatform 17900 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17920 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 17930 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
17940 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17950 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
17960 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 17970 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17990 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 179a0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 bly$fileName $p 179b0 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 179c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 179e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 179f0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 17a00 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 17a10 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 liteArchitecture 17a20 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17a40 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 17a50 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
17a60 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
17a80 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
17a90 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 17aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17ab0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 tryCopyA 17ac0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
17ad0 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d  e $architecture. 17ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 17af0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 17b00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 17b10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 17b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17b30 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 17b40 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 17b50 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 pySqliteManagedF 17b60 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 17b80 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
17b90 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
17ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
17bb0 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d      tryCopyAssem
17bc0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  bly $fileName.. 17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 17be0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 17bf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 17c00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17c10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 17c20 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 p trying to load 17c30 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e any files if in 17c40 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 17c50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17c60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 17c70 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 17c80 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iteFiles)]} then 17c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17ca0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 17cb0 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 s ::no(loadSqlit 17cc0 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d eImplicitFiles)] 17cd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17ce0 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 tryLoadA 17cf0 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 ssembly System.D 17d00 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a ata.SQLite.dll.. 17d10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 17d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 17d30 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 17d40 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4c 69 :no(loadSqliteLi 17d50 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 nqFiles)]} then 17d60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17d70 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 tryLoadAssembly 17d80 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 17d90 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 ite.Linq.dll.. 17da0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 17db0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 17dc0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 17dd0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 36 46 o(loadSqliteEf6F 17de0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 17e00 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 yLoadAssembly Sy 17e10 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 17e20 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 .EF6.dll.. 17e30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17e40 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 17e50 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 17e60 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 adSqliteNonImpli 17e70 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e citFiles)]} then 17e80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17e90 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 17ea0 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 17eb0 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 itePlatformFiles 17ec0 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 17ed0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 17ee0 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
17ef0 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
17f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17f10 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c    tryLoadAssembl
17f20 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
17f30 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f  Lite.dll $platfo 17f40 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm.. 17f50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 17f60 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 17f70 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 exists ::no(load 17f80 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 SqliteArchitectu 17f90 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a reFiles)] && \.. 17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17fb0 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 17fc0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
17fd0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
17ff0 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73  LoadAssembly Sys
18000 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
18010 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72  dll $architectur 18020 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 18030 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 18040 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 18050 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18060 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 18070 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
18080 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
18090 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
180a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
180b0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
180c0 20 5c 22 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22   \"sqlite3.dll\"
180d0 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ... " \..
180e0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72         [file ver
180f0 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46  sion [getBinaryF
18100 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e  ileName sqlite3.
18110 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  dll]] \n]..
18120 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
18130 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
18140 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 18150 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 18160 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 18170 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 18180 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 version of \"SQ 18190 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 181a0 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 \"... " \.. 181b0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 [file v 181c0 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar 181d0 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 yFileName SQLite 181e0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c .Interop.dll]] \ 181f0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d n].. }... 18200 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 18210 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 18220 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
18230 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
18240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
18250 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
18260 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61  n of \"System.Da
18270 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e  ta.SQLite.dll\".
18280 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
18290 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
182a0 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
182b0 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61  leName System.Da
182c0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20  ta.SQLite.dll]]
182d0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
182e0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
182f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
18300 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 18310 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 18320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18330 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 18340 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 on of \"System.D 18350 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e ata.SQLite.Linq. 18360 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 dll\"... " \.. 18370 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 18380 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 e version [getBi 18390 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 naryFileName Sys 183a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 183b0 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a Linq.dll]] \n].. 183c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 183d0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 183e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
183f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
18400 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
18410 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
18420 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
18430 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \"System.Data.S
18440 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5c 22 2e  QLite.EF6.dll\".
18450 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
18460 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
18470 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
18480 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61  leName System.Da
18490 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c  ta.SQLite.EF6.dl
184a0 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  l]] \n]..
184b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
184c0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
184d0 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d   $platform] > 0} 184e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 184f0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 18500 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
18510 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
18520 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
18540 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
18550 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d  of \"" $platform 18560 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18570 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c "/sqlite3.dl 18580 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 l\"... " [file v 18590 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ersion \.. 185a0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 [getBi 185b0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c naryFileName sql 185c0 69 74 65 33 2e 64 6c 6c 20 24 70 6c 61 74 66 6f ite3.dll$platfo
185d0 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rm]] \n]..
185e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
185f0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
18600 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 18610 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 18620 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 18630 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 18640 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 18650 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d of \""$platform
18660 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18670 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74      "/SQLite.Int
18680 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  erop.dll\"... "
18690 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
186a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
186b0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
186c0 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72  ame SQLite.Inter
186d0 6f 70 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d  op.dll $platform 186e0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 186f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 18700 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 18710 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
18720 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
18730 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
18740 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
18750 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
18760 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c   \"" $platform \ 18770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18780 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e "/System.Data. 18790 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 187a0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 " [file version 187b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 187c0 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c [getBinaryFil 187d0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 187e0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c a.SQLite.dll$pl
187f0 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20  atform]] \n]..
18800 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
18810 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
18820 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
18830 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65  th $architecture 18840 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 18850 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 18860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 18870 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
18880 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
18890 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
188a0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
188b0 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72  rsion of \"" $ar 188c0 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 chitecture \.. 188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f "/ 188e0 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e sqlite3.dll\"... 188f0 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e " [file version 18900 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18910 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 [getBinaryFi 18920 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 leName sqlite3.d 18930 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 ll$architecture
18940 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
18950 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
18960 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
18970 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 18980 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 18990 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 189a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 189b0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 189c0 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 \""$architectu
189d0 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  re \..
189e0 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49        "/SQLite.I
189f0 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20  nterop.dll\"...
18a00 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  " [file version
18a10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18a20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c     [getBinaryFil
18a30 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74  eName SQLite.Int
18a40 65 72 6f 70 2e 64 6c 6c 20 24 61 72 63 68 69 74  erop.dll $archit 18a50 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 ecture]] \n].. 18a60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18a70 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 18a80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 18a90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
18aa0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
18ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18ac0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
18ad0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68  ion of \"" $arch 18ae0 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 itecture \.. 18af0 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79 "/Sy 18b00 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 18b10 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c .dll\"... " [fil 18b20 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 e version \.. 18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 18b40 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 18b50 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 18b60 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 te.dll$architec
18b70 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  ture]] \n]..
18b80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
18b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
18ba0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
18bb0 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 6f   Grab the list o
18bc0 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  f managed assemb
18bd0 6c 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 72  lies for the cur
18be0 72 65 6e 74 20 70 72 6f 63 65 73 73 0d 0a 20 20  rent process..
18bf0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
18c00 64 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20  d report on the
18c10 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
18c20 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e  te related ones.
18c30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18c40 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c       set assembl
18c50 69 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ies [object invo
18c60 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72  ke AppDomain.Cur
18c70 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 73  rentDomain GetAs
18c80 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20  semblies]....
18c90 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
18ca0 61 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61 73  ach assembly $as 18cb0 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 semblies {.. 18cc0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 18cd0 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 6d g match \{System 18ce0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 .Data.SQLite*$a
18cf0 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b  ssembly]} then {
18d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
18d10 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 18d20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 18d30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18d40 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c "---- found l 18d50 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 oaded assembly: 18d60 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d "$assembly \n].
18d70 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
18d80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18d90 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
18da0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 18db0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 18dd0 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 -- define consta 18de0 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d nts for \"System 18df0 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e .Data.SQLite\".. 18e00 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 18e10 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 18e20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 18e30 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 18e40 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 18e60 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 18e70 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 .SQLite3 DefineC 18e80 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 onstants.. 18e90 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 } defineCons 18ea0 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tants] == 0} the 18eb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 18ec0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
18ed0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
18ee0 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b  gs [formatList [
18ef0 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20  lsort \..
18f00 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65           $define 18f10 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 Constants] <none 18f20 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 >] \n].. 18f30 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 18f40 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
18f50 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
18f60 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
18f70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
18f80 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
18f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
18fa0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 18fb0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 18fc0 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 "---- sourc 18fd0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 e version of \"S 18fe0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 18ff0 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a e.dll\"... ".... 19000 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 19010 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 19020 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 19030 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 19040 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 19050 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 19060 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 19070 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 Connection Provi 19080 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 derVersion.. 19090 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d } version] 190a0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 190b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 190c0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
190d0 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
190e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
190f0 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20      set version
19100 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  null..
19110 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
19120 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 19130 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 19140 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d gs$version \n].
19150 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
19160 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
19170 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 19180 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 19190 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 191a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 191b0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 191c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
191d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
191f0 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b  --- source check
19200 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e  out of \"System.
19210 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c  Data.SQLite.dll\
19220 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  "... "....
19230 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
19240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
19250 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
19260 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
19270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19280 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
19290 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite.SQLiteConnec
192a0 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75  tion ProviderSou
192b0 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  rceId..
192c0 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20   } sourceId] ==
192d0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
192e0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
192f0 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63  ng length $sourc 19300 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then 19310 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19320 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu 19330 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 19340 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 19350 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
19360 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
19370 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a   $sourceId \n].. 19380 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 19390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 193a0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
193b0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
193c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
193d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
193e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
193f0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20  NOTE: Check the
19400 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73  available builds
19410 20 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22   (and "releases"
19420 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d  ) of SQLite and.
19430 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
19440 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
19450 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
19460 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
19470 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a  rSQLiteBuilds $: 19480 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 :test_channel.. 19490 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 194a0 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a QLiteReleases$:
194b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
194c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
194d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c      # NOTE: Now,
194e0 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77   we need to know
194f0 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
19500 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61  ore library is a
19510 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..
19520 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20    #       (i.e.
19530 62 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61  because the mana
19540 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e  ged-only System.
19550 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65  Data.SQLite asse
19560 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20  mbly can..
19570 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77    #       load w
19580 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76  ithout it; howev
19590 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f  er, it cannot do
195a0 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c   anything useful
195b0 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20   without..
195c0 20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20    #       it).
195d0 49 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20  If we are using
195e0 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
195f0 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61  ssembly and we a
19600 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20  lready..
19610 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74  #       found it
19620 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73   (above), this s
19630 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63  hould always suc
19640 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  ceed...        #
19650 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
19660 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20  orSQLiteLibrary
19670 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 19680 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 19690 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 196a0 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 eck if the SQLit 196b0 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 196c0 6c 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e ly is available. 196d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 196e0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 196f0 69 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 iteInterop$::te
19700 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
19710 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19720 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
19730 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  he SQLite databa
19740 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
19750 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20   directories...
19760 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
19770 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
19780 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74  Directories $::t 19790 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 197a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 197b0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 197c0 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 t to determine i 197d0 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c f various compil 197e0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e e-time options n 197f0 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 eeded for.. 19800 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 19810 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 constraints were 19820 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 enabled for the 19830 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 19840 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 y. There.. 19850 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 # are s 19860 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 ome compile-time 19870 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 options that mu 19880 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 st also have bee 19890 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 n enabled.. 198a0 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 # for t 198b0 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d he interop assem 198c0 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 bly in order to 198d0 62 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 be effective. F 198e0 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 or those.. 198f0 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e # option 19900 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 s, it will be as 19910 73 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 sumed that it wa 19920 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 s enabled for th 19930 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 e interop.. 19940 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d # assem 19950 62 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e bly if it was en 19960 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 abled for the ma 19970 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d naged assembly.. 19980 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 19990 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 foreach defi 199a0 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 neConstant [list 199b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 199c0 43 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e CHECK_STATE COUN 199d0 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 T_HANDLE DEBUG I 199e0 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 NTEROP_CODEC INT 199f0 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 EROP_DEBUG \.. 19a00 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 19a10 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 P_EXTENSION_FUNC 19a20 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 4c 45 TIONS INTEROP_LE 19a30 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 GACY_CLOSE INTER 19a40 4f 50 5f 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 OP_LOG \.. 19a50 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 INTEROP_TE 19a60 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 ST_EXTENSION INT 19a70 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 19a80 4c 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 LE NET_20 NET_35 19a90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19aa0 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 NET_40 NET_45 NE 19ab0 54 5f 34 35 31 20 4e 45 54 5f 43 4f 4d 50 41 43 T_451 NET_COMPAC 19ac0 54 5f 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f T_20 PLATFORM_CO 19ad0 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c MPACTFRAMEWORK \ 19ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 52 .. PR 19af0 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 ELOAD_NATIVE_LIB 19b00 52 41 52 59 20 52 45 54 41 52 47 45 54 41 42 4c RARY RETARGETABL 19b10 45 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 E SQLITE_STANDAR 19b20 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 D \.. 19b30 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 THROW_ON_DISPOS 19b40 45 44 20 54 52 41 43 45 20 54 52 41 43 45 5f 43 ED TRACE TRACE_C 19b50 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f ONNECTION TRACE_ 19b60 48 41 4e 44 4c 45 20 5c 0d 0a 20 20 20 20 20 20 HANDLE \.. 19b70 20 20 20 20 20 20 54 52 41 43 45 5f 50 52 45 4c TRACE_PREL 19b80 4f 41 44 20 54 52 41 43 45 5f 53 48 41 52 45 44 OAD TRACE_SHARED 19b90 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 TRACE_STATEMENT 19ba0 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 5c TRACE_WARNING \ 19bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 .. TR 19bc0 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 ACK_MEMORY_BYTES 19bd0 20 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d USE_ENTITY_FRAM 19be0 45 57 4f 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 EWORK_6 USE_INTE 19bf0 52 4f 50 5f 44 4c 4c 20 5c 0d 0a 20 20 20 20 20 ROP_DLL \.. 19c00 20 20 20 20 20 20 20 55 53 45 5f 50 52 45 50 41 USE_PREPA 19c10 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b RE_V2 WINDOWS] { 19c20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 19c30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 19c40 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f Check if the co 19c50 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 19c60 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 n is listed in t 19c70 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 he list of.. 19c80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64 # "d 19c90 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 efine constants" 19ca0 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 kept track of b 19cb0 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 y the managed as 19cc0 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 19cd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19ce0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 checkForSQLiteDe 19cf0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a fineConstant$::
19d00 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65  test_channel $de 19d10 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 fineConstant.. 19d20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 19d30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 19d40 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 19d50 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 current build ye 19d60 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 ar. Basically, 19d70 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a this indicates.. 19d80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19d90 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 which version of 19da0 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 MSBuild and/or 19db0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 Visual Studio wa 19dc0 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 s used to.. 19dd0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 # compi 19de0 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 le the assembly 19df0 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 binaries under t 19e00 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d est... #. 19e10 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
19e20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
19e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
19e40 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
19e50 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
19e60 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e  ite build year..
19e70 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  . "....        s
19e80 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c  et year [getBuil
19e90 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20  dYear]..
19ea0 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  addConstraint [a
19eb0 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59  ppendArgs buildY
19ec0 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20  ear. $year].. 19ed0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
19ee0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
19ef0 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20  ndArgs \" $year 19f00 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 \"\n].... 19f10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 19f20 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 TE: Check the cu 19f30 72 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 rrent build .NET 19f40 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 Framework. Bas 19f50 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 ically, this.. 19f60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 19f70 64 69 63 61 74 65 73 20 77 68 69 63 68 20 76 65 dicates which ve 19f80 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 rsion of the .NE 19f90 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 T Framework is b 19fa0 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 eing.. # 19fb0 20 20 20 20 20 20 75 73 65 64 20 62 79 20 74 68 used by th 19fc0 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 e assembly binar 19fd0 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d ies under test.. 19fe0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 19ff0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1a000 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
1a010 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
1a020 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
1a030 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62  em.Data.SQLite b
1a040 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77  uild .NET Framew
1a050 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ork... "....
1a060 20 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b 67      set netFx [g
1a070 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20  etBuildNetFx]..
1a080 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
1a090 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1a0a0 20 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e   buildFramework.
1a0b0 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20   $netFx].. 1a0c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1a0d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1a0e0 72 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22  rgs \" $netFx \" 1a0f0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 1a100 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1a110 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 : Check the curr 1a120 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 ent build config 1a130 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 uration. This s 1a140 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a hould normally.. 1a150 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1a160 62 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 be either "Debug 1a170 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d " or "Release".. 1a180 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1a190 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1a1a0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
1a1b0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
1a1c0 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
1a1d0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62  em.Data.SQLite b
1a1e0 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69  uild configurati
1a1f0 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  on... "....
1a200 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61     set configura
1a210 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f  tion [getBuildCo
1a220 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20  nfiguration]..
1a230 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
1a240 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
1a250 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  buildConfigurati
1a260 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69  on. $configurati 1a270 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 on].. tpu 1a280 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1a290 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1a2a0 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  " $configuration 1a2b0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 \"\n].... 1a2c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1a2d0 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 OTE: Try to setu 1a2e0 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 p an interrupt c 1a2f0 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 allback using th 1a300 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 e script debugge 1a310 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 r.. # 1a320 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e that will can 1a330 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 cel all SQL quer 1a340 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 ies in progress 1a350 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 for all database 1a360 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1a370 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e connections kn 1a380 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 own to this inte 1a390 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 1a3a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 1a3b0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1a3c0 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 :no(sqliteInterr 1a3d0 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 uptCallback)]} t 1a3e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a3f0 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 setupDbInterrup 1a400 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 tCallback$::tes
1a410 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73  t_channel $::tes 1a420 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d t_log.. } 1a430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1a440 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 1a450 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 heck for the nat 1a460 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ive runtime opti 1a470 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 on, which would 1a480 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 mean we are.. 1a490 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 # usi 1a4a0 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 ng the mixed-mod 1a4b0 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 e assembly... 1a4c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a4d0 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f checkForRuntimeO 1a4e0 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 ption$::test_ch
1a4f0 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a  annel native....
1a500 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a510 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
1a520 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69   if the test sui
1a530 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20  te should count
1a540 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1a550 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20  nnections..
1a560 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e     #       "open
1a570 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22  ed" and "closed"
1a580 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77   from the pool w
1a590 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  hen determining
1a5a0 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20  if a test..
1a5b0 20 20 20 23 20 20 20 20 20 20 20 70 61 73 73 65     #       passe
1a5c0 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68  d.  Disabling th
1a5d0 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 73  is behavior is s
1a5e0 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61  ometimes necessa
1a5f0 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  ry (e.g...
1a600 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67    #       during
1a610 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 73   the release tes
1a620 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65  ting process) be
1a630 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20  cause there are
1a640 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20  several..
1a650 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74   #       tests t
1a660 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20  hat rely on the
1a670 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f  "opened from poo
1a680 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67  l" count being g
1a690 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20  reater..
1a6a0 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72  #       than zer
1a6b0 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20  o.  These tests
1a6c0 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20  may fail due to
1a6d0 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e  the non-determin
1a6e0 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23  istic..        #
1a6f0 20 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20         behavior
1a700 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65  of the CLR GC, e
1a710 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69  ven when there i
1a720 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20  s no bug in the
1a730 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20  code..        #
1a740 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74        being test
1a750 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
1a760 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
1a770 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a  RuntimeOption $: 1a780 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f :test_channel no 1a790 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 PoolCounts.... 1a7a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1a7b0 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 # NOTE: Report 1a7c0 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 the resource usa 1a7d0 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e ge prior to runn 1a7e0 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a ing any tests... 1a7f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a800 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 reportSQLiteR 1a810 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 esources$::test
1a820 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
1a830 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1a840 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the
1a850 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6d  list of native m
1a860 6f 64 75 6c 65 73 20 66 6f 72 20 74 68 65 20 63  odules for the c
1a870 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 61  urrent process a
1a880 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  nd..        #
1a890 20 20 20 20 72 65 70 6f 72 74 20 6f 6e 20 74 68      report on th
1a8a0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
1a8b0 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65  Lite related one
1a8c0 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
1a8d0 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c         set modul
1a8e0 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  es [object invok
1a8f0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1a900 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74   System.Diagnost
1a910 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43  ics.Process.GetC
1a920 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f  urrentProcess Mo
1a930 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  dules]....
1a940 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
1a950 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24   -alias module $1a960 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20 modules {.. 1a970 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a980 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f # NOTE: The mo 1a990 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 dule file name h 1a9a0 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d ere must be norm 1a9b0 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 alized... 1a9c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a9d0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 1a9e0 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d le normalize [$m
1a9f0 6f 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d  odule FileName]]
1aa00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1aa10 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match
1aa20 2d 6e 6f 63 61 73 65 20 2a 2f 73 71 6c 69 74 65  -nocase */sqlite
1aa30 33 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d  3.dll $fileName] 1aa40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1aa50 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1aa60 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1aa70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1aa80 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1aa90 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51   found loaded SQ
1aaa0 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72  Lite native libr
1aab0 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d  ary module: " \.
1aac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1aad0 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a   $fileName \n].. 1aae0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1aaf0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 if {[string matc 1ab00 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h \.. 1ab10 20 20 20 2d 6e 6f 63 61 73 65 20 2a 2f 53 51 4c -nocase */SQL 1ab20 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 ite.Interop.dll 1ab30 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
1ab40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1ab50 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1ab60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1ab70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1ab80 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 "---- found 1ab90 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69 loaded SQLite i 1aba0 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 1abb0 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 module: " \.. 1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69$fi
1abd0 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20  leName \n]..
1abe0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1abf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
1ac00 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1ac10 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1ac20 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 1ac30 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 1ac40 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 1ac50 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f ns for SQLite co 1ac60 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d re library... ". 1ac70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1ac80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1ac90 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1aca0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1acb0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1acc0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1acd0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1ace0 69 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 ite3 SQLiteCompi 1acf0 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 leOptions.. 1ad00 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 } compileOp 1ad10 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tions] == 0} the 1ad20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1ad30 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1ad40 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1ad50 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b  gs [formatList [
1ad60 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20  lsort \..
1ad70 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c           $compil 1ad80 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e eOptions] <none> 1ad90 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 1ada0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1adb0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1adc0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b  test_channel unk
1add0 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20  nown\n..
1ade0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1adf0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
1ae00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1ae10 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1ae20 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 1ae30 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c "---- compil 1ae40 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 e-time options f 1ae50 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f or SQLite intero 1ae60 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d p assembly... ". 1ae70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1ae80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1ae90 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1aea0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1aeb0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1aec0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1aed0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1aee0 69 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 ite3 InteropComp 1aef0 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 ileOptions.. 1af00 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f } compileO 1af10 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 ptions] == 0} th 1af20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1af30 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1af40 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1af50 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20  rgs [formatList
1af60 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  [lsort \..
1af70 20 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69            $compi 1af80 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 leOptions] <none 1af90 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 >] \n].. 1afa0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1afb0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1afc0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
1afd0 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
1afe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1aff0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1b000 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
1b010 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 74 65  ow the active te
1b020 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d  st constraints..
1b030 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1b040 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1b050 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1b060 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 dArgs "---- cons 1b070 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 traints: " \.. 1b080 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 [forma 1b090 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 tList [lsort [ge 1b0a0 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c tConstraints]] < 1b0b0 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 none>] \n].... 1b0c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1b0d0 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 # NOTE: Save th 1b0e0 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e e test constrain 1b0f0 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 ts for use by th 1b100 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69 6e reads created in 1b110 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 this.. # 1b120 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 applicati 1b130 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 on domain. This 1b140 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 is necessary be 1b150 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 cause all the Ea 1b160 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 gle.. # 1b170 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 "test conte 1b180 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 xt" information 1b190 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a is per-thread... 1b1a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1b1b0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1b1c0 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 ists ::test_cons 1b1d0 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b traints]} then { 1b1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1b1f0 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e ::test_constrain 1b200 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 ts$::eagle_test
1b210 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a  s(constraints)..
1b220 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1b230 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b240 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65  # NOTE: Load the
1b250 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69   "after-constrai
1b260 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d  nts" custom per-
1b270 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d  user and/or per-
1b280 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  host..        #
1b290 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69        test setti
1b2a0 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ngs now...
1b2b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c    #..        upl
1b2c0 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61  evel 1 [list loa
1b2d0 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69  dSQLiteTestSetti
1b2e0 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ngs $::test_chan 1b2f0 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 nel .after].... 1b300 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b310 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 # NOTE: Show w 1b320 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 hen our tests ac 1b330 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f tually began (no 1b340 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a w)... #.. 1b350 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1b360 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1b370 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1b380 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53           "---- S
1b390 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1b3a0 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74  e tests began at
1b3b0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1b3c0 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    [clock format
1b3d0 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d  [clock seconds]]
1b3e0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   \n]..      }..
1b3f0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1b400 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45  c runSQLiteTestE
1b410 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20  pilogue {} {..
1b420 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1b430 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e  OTE: Skip runnin
1b440 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69  g our custom epi
1b450 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69  logue if the mai
1b460 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a  n one has been..
1b470 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b        #       sk
1b480 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ipped...      #.
1b490 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66  .      if {![inf
1b4a0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70  o exists ::no(ep
1b4b0 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20  ilogue.eagle)]}
1b4c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1b4d0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1b4e0 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72  E: Show when our
1b4f0 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20   tests actually
1b500 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20  ended (now)...
1b510 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1b520 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1b530 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1b540 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1b550 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 "---- System.D 1b560 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 ata.SQLite tests 1b570 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 ended at " \.. 1b580 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 [cloc 1b590 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 k format [clock 1b5a0 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d seconds]] \n]... 1b5b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1b5c0 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 # BUGFIX: Be 1b5d0 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68 fore checking th 1b5e0 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 e final resource 1b5f0 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 s in use by SQLi 1b600 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 te, make.. 1b610 20 20 23 20 20 20 20 20 20 20 20 20 73 75 72 65 # sure 1b620 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41 both of the PRA 1b630 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 GMA related dire 1b640 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 ctory names are 1b650 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 freed... 1b660 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 1b670 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f ForSQLiteDirecto 1b680 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ries$::test_cha
1b690 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20  nnel true....
1b6a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b6b0 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70  # NOTE: Also rep
1b6c0 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65  ort the resource
1b6d0 20 75 73 61 67 65 20 61 66 74 65 72 20 72 75 6e   usage after run
1b6e0 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d  ning the tests..
1b6f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1b700 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65      reportSQLite
1b710 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73  Resources $::tes 1b720 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 1b730 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b740 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 # NOTE: Report t 1b750 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 he critical hand 1b760 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 20 le counts after 1b770 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 running the test 1b780 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1b790 20 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 65 getSQLite 1b7a0 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a HandleCounts$::
1b7b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..
1b7c0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
1b7d0 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
1b7e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b7f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b820 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
1b830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b840 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e  ### END Eagle ON
1b850 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23  LY #############
1b860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b870 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
1b880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b8a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b8c0 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a  ##..  }....  #..
1b8d0 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74    # NOTE: Save t
1b8e0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
1b8f0 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e  irectory contain
1b900 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a  ing this file...
1b910 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66    #..  if {![inf
1b920 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f  o exists common_
1b930 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
1b940 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d   {..    set comm
1b950 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69  on_directory [fi
1b960 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f  le dirname [info
1b970 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a   script]]..  }..
1b980 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
1b990 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73   Provide the Sys
1b9a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
1b9b0 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20  test package to
1b9c0 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  the interpreter.
1b9d0 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65  ..  #..  package
1b9e0 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e   provide System.
1b9f0 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74  Data.SQLite.Test
1ba00 20 31 2e 30 0d 0a 7d 0d 0a                        1.0..}..