System.Data.SQLite
Hex Artifact Content
Not logged in

• File Tests/common.eagle — part of check-in [2d06ea75cc] at 2014-01-13 02:31:03 on branch ef6 — Fix comments and formatting. (user: mistachkin size: 113118) [more...]

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 32 30 31 32 2c 20 6f 72 20   2010, 2012, or
0460: 32 30 31 33 20 62 75 69 6c 64 20 73 79 73 74 65  2013 build syste
0470: 6d 73 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65  ms.  To override
0480: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
0490: 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74       value via t
04a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c  he command line,
04b0: 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64   enter a command
04c0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
04d0: 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  of..      #
04e0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following
04f0: 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65  (all on one line
0500: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
0510: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0520: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0530: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0540: 73 74 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20  st_year 2005"..
0550: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0560: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0570: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0580: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0590: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
05a0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
05b0: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
05c0: 30 38 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  08"..      #
05d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
05e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
05f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0600: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0610: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0620: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0630: 65 61 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20  ear 2010"..
0640: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0650: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0660: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0670: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0680: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0690: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
06a0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d  test_year 2012".
06b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
06c0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
06d0: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
06e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
06f0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0700: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0710: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0720: 32 30 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20  2013"..      #
0730: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0740: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0750: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0760: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0770: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0780: 69 61 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e  ialize "unset -n
0790: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79  ocomplain test_y
07a0: 65 61 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ear"..      #
07b0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
07c0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
07d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
07e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
07f0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26   ::test_year] &&
0800: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0810: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20  $::test_year] > 0820: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0830: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 0840: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 0850: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 0860: 72 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 r. If this vari 0870: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 0880: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 0890: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 default va 08a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 08b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 08c0: 6e 6f 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 not Eagle has be 08d0: 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 en.. # 08e0: 20 20 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 compiled aga 08f0: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 0900: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 0910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0920: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
0930: 74 5f 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20  t_year..      }
0940: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
0960: 45 3a 20 49 66 20 45 61 67 6c 65 20 68 61 73 20  E: If Eagle has
0970: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67  been compiled ag
0980: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34  ainst the CLR v4
0990: 2e 30 2c 20 75 73 65 20 22 32 30 31 30 22 20 62  .0, use "2010" b
09a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
09b0: 20 20 20 64 65 66 61 75 6c 74 20 28 77 65 20 63     default (we c
09c0: 6f 75 6c 64 20 75 73 65 20 22 32 30 31 32 22 20  ould use "2012"
09d0: 6f 72 20 22 32 30 31 33 22 20 69 6e 20 74 68 61  or "2013" in tha
09e0: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 20  t case as well)
09f0: 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
0a00: 20 20 20 20 74 68 65 20 74 65 73 74 20 79 65 61      the test yea
0a10: 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 75 73  r; otherwise, us
0a20: 65 20 22 32 30 30 38 22 20 62 79 20 64 65 66 61  e "2008" by defa
0a30: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
0a50: 20 20 20 22 32 30 30 35 22 20 69 6e 20 74 68 61     "2005" in tha
0a60: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 2e  t case as well).
0a70: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
0a80: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
0a90: 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ]..        #
0aa0: 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68     version of th
0ab0: 65 20 43 4c 52 20 69 73 20 72 65 6c 65 61 73 65  e CLR is release
0ac0: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
0ad0: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 0d 0a 20  ll have to be..
0ae0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
0af0: 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66  hanged.  The def
0b00: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 74  ault test year t
0b10: 6f 20 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  o use for a part
0b20: 69 63 75 6c 61 72 20 43 4c 52 0d 0a 20 20 20 20  icular CLR..
0b30: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73      #       vers
0b40: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72  ion may be overr
0b50: 69 64 64 65 6e 20 62 79 20 73 65 74 74 69 6e 67  idden by setting
0b60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
0b70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
0b80: 20 20 20 20 20 20 22 74 65 73 74 5f 79 65 61 72        "test_year
0b90: 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72 65  _clr_v$X", where 0ba0: 20 22 24 58 22 20 6d 61 79 20 5b 63 75 72 72 65 "$X" may [curre
0bb0: 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20  ntly] be either
0bc0: 22 32 22 0d 0a 20 20 20 20 20 20 20 20 23 20 20  "2"..        #
0bd0: 20 20 20 20 20 6f 72 20 22 34 22 2e 0d 0a 20 20       or "4"...
0be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0bf0: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
0c00: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
0c10: 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e40]} then {..
0c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0c30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
0c40: 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 26 26 20  year_clr_v4] &&
0c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
0c60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0c70: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72  $::test_year_clr 0c80: 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _v4] > 0} then { 0c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 0ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 0cb0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 0cc0: 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 cified test year 0cd0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 0ce0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 0cf0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 0d00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
0d10: 61 72 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20  ar_clr_v4..
0d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0d30: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d40: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
0d50: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
0d60: 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  t test year for
0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
0d80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0da0: 20 32 30 31 30 3b 20 23 20 54 4f 44 4f 3a 20 47   2010; # TODO: G
0db0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64  ood "fallback" d
0dc0: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20  efault?..
0dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
0de0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0df0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0e00: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
0e10: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
0e20: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
0e30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 0e40: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 3e t_year_clr_v2] > 0e50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 0e60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0e70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 0e80: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 0e90: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 0ea0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 he CLR v2.0... 0eb0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 0ed0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
0ee0: 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v2..          }
0ef0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
0f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0f20: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
0f30: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
0f40: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
0f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f60: 20 20 20 20 72 65 74 75 72 6e 20 32 30 30 38 3b      return 2008;
0f70: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
0f80: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
0f90: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
0fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0fb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
0fc0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59    proc getBuildY
0fd0: 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ears {} {..
0fe0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0ff0: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73  : See if the lis
1000: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1010: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1020: 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d  den by the user.
1030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28  .      #       (
1040: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1050: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
1060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1070: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
1080: 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c  st_years] && [ll
1090: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 10a0: 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ars] > 0} then { 10b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 10d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 10e0: 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 ist of test year 10f0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1110: 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20  :test_years..
1120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1140: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1150: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
1160: 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 2e  test years (i.e.
1170: 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20   all)...
1180: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1190: 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30  n [list 2005 200
11a0: 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 33  8 2010 2012 2013
11b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
11c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
11d0: 65 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d 20  etBuildNetFx {}
11e0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
11f0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
1200: 20 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20 46   the test .NET F
1210: 72 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e 67  ramework setting
1220: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
1230: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
1240: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
1250: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
1260: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
1270: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1280: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1290: 65 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20 5c  est_net_fx] && \
12a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
12b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 12c0: 73 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d 20 st_net_fx] > 0} 12d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12f0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 1300: 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 fied test .NET F 1310: 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 ramework... 1320: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 1330: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 74 turn$::test_net
1340: 5f 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  _fx..      } els
1350: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1360: 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59   year [getBuildY
1370: 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ear]....
1380: 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d  switch -exact --
1390: 20 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20 20   $year {.. 13a0: 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 20 20 20 2005 {.. 13b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 13c0: 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 etFx20.. 13d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 13e0: 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 008 {.. 13f0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 1400: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 5.. }.. 1410: 20 20 20 20 20 20 20 20 20 20 32 30 31 30 20 7b 2010 { 1420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1430: 74 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 20 turn netFx40.. 1440: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1450: 20 20 20 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 2012 {.. 1460: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 1470: 6e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 netFx45.. 1480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1490: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 2013 {.. 14a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 14b0: 34 35 31 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 451.. } 14c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 66 61 .. defa 14d0: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ult {.. 14e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 14f0: 35 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 5; # TODO: Good 1500: 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 "fallback" defau 1510: 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lt?.. } 1520: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1530: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1540: 20 20 20 20 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 49 6e 73 74 61 6c 6c           Install
15a30 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  er.exe.mda.confi
15a40 67 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63  g test.exe.mda.c
15a50 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20  onfig \..
15a60 20 20 20 20 20 74 65 73 74 6c 69 6e 71 2e 65 78       testlinq.ex
15a70 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73  e.mda.config tes
15a80 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e  tef6.exe.mda.con
15a90 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fig]....
15aa0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
15ab0 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73  E: Build the lis
15ac0 74 20 6f 66 20 65 78 74 65 72 6e 61 6c 20 66 69  t of external fi
15ad0 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
15ae0 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a 20 20  le.  Some of..
15af0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
15b00 65 73 65 20 66 69 6c 65 73 20 6d 61 79 20 62 65  ese files may be
15b10 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 20 6d   native and/or m
15b20 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65  anaged assemblie
15b30 73 20 74 68 61 74 20 61 72 65 0d 0a 20 20 20 20  s that are..
15b40 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75      #       requ
15b50 69 72 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20  ired to perform
15b60 76 61 72 69 6f 75 73 20 74 65 73 74 73 2e 0d 0a  various tests...
15b70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15b80 20 20 20 73 65 74 20 65 78 74 65 72 6e 61 6c 46     set externalF
15b90 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c  ileNames [list \
15ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
15bb0 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74 79 46  ile join EntityF
15bc0 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b 73 74  ramework lib [st
15bd0 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 46  ring map [list F
15be0 78 20 22 22 5d 20 5b 73 74 72 69 6e 67 20 5c 0d  x ""] [string \.
15bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 70  .            map
15c00 20 5b 6c 69 73 74 20 6e 65 74 46 78 34 35 31 20   [list netFx451
15c10 6e 65 74 46 78 34 35 5d 20 5b 67 65 74 42 75 69  netFx45] [getBui
15c20 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 6e 74 69 74  ldNetFx]]] Entit
15c30 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d  yFramework.dll]]
15c40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
15c50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
15c60 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66  uild the list of
15c70 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79   native assembly
15c80 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
15c90 61 6e 64 6c 65 2e 20 20 54 68 65 0d 0a 20 20 20  andle.  The..
15ca0 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61       #       rea
15cb0 73 6f 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e  son the "System.
15cc0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22  Data.SQLite.dll"
15cd0 20 66 69 6c 65 20 69 73 20 69 6e 63 6c 75 64 65   file is include
15ce0 64 20 68 65 72 65 20 69 73 0d 0a 20 20 20 20 20  d here is..
15cf0 20 20 20 23 20 20 20 20 20 20 20 62 65 63 61 75     #       becau
15d00 73 65 20 69 74 20 63 6f 75 6c 64 20 62 65 20 74  se it could be t
15d10 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
15d20 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...
15d30 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
15d40 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
15d50 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
15d60 20 20 20 20 20 73 71 6c 69 74 65 33 2e 64 6c 6c       sqlite3.dll
15d70 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e   SQLite.Interop.
15d80 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  dll System.Data.
15d90 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20  SQLite.dll]....
15da0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15db0 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
15dc0 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61  the list of mana
15dd0 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  ged assembly fil
15de0 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
15df0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
15e00 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61 67         set manag
15e10 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  edFileNames [lis
15e20 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
15e30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
15e40 69 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44  ite.dll System.D
15e50 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
15e60 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dll \..
15e70 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
15e80 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a  QLite.EF6.dll]..
15e90 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
15ea0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d       # NOTE: Rem
15eb0 6f 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e  ove any test con
15ec0 73 74 72 61 69 6e 74 73 20 74 68 61 74 20 72 65  straints that re
15ed0 66 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76  fer to the nativ
15ee0 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20  e and/or..
15ef0 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65    #       manage
15f00 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73  d assembly files
15f10 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20   that we handle
15f20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e  unless forbidden
15f30 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23   from..        #
15f40 20 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e         doing so.
15f50 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
15f60 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
15f70 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69  exists ::no(sqli
15f80 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69  teRemoveConstrai
15f90 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  nts)]} then {..
15fa0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
15fb0 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69   fileName $confi 15fc0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 gFileNames {.. 15fd0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 15fe0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 15ff0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 ndArgs file_$fi
16000 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
16010 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
16020 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
16030 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c  me $mdaConfigFil 16040 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 16050 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 16060 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 16070 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
16080 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
16090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
160a0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $160b0 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 externalFileName 160c0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 160d0 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 160e0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 160f0 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 le_ [file tail$
16100 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20  fileName]]..
16110 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
16120 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
16130 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 16140 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 16150 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 16160 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 16170 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
16180 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
16190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
161a0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $161b0 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 161c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 161d0 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 161e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 161f0 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 e_$fileName]..
16200 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
16210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
16220 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
16230 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 73  TE: Skip all Sys
16240 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
16250 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61 6e  related file han
16260 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 2c  dling (deleting,
16270 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
16280 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 6c    copying, and l
16290 6f 61 64 69 6e 67 29 20 69 66 20 69 6e 73 74 72  oading) if instr
162a0 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
162b0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
162c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
162d0 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  o(sqliteFiles)]}
162e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
162f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
16300 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
16310 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e  ing to delete an
16320 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72  y files if instr
16330 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
16340 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
16350 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
16360 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
16370 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
16380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
16390 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
163a0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
163b0 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d  teConfigFiles)]}
163c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
163d0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
163e0 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46  ileName $configF 163f0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 16400 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 16410 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 16420 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
16430 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
16440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
16450 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
16460 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
16470 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74 65  deleteSqliteExte
16480 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65  rnalFiles)]} the
16490 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
164a0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
164b0 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69  ame $mdaConfigFi 164c0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 164d0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 164e0 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 leteBuildFile$f
164f0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
16500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
16510 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
16520 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65  h fileName $exte 16530 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d rnalFileNames {. 16540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16550 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 tryDeleteBinary 16560 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a File$fileName..
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16580 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
165a0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
165b0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
165c0 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20  eNativeFiles)]}
165d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
165e0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
165f0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
16600 65 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69  eteSqliteImplici
16610 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
16620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16630 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
16640 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  me $nativeFileNa 16650 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 16660 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 16670 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 teAssembly$file
16680 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
16690 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
166a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
166b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
166c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
166d0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e  (deleteSqliteNon
166e0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
166f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16700 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
16710 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
16720 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74  deleteSqlitePlat
16730 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c  formFiles)] && \
16740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16750 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
16760 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 16770 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 16790 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 167a0 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
167b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
167c0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
167d0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 167e0 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 ame$platform..
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16800 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
16810 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
16820 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
16830 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
16840 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68  deleteSqliteArch
16850 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
16860 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
16870 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
16880 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 16890 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 168a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 168b0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 168c0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
168d0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
168f0 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
16900 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63  y $fileName$arc
16910 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20  hitecture..
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16940 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
16950 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
16960 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
16970 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
16980 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
16990 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73  liteManagedFiles
169a0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
169b0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
169c0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61  h fileName $mana 169d0 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a gedFileNames {.. 169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 169f0 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c tryDeleteAssembl 16a00 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 y$fileName..
16a10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
16a20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
16a30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
16a40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16a50 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
16a60 20 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65   for the "autoSe
16a70 6c 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70  lect" runtime op
16a80 74 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e  tion.  If presen
16a90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  t,..          #
16aa0 20 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f        attempt to
16ab0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73   automatically s
16ac0 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 20  elect the first
16ad0 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20  available..
16ae0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69       #       bui
16af0 6c 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22  ld (or "release"
16b00 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20  ) of SQLite and
16b10 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16b20 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  te..          #
16b30 20 20 20 20 20 20 66 6f 72 20 75 73 65 20 77 69        for use wi
16b40 74 68 20 74 68 65 20 74 65 73 74 20 73 75 69 74  th the test suit
16b50 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e...          #.
16b60 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
16b70 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  hasRuntimeOption
16b80 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68   autoSelect]} th
16b90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
16ba0 20 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72    if {![checkFor
16bb0 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a  SQLiteBuilds $:: 16bc0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 test_channel tru 16bd0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 16be0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 16bf0 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 orSQLiteReleases 16c00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
16c10 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20   true..
16c20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
16c30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
16c40 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
16c50 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
16c60 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75  to verify the bu
16c70 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66  ild directory if
16c80 20 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20   instructed;..
16c90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16ca0 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20  otherwise, make
16cb0 73 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79  sure it actually
16cc0 20 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20   exists or halt
16cd0 74 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20  the entire..
16ce0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
16cf0 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66  sting process if
16d00 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
16d10 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  st...          #
16d20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
16d30 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
16d40 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69  no(verifyBuildDi
16d50 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20  rectory)]} then
16d60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
16d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
16d80 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f  NOTE: At this po
16d90 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64  int, the build d
16da0 69 72 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78  irectory MUST ex
16db0 69 73 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20  ist as a..
16dc0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
16dd0 6c 69 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f  lid directory fo
16de0 72 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72  r the testing pr
16df0 6f 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75  ocess to continu
16e00 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...
16e10 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  #..            s
16e20 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65  et directory [ge
16e30 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d  tBuildDirectory]
16e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
16e50 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
16e60 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c  s $directory] || 16e70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16e80 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 ![file isdir 16e90 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 ectory$director
16ea0 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
16eb0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
16ec0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
16ed0 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f  E: Just prior to
16ee0 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e   actually haltin
16ef0 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72  g the testing pr
16f00 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20  ocess,..
16f10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64        #       ad
16f20 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68  d an error to th
16f30 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e  e test log file.
16f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16f50 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
16f60 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 16f70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 16f80 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 16f90 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 16fa0 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 uld not verify b 16fb0 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c uild directory \ 16fc0 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d ""$directory \.
16fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16fe0 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74     "\", all test
16ff0 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a  ing halted\n"]..
17000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17010 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
17020 20 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67   # NOTE: Raising
17030 20 61 20 73 63 72 69 70 74 20 65 72 72 6f 72 20   a script error
17040 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20  from this point
17050 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20  should halt..
17060 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
17070 20 20 20 74 68 65 20 74 65 73 74 69 6e 67 20 70     the testing p
17080 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  rocess...
17090 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
170a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61          error [a
170b0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
170d0 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79  could not verify
170e0 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
170f0 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20   \"" $directory 17100 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17110 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 "\", all te 17120 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a sting halted"].. 17130 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 17140 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 17150 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17160 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 17170 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 p trying to copy 17180 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e any files if in 17190 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 171a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 171b0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 171c0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 171d0 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iteFiles)]} then 171e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 171f0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 17200 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 17210 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 eConfigFiles)]} 17220 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17230 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 17240 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 leName$configFi
17250 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
17260 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
17270 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c  pyBuildFile $fil 17280 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 17290 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 172a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 172b0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 172c0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 172d0 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 SqliteExternalFi 172e0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 17310 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d NOTE: Copy the M 17320 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 anaged Debugging 17330 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 Assistants (MDA 17340 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d ) configuration. 17350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 17360 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20 file for 17370 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 the Eagle shell 17380 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 to the build out 17390 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a put directory,.. 173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 173b0 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e while usin 173c0 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61 g each of the na 173d0 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f mes of the vario 173e0 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a us legacy test.. 173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 17400 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 executable 17410 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 s. This will he 17420 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 lp to make sure 17430 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 that all the.. 17440 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 17450 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 legacy tests 17460 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c run with exactl 17470 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f y the same set o 17480 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 f Managed.. 17490 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 174a0 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 Debugging Assis 174b0 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 tants configured 174c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 174d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 174e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 174f0 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c me$mdaConfigFil
17500 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
17510 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70            tryCop
17520 79 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c  yBinaryFile Eagl
17530 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63  eShell.exe.mda.c
17540 6f 6e 66 69 67 20 22 22 20 24 66 69 6c 65 4e 61  onfig "" $fileNa 17550 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 17560 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 17570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 17580 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 17590 70 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 py the external 175a0 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e 79 binaries, if any 175b0 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f , to the directo 175c0 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 ry that.. 175d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 175e0 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67 6c ontains the Eagl 175f0 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 69 e shell. This i 17600 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 s typically used 17610 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 to make.. 17620 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 17630 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73 20 sure assemblies 17640 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 referenced by th 17650 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 73 e ones being tes 17660 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20 20 ted are.. 17670 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a 17680 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 20 vailable during 17690 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 the testing proc 176a0 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ess... 176b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 176c0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 176d0 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 eName$externalF
176e0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
176f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
17700 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20  opyExternalFile
17710 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 17720 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 17730 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 17740 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 17750 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 17760 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 copySqliteNative 17770 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 17780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 17790 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 177a0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 177b0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d ImplicitFiles)]} 177c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 177d0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 177e0 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 fileName$nativ
177f0 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  eFileNames {..
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17810 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
17820 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 17830 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 17840 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 17850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 17860 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 17870 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 17880 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 NonImplicitFiles 17890 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 178a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 178b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 178c0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 no(copySqlitePla 178d0 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 tformFiles)] && 178e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 178f0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 17900 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
17910 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17930 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
17940 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65   $nativeFileName 17950 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 17960 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 17970 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
17980 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  me $platform.. 17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 179a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 179b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 179c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 179d0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 179e0 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69 74 65 opySqliteArchite 179f0 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 ctureFiles)] && 17a00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17a10 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 17a20 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 ength$architect
17a30 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ure] > 0} then {
17a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17a50 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
17a60 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 17a70 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 17a90 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 CopyAssembly$fi
17aa0 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63  leName $architec 17ab0 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ture.. 17ac0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17ad0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 17ae0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 17af0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 17b00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 17b10 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 17b20 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e no(copySqliteMan 17b30 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 agedFiles)]} the 17b40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 17b50 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 17b60 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 ame$managedFile
17b70 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
17b80 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
17b90 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 17ba0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 17bb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 17bc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 17bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 17be0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 17bf0 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f : Skip trying to 17c00 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20 load any files 17c10 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a if instructed... 17c20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 17c30 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 17c40 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 17c50 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d adSqliteFiles)]} 17c60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17c70 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 17c80 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 exists ::no(load 17c90 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 SqliteImplicitFi 17ca0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 17cc0 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 LoadAssembly Sys 17cd0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 17ce0 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 dll.. 17cf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 17d00 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 17d10 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c sts ::no(loadSql 17d20 69 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 iteLinqFiles)]} 17d30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17d40 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 tryLoadAss 17d50 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 embly System.Dat 17d60 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c a.SQLite.Linq.dl 17d70 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 17d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 17d90 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 17da0 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 s ::no(loadSqlit 17db0 65 45 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 eEf6Files)]} the 17dc0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 17dd0 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 17de0 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 17df0 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 QLite.EF6.dll.. 17e00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 17e10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 17e20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 17e30 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e no(loadSqliteNon 17e40 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d ImplicitFiles)]} 17e50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17e60 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 17e70 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 17e80 61 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d adSqlitePlatform 17e90 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17eb0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
17ec0 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74  platform] > 0} t
17ed0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
17ee0 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73         tryLoadAs
17ef0 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61  sembly System.Da
17f00 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70  ta.SQLite.dll $p 17f10 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 17f20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 17f30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 17f40 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 17f50 28 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 (loadSqliteArchi 17f60 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 17f70 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 17f80 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 17f90 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 ength$architect
17fa0 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ure] > 0} then {
17fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17fc0 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c    tryLoadAssembl
17fd0 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
17fe0 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74  Lite.dll $archit 17ff0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 ecture.. 18000 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 18010 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 18020 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 18030 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 18040 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 18050 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
18060 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
18070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18080 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
18090 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 33 2e  on of \"sqlite3.
180a0 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20  dll\"... " \..
180b0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
180c0 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
180d0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c  naryFileName sql
180e0 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a  ite3.dll]] \n]..
180f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
18100 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
18110 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 18120 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 18130 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 18140 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 18150 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 18160 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f \"SQLite.Intero 18170 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a p.dll\"... " \.. 18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 18190 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 ile version [get 181a0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 BinaryFileName S 181b0 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 181c0 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 l]] \n].. 181d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 181e0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 181f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
18200 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
18210 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
18220 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
18230 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74  ersion of \"Syst
18240 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
18250 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  ll\"... " \..
18260 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
18270 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e   version [getBin
18280 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  aryFileName Syst
18290 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
182a0 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ll]] \n]..
182b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
182c0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
182d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 182e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 182f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 18300 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 18310 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 version of \"Sys 18320 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 18330 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 Linq.dll\"... " 18340 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18350 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 18360 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 18370 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 18380 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 Lite.Linq.dll]] 18390 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 183a0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 183b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 183c0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
183d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
183e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
183f0 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
18400 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44  on of \"System.D
18410 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64  ata.SQLite.EF6.d
18420 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  ll\"... " \..
18430 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
18440 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e   version [getBin
18450 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  aryFileName Syst
18460 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
18470 46 36 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20  F6.dll]] \n]..
18480 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18490 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
184a0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] 184b0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 184c0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 184d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 184e0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
184f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
18500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18510 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
18520 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61  sion of \"" $pla 18530 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 tform \.. 18540 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c 69 74 "/sqlit 18550 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 e3.dll\"... " [f 18560 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 ile version \.. 18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 18580 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 18590 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 70 e sqlite3.dll$p
185a0 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20  latform]] \n]..
185b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
185c0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
185d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
185e0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 185f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 18600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18610 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 18620 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 sion of \""$pla
18630 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20  tform \..
18640 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69 74           "/SQLit
18650 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e  e.Interop.dll\".
18660 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69  .. " [file versi
18670 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  on \..
18680 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79        [getBinary
18690 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e  FileName SQLite.
186a0 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c 61  Interop.dll $pla 186b0 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 tform]] \n].. 186c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 186d0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 186e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 186f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
18700 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18720 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
18730 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66  on of \"" $platf 18740 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 orm \.. 18750 20 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e "/System. 18760 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c Data.SQLite.dll\ 18770 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 "... " [file ver 18780 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 sion \.. 18790 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 187a0 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 ryFileName Syste 187b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 187c0 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e l$platform]] \n
187d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
187e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
187f0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
18800 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 18810 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 18820 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 {.. ca 18830 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 18840 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
18850 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
18860 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
18870 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
18880 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
18890 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20  " $architecture 188a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 188b0 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c "/sqlite3.dll 188c0 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 \"... " [file ve 188d0 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 188e0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e [getBin 188f0 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 aryFileName sqli 18900 74 65 33 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 te3.dll$archite
18910 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  cture]] \n]..
18920 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
18930 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
18940 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
18950 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 18960 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18980 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 18990 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
189a0 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
189b0 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c             "/SQL
189c0 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c  ite.Interop.dll\
189d0 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72  "... " [file ver
189e0 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  sion \..
189f0 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61          [getBina
18a00 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74  ryFileName SQLit
18a10 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 61  e.Interop.dll $a 18a20 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e rchitecture]] \n 18a30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 18a40 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 18a50 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 18a60 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
18a70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
18a80 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
18a90 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
18aa0 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
18ab0 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d  $architecture \. 18ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 18ad0 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 "/System.Data.S 18ae0 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 QLite.dll\"... " 18af0 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c [file version \ 18b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18b10 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 [getBinaryFile 18b20 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 Name System.Data 18b30 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 .SQLite.dll$arc
18b40 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d  hitecture]] \n].
18b50 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
18b60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18b70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18b80 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c  NOTE: Grab the l
18b90 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61  ist of managed a
18ba0 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 68  ssemblies for th
18bb0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
18bc0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
18bd0 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f 6e     and report on
18be0 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
18bf0 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20  .SQLite related
18c00 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ones...        #
18c10 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 73  ..        set as
18c20 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74  semblies [object
18c30 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69   invoke AppDomai
18c40 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20  n.CurrentDomain
18c50 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a  GetAssemblies]..
18c60 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
18c70 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c   foreach assembl
18c80 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d  y $assemblies {. 18c90 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 18ca0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 string match \{S 18cb0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 18cc0 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 e*$assembly]} t
18cd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
18ce0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 18cf0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 18d00 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 18d10 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f "---- fo 18d20 75 6e 64 20 6c 6f 61 64 65 64 20 61 73 73 65 6d und loaded assem 18d30 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 bly: "$assembly
18d40 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
18d50 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
18d60 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
18d70 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
18d80 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 18d90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18da0 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63 "---- define c 18db0 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 53 onstants for \"S 18dc0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 18dd0 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 e\"... ".... 18de0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 18df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18e00 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 18e10 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 18e20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18e30 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 18e40 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 QLite.SQLite3 De 18e50 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 fineConstants.. 18e60 20 20 20 20 20 20 20 20 20 7d 20 64 65 66 69 6e } defin 18e70 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 eConstants] == 0 18e80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18e90 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
18ea0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
18eb0 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c  endArgs [formatL
18ec0 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20  ist [lsort \..
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64                $d 18ee0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 efineConstants] 18ef0 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 <none>] \n].. 18f00 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 18f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 18f20 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
18f30 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
18f40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
18f50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
18f60 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
18f70 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 18f80 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 18f90 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 18fa0 73 6f 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6f source version o 18fb0 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 18fc0 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 18fd0 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ".... i 18fe0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 18ff0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 19000 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 19010 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 19020 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 19030 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 19040 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 QLiteConnection 19050 50 72 6f 76 69 64 65 72 56 65 72 73 69 6f 6e 0d ProviderVersion. 19060 0a 20 20 20 20 20 20 20 20 20 20 7d 20 76 65 72 . } ver 19070 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 19080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19090 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 190a0 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 th$version] ==
190b0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
190c0 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72           set ver
190d0 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  sion null..
190e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
190f0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 19100 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 19110 65 6e 64 41 72 67 73 20 24 76 65 72 73 69 6f 6e endArgs$version
19120 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
19130 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
19140 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 19150 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 19160 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 19170 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 19180 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 19190 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 191a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
191b0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
191c0 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20     "---- source
191d0 63 68 65 63 6b 6f 75 74 20 6f 66 20 5c 22 53 79  checkout of \"Sy
191e0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
191f0 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20  .dll\"... "....
19200 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
19210 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
19220 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
19230 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
19240 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
19250 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
19260 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
19270 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64  onnection Provid
19280 65 72 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  erSourceId..
19290 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64        } sourceId
192a0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
192b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
192c0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $192d0 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 sourceId] == 0} 192e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 192f0 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 set source 19300 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 Id null.. 19310 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 19320 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
19330 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
19340 64 41 72 67 73 20 24 73 6f 75 72 63 65 49 64 20  dArgs $sourceId 19350 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 19360 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 19370 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
19380 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f  st_channel unkno
19390 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  wn\n..
193a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
193b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
193c0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
193d0 20 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 62   the available b
193e0 75 69 6c 64 73 20 28 61 6e 64 20 22 72 65 6c 65  uilds (and "rele
193f0 61 73 65 73 22 29 20 6f 66 20 53 51 4c 69 74 65  ases") of SQLite
19400 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20   and..        #
19410 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
19420 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 20  a.SQLite...
19430 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
19440 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c  eckForSQLiteBuil
19450 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ds $::test_chann 19460 65 6c 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 el.. chec 19470 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 kForSQLiteReleas 19480 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e es$::test_chann
19490 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  el....        #.
194a0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
194b0 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f   Now, we need to
194c0 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c   know if the SQL
194d0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
194e0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20   is available..
194f0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28         #       (
19500 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 65  i.e. because the
19510 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79   managed-only Sy
19520 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
19530 20 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20   assembly can..
19540 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c         #       l
19550 6f 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20  oad without it;
19560 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e  however, it cann
19570 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75  ot do anything u
19580 73 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20  seful without..
19590 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
195a0 74 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 75  t).  If we are u
195b0 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d  sing the mixed-m
195c0 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64  ode assembly and
195d0 20 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20   we already..
195e0 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 75       #       fou
195f0 6e 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74  nd it (above), t
19600 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  his should alway
19610 73 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20  s succeed...
19620 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
19630 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62  heckForSQLiteLib
19640 72 61 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 61  rary $::test_cha 19650 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nnel.... 19660 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 19670 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 19680 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 SQLite interop a 19690 73 73 65 6d 62 6c 79 20 69 73 20 61 76 61 69 6c ssembly is avail 196a0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 able... # 196b0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 196c0 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 orSQLiteInterop 196d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
196e0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
196f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
19700 65 63 6b 20 74 68 65 20 53 51 4c 69 74 65 20 64  eck the SQLite d
19710 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70  atabase and temp
19720 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65  orary directorie
19730 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
19740 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
19750 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73  QLiteDirectories
19760 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 19770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 19780 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 19790 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d ttempt to determ 197a0 69 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20 63 ine if various c 197b0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 ompile-time opti 197c0 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a ons needed for.. 197d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 197e0 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 test constraints 197f0 20 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f were enabled fo 19800 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 r the managed as 19810 73 65 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a sembly. There.. 19820 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19830 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 are some compile 19840 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 -time options th 19850 61 74 20 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 at must also hav 19860 65 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a e been enabled.. 19870 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19880 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 for the interop 19890 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 assembly in orde 198a0 72 20 74 6f 20 62 65 20 65 66 66 65 63 74 69 76 r to be effectiv 198b0 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 e. For those.. 198c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f # o 198d0 70 74 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 ptions, it will 198e0 62 65 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 be assumed that 198f0 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 it was enabled f 19900 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a or the interop.. 19910 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19920 61 73 73 65 6d 62 6c 79 20 69 66 20 69 74 20 77 assembly if it w 19930 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 as enabled for t 19940 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d he managed assem 19950 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d bly... #. 19960 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 19970 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 defineConstant 19980 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 19990 20 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54 45 CHECK_STATE 199a0 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44 45 COUNT_HANDLE DE 199b0 42 55 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 BUG INTEROP_CODE 199c0 43 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 C INTEROP_DEBUG 199d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 \.. I 199e0 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e NTEROP_EXTENSION 199f0 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 _FUNCTIONS INTER 19a00 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 OP_LEGACY_CLOSE 19a10 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c 0d 0a 20 INTEROP_LOG \.. 19a20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 19a30 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f OP_TEST_EXTENSIO 19a40 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 N INTEROP_VIRTUA 19a50 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 20 4e L_TABLE NET_20 N 19a60 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20 20 20 20 ET_35 \.. 19a70 20 20 20 20 20 4e 45 54 5f 34 30 20 4e 45 54 5f NET_40 NET_ 19a80 34 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 5f 43 45 NET_451 NET_C 19a90 4f 4d 50 41 43 54 5f 32 30 20 50 4c 41 54 46 4f OMPACT_20 PLATFO 19aa0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 RM_COMPACTFRAMEW 19ab0 4f 52 4b 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ORK \.. 19ac0 20 20 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 PRELOAD_NATIV 19ad0 45 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52 47 E_LIBRARY RETARG 19ae0 45 54 41 42 4c 45 20 53 51 4c 49 54 45 5f 53 54 ETABLE SQLITE_ST 19af0 41 4e 44 41 52 44 20 5c 0d 0a 20 20 20 20 20 20 ANDARD \.. 19b00 20 20 20 20 20 20 54 48 52 4f 57 5f 4f 4e 5f 44 THROW_ON_D 19b10 49 53 50 4f 53 45 44 20 54 52 41 43 45 20 54 52 ISPOSED TRACE TR 19b20 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 54 ACE_CONNECTION T 19b30 52 41 43 45 5f 48 41 4e 44 4c 45 20 5c 0d 0a 20 RACE_HANDLE \.. 19b40 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45 TRACE 19b50 5f 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f 53 _PRELOAD TRACE_S 19b60 48 41 52 45 44 20 54 52 41 43 45 5f 53 54 41 54 HARED TRACE_STAT 19b70 45 4d 45 4e 54 20 54 52 41 43 45 5f 57 41 52 4e EMENT TRACE_WARN 19b80 49 4e 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ING \.. 19b90 20 20 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f TRACK_MEMORY_ 19ba0 42 59 54 45 53 20 55 53 45 5f 45 4e 54 49 54 59 BYTES USE_ENTITY 19bb0 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 20 55 53 45 _FRAMEWORK_6 USE 19bc0 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 5c 0d 0a _INTEROP_DLL \.. 19bd0 20 20 20 20 20 20 20 20 20 20 20 20 55 53 45 5f USE_ 19be0 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f PREPARE_V2 WINDO 19bf0 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 WS] {.. 19c00 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 19c10 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 19c20 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 he compile-time 19c30 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 option is listed 19c40 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d in the list of. 19c50 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 19c60 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 "define const 19c70 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b ants" kept track 19c80 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67 of by the manag 19c90 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 ed assembly... 19ca0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19cb0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 19cc0 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan 19cd0 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 t$::test_channe
19ce0 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  l $defineConstan 19cf0 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a t.. }.... 19d00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19d10 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 19d20 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 the current bui 19d30 6c 64 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 ld year. Basica 19d40 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 lly, this indica 19d50 74 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 tes.. # 19d60 20 20 20 20 20 77 68 69 63 68 20 76 65 72 73 69 which versi 19d70 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e on of MSBuild an 19d80 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 d/or Visual Stud 19d90 69 6f 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a io was used to.. 19da0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19db0 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65 compile the asse 19dc0 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e mbly binaries un 19dd0 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 der test... 19de0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 #.. tp 19df0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
19e00 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
19e10 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
19e20 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74  g for System.Dat
19e30 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79  a.SQLite build y
19e40 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ear... "....
19e50 20 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65      set year [ge
19e60 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20  tBuildYear]..
19e70 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
19e80 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62  nt [appendArgs b
19e90 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d  uildYear. $year] 19ea0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 19eb0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
19ec0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $19ed0 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 year \"\n].... 19ee0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19ef0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 # NOTE: Check t 19f00 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 he current build 19f10 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e .NET Framework. 19f20 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 Basically, thi 19f30 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 19f40 20 20 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 indicates whi 19f50 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 ch version of th 19f60 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b e .NET Framework 19f70 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 is being.. 19f80 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 # used 19f90 62 79 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 by the assembly 19fa0 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 binaries under t 19fb0 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d est... #. 19fc0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
19fd0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
19fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
19ff0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
1a000 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1a010 69 74 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 46  ite build .NET F
1a020 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d  ramework... "...
1a030 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 65 74  .        set net
1a040 46 78 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46  Fx [getBuildNetF
1a050 78 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43  x]..        addC
1a060 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
1a070 64 41 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65  dArgs buildFrame
1a080 77 6f 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20  work. $netFx].. 1a090 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1a0a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1a0b0 70 65 6e 64 41 72 67 73 20 5c 22 20 24 6e 65 74  pendArgs \" $net 1a0c0 46 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 Fx \"\n].... 1a0d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1a0e0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 1a0f0 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63 current build c 1a100 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 onfiguration. T 1a110 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 his should norma 1a120 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 lly.. # 1a130 20 20 20 20 20 62 65 20 65 69 74 68 65 72 20 22 be either " 1a140 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 Debug" or "Relea 1a150 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d se"... #. 1a160 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1a170 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
1a180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
1a190 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
1a1a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1a1b0 69 74 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67  ite build config
1a1c0 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a  uration... "....
1a1d0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66          set conf
1a1e0 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75  iguration [getBu
1a1f0 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ildConfiguration
1a200 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  ]..        addCo
1a210 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
1a220 41 72 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67  Args buildConfig
1a230 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67  uration. $config 1a240 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 uration].. 1a250 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1a260 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1a270 72 67 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72  rgs \" $configur 1a280 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 ation \"\n].... 1a290 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a2a0 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f # NOTE: Try to 1a2b0 20 73 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72 setup an interr 1a2c0 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 upt callback usi 1a2d0 6e 67 20 74 68 65 20 73 63 72 69 70 74 20 64 65 ng the script de 1a2e0 62 75 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20 bugger.. 1a2f0 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c # that wil 1a300 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c l cancel all SQL 1a310 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 queries in prog 1a320 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 ress for all dat 1a330 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23 abase.. # 1a340 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio 1a350 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 ns known to this 1a360 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 1a370 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a380 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 1a390 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 sts ::no(sqliteI 1a3a0 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b nterruptCallback 1a3b0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 1a3c0 20 20 20 20 20 20 73 65 74 75 70 44 62 49 6e 74 setupDbInt 1a3d0 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 erruptCallback$
1a3e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24  ::test_channel $1a3f0 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 ::test_log.. 1a400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1a410 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1a420 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 TE: Check for th 1a430 65 20 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65 e native runtime 1a440 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 option, which w 1a450 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65 ould mean we are 1a460 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1a470 20 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 using the mixe 1a480 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e d-mode assembly. 1a490 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a4a0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e checkForRun 1a4b0 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 timeOption$::te
1a4c0 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76  st_channel nativ
1a4d0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e....        #..
1a4e0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1a4f0 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65 73  Check if the tes
1a500 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63  t suite should c
1a510 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20  ount the number
1a520 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a  of connections..
1a530 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1a540 22 6f 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c  "opened" and "cl
1a550 6f 73 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70  osed" from the p
1a560 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69  ool when determi
1a570 6e 69 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a  ning if a test..
1a580 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1a590 70 61 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69  passed.  Disabli
1a5a0 6e 67 20 74 68 69 73 20 62 65 68 61 76 69 6f 72  ng this behavior
1a5b0 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65   is sometimes ne
1a5c0 63 65 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20  cessary (e.g...
1a5d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
1a5e0 75 72 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73  uring the releas
1a5f0 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
1a600 73 29 20 62 65 63 61 75 73 65 20 74 68 65 72 65  s) because there
1a610 20 61 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20   are several..
1a620 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
1a630 73 74 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e  sts that rely on
1a640 20 74 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f   the "opened fro
1a650 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65  m pool" count be
1a660 69 6e 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20  ing greater..
1a670 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61       #       tha
1a680 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74  n zero.  These t
1a690 65 73 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75  ests may fail du
1a6a0 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74  e to the non-det
1a6b0 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20  erministic..
1a6c0 20 20 20 20 23 20 20 20 20 20 20 20 62 65 68 61      #       beha
1a6d0 76 69 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20  vior of the CLR
1a6e0 47 43 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  GC, even when th
1a6f0 65 72 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e  ere is no bug in
1a700 20 74 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20   the code..
1a710 20 20 20 23 20 20 20 20 20 20 20 62 65 69 6e 67     #       being
1a720 20 74 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20   tested...
1a730 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
1a740 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69  ckForRuntimeOpti
1a750 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  on $::test_chann 1a760 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d el noPoolCounts. 1a770 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1a780 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 1a790 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 port the resourc 1a7a0 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f e usage prior to 1a7b0 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 running any tes 1a7c0 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 1a7d0 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 reportSQ 1a7e0 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a LiteResources$:
1a7f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
1a800 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1a810 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62      # NOTE: Grab
1a820 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74   the list of nat
1a830 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20  ive modules for
1a840 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
1a850 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ess and..
1a860 20 23 20 20 20 20 20 20 20 72 65 70 6f 72 74 20   #       report
1a870 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  on the System.Da
1a880 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65  ta.SQLite relate
1a890 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20  d ones...
1a8a0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
1a8b0 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20  modules [object
1a8c0 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20  invoke \..
1a8d0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61        System.Dia
1a8e0 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65 73 73  gnostics.Process
1a8f0 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65  .GetCurrentProce
1a900 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20  ss Modules]....
1a910 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f         object fo
1a920 72 65 61 63 68 20 2d 61 6c 69 61 73 20 6d 6f 64  reach -alias mod
1a930 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a  ule $modules {.. 1a940 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1a950 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 1a960 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e he module file n 1a970 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 65 ame here must be 1a980 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 normalized... 1a990 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a9a0 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 1a9b0 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a e [file normaliz 1a9c0 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e e [$module FileN
1a9d0 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ame]]....
1a9e0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d     if {[string m
1a9f0 61 74 63 68 20 2d 6e 6f 63 61 73 65 20 2a 2f 73  atch -nocase */s
1aa00 71 6c 69 74 65 33 2e 64 6c 6c 20 24 66 69 6c 65  qlite3.dll $file 1aa10 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 1aa20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1aa30 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1aa40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa60 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64  "---- found load
1aa70 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  ed SQLite native
1aa80 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c 65 3a   library module:
1aa90 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1aaa0 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20        $fileName 1aab0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1aac0 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 6e 67 elseif {[string 1aad0 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 match \.. 1aae0 20 20 20 20 20 20 20 20 2d 6e 6f 63 61 73 65 20 -nocase 1aaf0 2a 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 */SQLite.Interop 1ab00 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 7d .dll$fileName]}
1ab10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ab20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1ab30 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1ab40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1ab50 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1ab60 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c found loaded SQL 1ab70 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 ite interop asse 1ab80 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c mbly module: " \ 1ab90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1aba0 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d$fileName \n].
1abb0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1abc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1abd0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
1abe0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1abf0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1ac10 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 -- compile-time 1ac20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 options for SQLi 1ac30 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e te core library. 1ac40 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 1ac50 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1ac60 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 1ac70 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1ac80 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 1aca0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1acb0 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 e.SQLite3 SQLite 1acc0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a CompileOptions.. 1acd0 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d 70 } comp 1ace0 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 ileOptions] == 0 1acf0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1ad00 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1ad10 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1ad20 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c  endArgs [formatL
1ad30 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20  ist [lsort \..
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63                $c 1ad50 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c ompileOptions] < 1ad60 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 none>] \n].. 1ad70 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1ad80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1ad90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1ada0 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
1adb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1adc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
1add0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1ade0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1adf0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 1ae00 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 1ae10 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 ompile-time opti 1ae20 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 69 ons for SQLite i 1ae30 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e nterop assembly. 1ae40 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 1ae50 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1ae60 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 1ae70 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1ae80 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 1aea0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1aeb0 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f e.SQLite3 Intero 1aec0 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d pCompileOptions. 1aed0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d . } com 1aee0 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 pileOptions] == 1aef0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1af00 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1af10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1af20 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74  pendArgs [format
1af30 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20  List [lsort \..
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $1af50 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 compileOptions] 1af60 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 <none>] \n].. 1af70 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1af80 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1af90 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1afa0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
1afb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1afc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1afd0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1afe0 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74 69  E: Show the acti
1aff0 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  ve test constrai
1b000 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  nts...        #.
1b010 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1b020 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1b030 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d appendArgs "---- 1b040 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22 20 constraints: " 1b050 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1b060 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 formatList [lsor 1b070 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e 74 t [getConstraint 1b080 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d s]] <none>] \n]. 1b090 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b0a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 61 # NOTE: Sa 1b0b0 76 65 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 ve the test cons 1b0c0 74 72 61 69 6e 74 73 20 66 6f 72 20 75 73 65 20 traints for use 1b0d0 62 79 20 74 68 72 65 61 64 73 20 63 72 65 61 74 by threads creat 1b0e0 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 ed in this.. 1b0f0 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 6c # appl 1b100 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 ication domain. 1b110 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 This is necessa 1b120 72 79 20 62 65 63 61 75 73 65 20 61 6c 6c 20 74 ry because all t 1b130 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 he Eagle.. 1b140 20 20 23 20 20 20 20 20 20 20 22 74 65 73 74 20 # "test 1b150 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 6d 61 context" informa 1b160 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 72 65 tion is per-thre 1b170 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ad... #.. 1b180 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1b190 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 1b1a0 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d 20 74 _constraints]} t 1b1b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1b1c0 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 set ::test_cons 1b1d0 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 6c 65 traints$::eagle
1b1e0 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 61 69 6e  _tests(constrain
1b1f0 74 73 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ts)..        }..
1b200 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1b210 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61       # NOTE: Loa
1b220 64 20 74 68 65 20 22 61 66 74 65 72 2d 63 6f 6e  d the "after-con
1b230 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d  straints" custom
1b240 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72   per-user and/or
1b250 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20   per-host..
1b260 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20     #       test
1b270 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
1b280 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b290 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73    uplevel 1 [lis
1b2a0 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74  t loadSQLiteTest
1b2b0 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74  Settings $::test 1b2c0 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 72 5d _channel .after] 1b2d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1b2e0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 1b2f0 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 how when our tes 1b300 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 ts actually bega 1b310 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 n (now)... 1b320 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 1b330 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1b340 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1b350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
1b360 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  --- System.Data.
1b370 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67  SQLite tests beg
1b380 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20  an at " \..
1b390 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f         [clock fo
1b3a0 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
1b3b0 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  nds]] \n]..
1b3c0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
1b3d0 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65    proc runSQLite
1b3e0 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20  TestEpilogue {}
1b3f0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1b400 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72    # NOTE: Skip r
1b410 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f  unning our custo
1b420 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68  m epilogue if th
1b430 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62  e main one has b
1b440 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  een..      #
1b450 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20     skipped...
1b460 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1b470 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1b480 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c  no(epilogue.eagl
1b490 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
1b4a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b4b0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  # NOTE: Show whe
1b4c0 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75  n our tests actu
1b4d0 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 29  ally ended (now)
1b4e0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1b4f0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1b500 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1b510 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1b520 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 "---- Sys 1b530 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 1b540 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20 22 tests ended at " 1b550 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b560 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 [clock format [c 1b570 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c lock seconds]] \ 1b580 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. 1b590 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 . # BUGFI 1b5a0 58 3a 20 42 65 66 6f 72 65 20 63 68 65 63 6b 69 X: Before checki 1b5b0 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 ng the final res 1b5c0 6f 75 72 63 65 73 20 69 6e 20 75 73 65 20 62 79 ources in use by 1b5d0 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 SQLite, make.. 1b5e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 1b5f0 20 73 75 72 65 20 62 6f 74 68 20 6f 66 20 74 68 sure both of th 1b600 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 e PRAGMA related 1b610 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 directory names 1b620 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 are freed... 1b630 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b640 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 1b650 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 rectories$::tes
1b660 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a  t_channel true..
1b670 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1b680 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73       # NOTE: Als
1b690 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72 65 73  o report the res
1b6a0 6f 75 72 63 65 20 75 73 61 67 65 20 61 66 74 65  ource usage afte
1b6b0 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65  r running the te
1b6c0 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  sts...        #.
1b6d0 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53  .        reportS
1b6e0 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24  QLiteResources $1b6f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 1b700 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1b710 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 # NOTE: Rep 1b720 6f 72 74 20 74 68 65 20 63 72 69 74 69 63 61 6c ort the critical 1b730 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 handle counts a 1b740 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 fter running the 1b750 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 1b760 20 23 0d 0a 20 20 20 20 20 20 20 20 67 65 74 53 #.. getS 1b770 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 QLiteHandleCount 1b780 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1b790 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  l..      }..
1b7a0 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23  }.....    ######
1b7b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b7c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b7d0 23 23 23 23 23 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 0d 0a 20 20 20 20 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 20 45 4e 44 20 45 61 67  ######## END Eag
1b820 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23  le ONLY ########
1b830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b840 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
1b850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b870 23 23 23 23 23 23 23 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 0d 0a 20 20 7d 0d 0a 0d 0a  #######..  }....
1b8a0 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53    #..  # NOTE: S
1b8b0 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ave the name of
1b8c0 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f  the directory co
1b8d0 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69  ntaining this fi
1b8e0 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b  le...  #..  if {
1b8f0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f  ![info exists co
1b900 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d  mmon_directory]}
1b910 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74   then {..    set
1b920 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72   common_director
1b930 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
1b940 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a  [info script]]..
1b950 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
1b960 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68  NOTE: Provide th
1b970 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
1b980 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67  Lite test packag
1b990 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72  e to the interpr
1b9a0 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61  eter...  #..  pa
1b9b0 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79  ckage provide Sy
1b9c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1b9d0 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a        .Test 1.0..}..