System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact e4bca89b93814c5d79c3b1be1187480b24187a94:

• File Tests/common.eagle — part of check-in [e4b0d17481] at 2014-05-30 21:53:20 on branch trunk — Add SharedFlags static property to the SQLiteConnection class. Make the display names for connection string properties more consistent. (user: mistachkin size: 116049)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 32 30 31 32 2c 20 6f 72 20   2010, 2012, or
0460: 32 30 31 33 20 62 75 69 6c 64 20 73 79 73 74 65  2013 build syste
0470: 6d 73 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65  ms.  To override
0480: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
0490: 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74       value via t
04a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c  he command line,
04b0: 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64   enter a command
04c0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
04d0: 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  of..      #
04e0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following
04f0: 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65  (all on one line
0500: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
0510: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0520: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0530: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0540: 73 74 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20  st_year 2005"..
0550: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0560: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0570: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0580: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0590: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
05a0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
05b0: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
05c0: 30 38 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  08"..      #
05d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
05e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
05f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0600: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0610: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0620: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0630: 65 61 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20  ear 2010"..
0640: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0650: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0660: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0670: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0680: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0690: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
06a0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d  test_year 2012".
06b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
06c0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
06d0: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
06e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
06f0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0700: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0710: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0720: 32 30 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20  2013"..      #
0730: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0740: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0750: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0760: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0770: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0780: 69 61 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e  ialize "unset -n
0790: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79  ocomplain test_y
07a0: 65 61 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ear"..      #
07b0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
07c0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
07d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
07e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
07f0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26   ::test_year] &&
0800: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0810: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20  $::test_year] > 0820: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0830: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 0840: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 0850: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 0860: 72 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 r. If this vari 0870: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 0880: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 0890: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 default va 08a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 08b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 08c0: 6e 6f 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 not Eagle has be 08d0: 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 en.. # 08e0: 20 20 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 compiled aga 08f0: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 0900: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 0910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0920: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
0930: 74 5f 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20  t_year..      }
0940: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
0960: 45 3a 20 49 66 20 45 61 67 6c 65 20 68 61 73 20  E: If Eagle has
0970: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67  been compiled ag
0980: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34  ainst the CLR v4
0990: 2e 30 2c 20 75 73 65 20 22 32 30 31 30 22 20 62  .0, use "2010" b
09a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
09b0: 20 20 20 64 65 66 61 75 6c 74 20 28 77 65 20 63     default (we c
09c0: 6f 75 6c 64 20 75 73 65 20 22 32 30 31 32 22 20  ould use "2012"
09d0: 6f 72 20 22 32 30 31 33 22 20 69 6e 20 74 68 61  or "2013" in tha
09e0: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 20  t case as well)
09f0: 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
0a00: 20 20 20 20 74 68 65 20 74 65 73 74 20 79 65 61      the test yea
0a10: 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 75 73  r; otherwise, us
0a20: 65 20 22 32 30 30 38 22 20 62 79 20 64 65 66 61  e "2008" by defa
0a30: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
0a50: 20 20 20 22 32 30 30 35 22 20 69 6e 20 74 68 61     "2005" in tha
0a60: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 2e  t case as well).
0a70: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
0a80: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
0a90: 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ]..        #
0aa0: 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68     version of th
0ab0: 65 20 43 4c 52 20 69 73 20 72 65 6c 65 61 73 65  e CLR is release
0ac0: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
0ad0: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 0d 0a 20  ll have to be..
0ae0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
0af0: 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66  hanged.  The def
0b00: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 74  ault test year t
0b10: 6f 20 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  o use for a part
0b20: 69 63 75 6c 61 72 20 43 4c 52 0d 0a 20 20 20 20  icular CLR..
0b30: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73      #       vers
0b40: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72  ion may be overr
0b50: 69 64 64 65 6e 20 62 79 20 73 65 74 74 69 6e 67  idden by setting
0b60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
0b70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
0b80: 20 20 20 20 20 20 22 74 65 73 74 5f 79 65 61 72        "test_year
0b90: 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72 65  _clr_v$X", where 0ba0: 20 22 24 58 22 20 6d 61 79 20 5b 63 75 72 72 65 "$X" may [curre
0bb0: 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20  ntly] be either
0bc0: 22 32 22 0d 0a 20 20 20 20 20 20 20 20 23 20 20  "2"..        #
0bd0: 20 20 20 20 20 6f 72 20 22 34 22 2e 0d 0a 20 20       or "4"...
0be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0bf0: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
0c00: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
0c10: 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e40]} then {..
0c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0c30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
0c40: 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 26 26 20  year_clr_v4] &&
0c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
0c60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0c70: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72  $::test_year_clr 0c80: 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _v4] > 0} then { 0c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 0ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 0cb0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 0cc0: 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 cified test year 0cd0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 0ce0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 0cf0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 0d00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
0d10: 61 72 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20  ar_clr_v4..
0d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0d30: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d40: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
0d50: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
0d60: 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  t test year for
0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
0d80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0da0: 20 32 30 31 30 3b 20 23 20 54 4f 44 4f 3a 20 47   2010; # TODO: G
0db0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64  ood "fallback" d
0dc0: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20  efault?..
0dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
0de0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0df0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0e00: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
0e10: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
0e20: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
0e30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 0e40: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 3e t_year_clr_v2] > 0e50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 0e60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0e70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 0e80: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 0e90: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 0ea0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 he CLR v2.0... 0eb0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 0ed0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
0ee0: 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v2..          }
0ef0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
0f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0f20: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
0f30: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
0f40: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
0f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f60: 20 20 20 20 72 65 74 75 72 6e 20 32 30 30 38 3b      return 2008;
0f70: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
0f80: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
0f90: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
0fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0fb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
0fc0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59    proc getBuildY
0fd0: 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ears {} {..
0fe0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0ff0: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73  : See if the lis
1000: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1010: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1020: 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d  den by the user.
1030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28  .      #       (
1040: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1050: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
1060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1070: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
1080: 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c  st_years] && [ll
1090: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 10a0: 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ars] > 0} then { 10b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 10d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 10e0: 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 ist of test year 10f0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1110: 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20  :test_years..
1120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1140: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1150: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
1160: 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 2e  test years (i.e.
1170: 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20   all)...
1180: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1190: 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30  n [list 2005 200
11a0: 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 33  8 2010 2012 2013
11b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
11c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
11d0: 65 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d 20  etBuildNetFx {}
11e0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
11f0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
1200: 20 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20 46   the test .NET F
1210: 72 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e 67  ramework setting
1220: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
1230: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
1240: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
1250: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
1260: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
1270: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1280: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1290: 65 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20 5c  est_net_fx] && \
12a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
12b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 12c0: 73 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d 20 st_net_fx] > 0} 12d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12f0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 1300: 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 fied test .NET F 1310: 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 ramework... 1320: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 1330: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 74 turn$::test_net
1340: 5f 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  _fx..      } els
1350: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1360: 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59   year [getBuildY
1370: 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ear]....
1380: 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d  switch -exact --
1390: 20 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20 20   $year {.. 13a0: 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 20 20 20 2005 {.. 13b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 13c0: 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 etFx20.. 13d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 13e0: 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 008 {.. 13f0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 1400: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 5.. }.. 1410: 20 20 20 20 20 20 20 20 20 20 32 30 31 30 20 7b 2010 { 1420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1430: 74 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 20 turn netFx40.. 1440: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1450: 20 20 20 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 2012 {.. 1460: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 1470: 6e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 netFx45.. 1480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1490: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 2013 {.. 14a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 14b0: 34 35 31 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 451.. } 14c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 66 61 .. defa 14d0: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ult {.. 14e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 14f0: 35 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 5; # TODO: Good 1500: 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 "fallback" defau 1510: 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lt?.. } 1520: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1530: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1540: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1550: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 1560: 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 e should return 1570: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 non-zero if the 1580: 63 6f 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d configured test. 1590: 0a 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 . # pla 15a0: 74 66 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 tform is most li 15b0: 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 kely the default 15c0: 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e for this machin 15d0: 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 e... #.. p 15e0: 72 6f 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 roc isDefaultBui 15f0: 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 ldPlatform { {ve 1600: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b rbose false} } { 1610: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1620: 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 # NOTE: Running 1630: 20 6f 6e 20 57 6f 57 36 34 20 69 73 20 6e 65 76 on WoW64 is nev 1640: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 er the default p 1650: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 1660: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 1670: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 RunningWoW64]} t 1680: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1690: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
16a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
16b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 16c0: 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 16d0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 "---- dete 16e0: 63 74 65 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 cted non-default 16f0: 20 70 6c 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 platform (WoW64 1700: 29 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d )\n".. }. 1710: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1720: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. 1730: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1740: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 # NOTE: This ha 1750: 73 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 s a good chance 1760: 6f 66 20 62 65 69 6e 67 20 74 68 65 20 64 65 66 of being the def 1770: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a ault platform... 1780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1790: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
17a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
17b0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17c0: 65 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 el "---- detecte 17d0: 64 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f d default platfo 17e0: 72 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rm\n".. }.. 17f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 1800: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 1810: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c proc getBuildPl 1820: 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 atform { native 1830: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 1840: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1850: 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 st_platform] && 1860: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 1870: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
1880: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  est_platform] >
1890: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
18a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18b0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
18c0: 65 63 69 66 69 65 64 20 74 65 73 74 20 70 6c 61  ecified test pla
18d0: 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20  tform.  If this
18e0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20  variable is not
18f0: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  set,..        #
1900: 20 20 20 20 20 20 74 68 65 20 64 65 66 61 75 6c        the defaul
1910: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be
1920: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63  based on the mac
1930: 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72  hine architectur
1940: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
1950: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65         return [e
1960: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24  xpr {$native ?$
1970: 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20  ::test_platform
1980: 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20  : ""}]..      }
1990: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
19a0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68  ists ::test_mach
19b0: 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ine] && \..
19c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
19d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68  gth $::test_mach 19e0: 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ine] > 0} then { 19f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 1a10: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 native builds, 1a20: 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 return the platf 1a30: 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 orm name corresp 1a40: 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 onding to.. 1a50: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 # the t 1a60: 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 est machine arch 1a70: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 itecture; otherw 1a80: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ise, return an e 1a90: 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 mpty.. # 1aa0: 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 string... 1ab0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ac0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 1ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 74 ..$nat
1ae0: 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f  ive ? [machineTo
1af0: 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74  Platform $::test 1b00: 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a _machine] : "".. 1b10: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 }].. 1b20: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 1b30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 o exists ::tcl_p 1b40: 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 latform(machine) 1b50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1b60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b70: 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 NOTE: For native 1b80: 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 builds, return 1b90: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d the platform nam 1ba0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 e corresponding 1bb0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 to.. # 1bc0: 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 the machine 1bd0: 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 architecture; ot 1be0: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 herwise, return 1bf0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1c00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c10: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1c20: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 r {..$
1c30: 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e  native ? [machin
1c40: 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74  eToPlatform $::t 1c50: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach 1c60: 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 20 ine)] : "".. 1c70: 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 }].. } 1c80: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1c90: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1ca0: 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 72 E: No machine ar 1cb0: 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 76 chitecture is av 1cc0: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 ailable, return 1cd0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1ce0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1cf0: 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e It is importan 1d00: 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 t to return an e 1d10: 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 mpty string here 1d20: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 because the.. 1d30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 1d40: 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f sult of this pro 1d50: 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 cedure may be us 1d60: 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f ed with [file jo 1d70: 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d in]... #. 1d80: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1d90: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 "".. }.. 1da0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1db0: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 1dc0: 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 ation {} {.. 1dd0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1de0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 63 E: See if the "c 1df0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65 onfiguration" se 1e00: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f tting has been o 1e10: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 verridden by the 1e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1e30: 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 user (e.g. on th 1e40: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e e command line). 1e50: 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e This helps con 1e60: 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 trol exactly.. 1e70: 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 # whic 1e80: 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69 65 h set of binarie 1e90: 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 s we are testing 1ea0: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 (i.e. those bui 1eb0: 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 lt in the.. 1ec0: 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67 22 # "Debug" 1ed0: 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62 75 or "Release" bu 1ee0: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 1ef0: 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 ns). To overrid 1f00: 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 e this.. # 1f10: 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 value via 1f20: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 1f30: 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e , enter a comman 1f40: 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 d similar to one 1f50: 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 of.. # 1f60: 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 the following 1f70: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 1f80: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 1f90: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 1fa0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 1fb0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 1fc0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 1fd0: 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20 n Debug".. 1fe0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 1ff0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 2000: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 2010: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 2020: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 2030: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 2040: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 2050: 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 n Release".. 2060: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c # -fil 2070: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e e .\path\to\all. 2080: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a eagle.. #.. 2090: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 20a0: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 gleShell.exe -fi 20b0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 20c0: 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d .eagle -preTest. 20d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 20e0: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c "unset -nocompl 20f0: 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 ain test_configu 2100: 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 ration".. # 2110: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 2120: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 2130: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 configuration] & 2140: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 2150: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2160: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
2170: 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ion] > 0} then {
2180: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2190: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
21a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
21b0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
21c0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default
21d0: 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20  value used..
21e0: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20      #       for
21f0: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73  this variable is
2200: 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c 65   typically "Rele
2210: 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79 20  ase", as set by
2220: 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20  the test..
2230: 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 20    #       suite
2240: 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20  itself...
2250: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
2260: 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  rn $::test_confi 2270: 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 2280: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 2290: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 22a0: 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 OTE: Normally, w 22b0: 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 e will never hit 22c0: 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61 75 this case becau 22d0: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 se the value of 22e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 22f0: 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69 67 test config 2300: 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 uration variable 2310: 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 62 is always set b 2320: 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 2330: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2340: 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 itself; howeve 2350: 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76 65 r, it can be ove 2360: 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74 68 rridden using th 2370: 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d e unset command. 2380: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2390: 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 from the -preTe 23a0: 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 st option to the 23b0: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 23c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 23d0: 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 return$::eagle
23e0: 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67  _platform(config
23f0: 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  uration)..
2400: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
2410: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f   proc getBuildCo
2420: 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20  nfigurations {}
2430: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
2440: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
2450: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 73   the list of tes
2460: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t configurations
2470: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2480: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
2490: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
24a0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
24b0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
24c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
24d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
24e0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
24f0: 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ns] && \..
2500: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a      [llength $:: 2510: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 2520: 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ons] > 0} then { 2530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2540: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 2550: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 2560: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 2570: 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 igurations... 2580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2590: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 return$::test_c
25a0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20  onfigurations..
25b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
25c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
25e0: 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f  e default list o
25f0: 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61  f test configura
2600: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  tions...
2610: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
2620: 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52 65  n [list Debug Re
2630: 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  lease]..      }.
2640: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
2650: 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 65  roc getBuildBase
2660: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
2670: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
2680: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
2690: 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 63  t the base direc
26a0: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74  tory where all t
26b0: 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c 64  he builds should
26c0: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
26d0: 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69     located.  Thi
26e0: 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 69  s will be the di
26f0: 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f 6e  rectory that con
2700: 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 6c  tains the actual
2710: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2720: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72  build output dir
2730: 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 72  ectory (e.g. par
2740: 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a  ent of "bin")...
2750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
2760: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
2770: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
2780: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
2790: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
27a0: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f  length $::build_ 27b0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 27c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 27d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27e0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 27f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c tion of the buil 2800: 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 d base directory 2810: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 2820: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 2830: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 2840: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 2850: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 2860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2870: 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65  :build_base_dire
2880: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
2890: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
28a0: 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72  sts ::common_dir
28b0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
28c0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
28d0: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e  length $::common 28e0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 28f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2900: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2910: 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 TE: Next, fallba 2920: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 ck to the parent 2930: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 directory of th 2940: 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 e one containing 2950: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2960: 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 this file (i.e 2970: 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 . "common.eagle" 2980: 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e ), if available. 2990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 29a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 29b0: 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d e dirname$::com
29c0: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 0d 0a  mon_directory]..
29d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
29e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 70  [info exists ::p
29f0: 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ath] && \..
2a00: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
2a10: 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30  gth $::path] > 0 2a20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2a30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a40: 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 OTE: Finally, fa 2a50: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 llback to the pa 2a60: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f rent directory o 2a70: 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d f the EagleTest. 2a80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2a90: 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 67 6c path. The Eagl 2aa0: 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 67 75 eTest package gu 2ab0: 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 74 68 arantees that th 2ac0: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 is variable.. 2ad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 6c # wil 2ae0: 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 l be set to the 2af0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 directory contai 2b00: 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 66 ning the first f 2b10: 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 ile to.. 2b20: 23 20 20 20 20 20 20 20 65 78 65 63 75 74 65 20 # execute 2b30: 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c the [runTestProl 2b40: 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c 69 62 ogue] script lib 2b50: 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 2e 0d rary procedure.. 2b60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2b70: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 2b80: 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 dirname$::path
2b90: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
2ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2bb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
2bc0: 20 70 61 74 68 20 69 73 20 61 76 61 69 6c 61 62   path is availab
2bd0: 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d  le, return an em
2be0: 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54 68 69  pty string.  Thi
2bf0: 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  s point..
2c00: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
2c10: 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64 2e 0d  not be reached..
2c20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2c30: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
2c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
2c50: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 75 6e  ..    proc isRun
2c60: 6e 69 6e 67 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a  ningWoW64 {} {..
2c70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
2c80: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20   NOTE: For now,
2c90: 6a 75 73 74 20 75 73 65 20 74 68 65 20 65 78 69  just use the exi
2ca0: 73 74 69 6e 67 20 74 65 73 74 20 63 6f 6e 73 74  sting test const
2cb0: 72 61 69 6e 74 20 66 6f 72 20 64 65 74 65 63 74  raint for detect
2cc0: 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ing..      #
2cd0: 20 20 20 61 20 57 6f 57 36 34 20 70 72 6f 63 65     a WoW64 proce
2ce0: 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ss...      #..
2cf0: 20 20 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65      return [have
2d00: 43 6f 6e 73 74 72 61 69 6e 74 20 77 6f 77 36 34  Constraint wow64
2d10: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
2d20: 20 70 72 6f 63 20 69 73 4d 69 78 65 64 4d 6f 64   proc isMixedMod
2d30: 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65  eAssembly { file
2d40: 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 22 22  Name {varName ""
2d50: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
2d60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
2d70: 72 73 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  rst, make sure t
2d80: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 69 6e  he test suite in
2d90: 66 72 61 73 74 72 75 63 74 75 72 65 20 69 73 20  frastructure is
2da0: 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 20 20  allowed to..
2db0: 20 20 23 20 20 20 20 20 20 20 75 73 65 20 74 68    #       use th
2dc0: 65 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e 64  e [exec] command
2dd0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2de0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2df0: 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29 5d 20  sts ::no(exec)]
2e00: 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  && ![info exists
2e10: 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 29 5d   ::no(corFlags)]
2e20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2e30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2e40: 4f 54 45 3a 20 49 66 20 74 68 65 20 6c 6f 63 61  OTE: If the loca
2e50: 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73  tion of CorFlags
2e60: 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74   is present in t
2e70: 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d  he environment,.
2e80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2e90: 20 75 73 65 20 69 74 3b 20 6f 74 68 65 72 77 69   use it; otherwi
2ea0: 73 65 20 61 73 73 75 6d 65 20 69 74 20 69 73 20  se assume it is
2eb0: 69 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a 20 20  in the PATH...
2ec0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2ed0: 20 73 65 74 20 63 6f 72 46 6c 61 67 73 20 5b 65   set corFlags [e
2ee0: 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  xpr {..
2ef0: 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a   [info exists ::
2f00: 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d 20 3f  env(CorFlags)] ?
2f10: 20 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73   $::env(CorFlags 2f20: 29 20 3a 20 22 43 6f 72 46 6c 61 67 73 22 0d 0a ) : "CorFlags".. 2f30: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 }].... 2f40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2f50: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 2f60: 20 74 6f 20 65 78 65 63 75 74 65 20 43 6f 72 46 to execute CorF 2f70: 6c 61 67 73 20 6f 6e 20 74 68 65 20 73 70 65 63 lags on the spec 2f80: 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 ified file... 2f90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2fa0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 2fb0: 20 20 20 20 20 20 20 20 65 78 65 63 20 2d 2d 20 exec -- 2fc0: 24 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c 65 20$corFlags [file
2fd0: 6e 61 74 69 76 65 6e 61 6d 65 20 24 66 69 6c 65  nativename $file 2fe0: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d Name].. } 2ff0: 20 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74 68 65 exec] == 0} the 3000: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 3010: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 3020: 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 TE: If requested 3030: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 by our caller, 3040: 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 attempt to deter 3050: 6d 69 6e 65 20 74 68 65 0d 0a 20 20 20 20 20 20 mine the.. 3060: 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 # plat 3070: 66 6f 72 6d 20 66 6f 72 20 74 68 65 20 73 70 65 form for the spe 3080: 63 69 66 69 65 64 20 66 69 6c 65 20 61 73 20 77 cified file as w 3090: 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ell... 30a0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 30b0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 30c0: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74$varName] > 0} t
30d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
30e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
30f0: 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72 65 20    # NOTE: Store
3100: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20  the platform in
3110: 74 68 65 20 6e 61 6d 65 64 20 76 61 72 69 61 62  the named variab
3120: 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  le in the..
3130: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
3140: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
3150: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...
3160: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
3170: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 3180: 6d 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 me platform.... 3190: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 31a0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 31b0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 : Attempt to ext 31c0: 72 61 63 74 20 74 68 65 20 50 45 20 6c 69 6e 65 ract the PE line 31d0: 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 from the captur 31e0: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ed.. 31f0: 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 # output. 3200: 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 If this value i 3210: 73 20 22 50 45 33 32 22 20 6f 72 20 22 50 45 33 s "PE32" or "PE3 3220: 32 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 2+", the.. 3230: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 # as 3240: 73 65 6d 62 6c 79 20 66 69 6c 65 20 69 73 20 33 sembly file is 3 3250: 32 2d 62 69 74 20 6f 72 20 36 34 2d 62 69 74 2c 2-bit or 64-bit, 3260: 20 72 65 73 70 65 63 74 69 76 65 6c 79 3b 0d 0a respectively;.. 3270: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 3280: 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69 otherwise, i 3290: 74 73 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f ts type is unkno 32a0: 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 wn... 32b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 32c0: 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e 50 45 set pattern {^PE 32d0: 20 20 20 20 20 20 20 20 3a 20 28 50 45 33 32 7c : (PE32| 32e0: 50 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a PE32\+)\s+$}....
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
3300: 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d  [regexp -line --
3310: 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20   $pattern$exec
3320: 64 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74 68 65  dummy pe32]} the
3330: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
3340: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
3350: 20 20 20 20 23 20 48 41 43 4b 3a 20 54 68 69 73      # HACK: This
3360: 20 5b 73 77 69 74 63 68 5d 20 61 73 73 75 6d 65   [switch] assume
3370: 73 20 74 68 61 74 20 33 32 2d 62 69 74 20 65 78  s that 32-bit ex
3380: 65 63 75 74 61 62 6c 65 73 20 61 72 65 0d 0a 20  ecutables are..
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
33a0: 20 20 20 20 20 61 6c 77 61 79 73 20 78 38 36 20       always x86
33b0: 61 6e 64 20 74 68 61 74 20 36 34 2d 62 69 74 20  and that 64-bit
33c0: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 20  executables are
33d0: 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20  always..
33e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 78 36        #       x6
33f0: 34 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4...
3400: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
3410: 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 63 74     switch -exact
3420: 20 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20 20 20   -- $pe32 {.. 3430: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33 PE3 3440: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 2 {.. 3450: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 3460: 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20 20 20 orm Win32.. 3470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 45 PE 3490: 33 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 32+ {.. 34a0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 set pla 34b0: 74 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20 20 20 tform x64.. 34c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de 34e0: 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 fault {.. 34f0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p 3500: 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 latform "".. 3510: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 3530: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 3540: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 3550: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform 3560: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 "".. 3570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 3580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 3590: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 35a0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 : Attempt to ext 35b0: 72 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c 59 20 ract the ILONLY 35c0: 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 line from the ca 35d0: 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 ptured.. 35e0: 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 # output 35f0: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 . If this value 3600: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 70 is zero, the sp 3610: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6d 75 73 ecified file mus 3620: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 t.. # 3630: 20 20 20 20 20 62 65 20 61 20 6d 69 78 65 64 2d be a mixed- 3640: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b 20 6f mode assembly; o 3650: 74 68 65 72 77 69 73 65 2c 20 69 74 20 63 6f 6e therwise, it con 3660: 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 tains only.. 3670: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 # ma 3680: 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 naged components 3690: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 36a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 set pa 36b0: 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 ttern {^ILONLY 36c0: 20 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a : (0|1)\s+$}..
36d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
36e0: 21 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d  ![regexp -line -
36f0: 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 63  - $pattern$exec
3700: 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20   dummy ilOnly]}
3710: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
3720: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3730: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
3740: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
3750: 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d  $ilOnly} then {. 3760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret 3770: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 3780: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 3790: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 37a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 37b0: 54 45 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 TE: If the test 37c0: 73 75 69 74 65 20 63 61 6e 6e 6f 74 20 75 73 65 suite cannot use 37d0: 20 5b 65 78 65 63 5d 20 6f 72 20 65 78 65 63 75 [exec] or execu 37e0: 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 tion of CorFlags 37f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3800: 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 66 failed, return f 3810: 61 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a alse... #.. 3820: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 3830: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... 3840: 20 20 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76 proc isBuildAv 3850: 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65 ailable { native 3860: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e directory {varN 3870: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 ame ""} } {.. 3880: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3890: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 TE: Build the fu 38a0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 lly qualified fi 38b0: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 le name for the 38c0: 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 primary assembly 38d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 38e0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 containing the S 38f0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 3900: 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e e managed compon 3910: 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20 ents. It.. 3920: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 # should 3930: 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68 be noted that th 3940: 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 is assembly file 3950: 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 may also contai 3960: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 3970: 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70 native comp 3980: 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74 onents, if a nat 3990: 69 76 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20 ive build is in 39a0: 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 use... #.. 39b0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 39c0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 39d0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 me [file join$d
39e0: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
39f0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
3a00: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a  a.SQLite.dll]]..
3a10: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
3a20: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 3a30: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 3a40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 3a50: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 se.. }.... 3a60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3a70: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 3a80: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 automatically d 3a90: 65 74 65 63 74 20 69 66 20 74 68 65 20 70 72 69 etect if the pri 3aa0: 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 mary assembly.. 3ab0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 3ac0: 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 tains any native 3ad0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 components, if 3ae0: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 necessary... 3af0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 3b00: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
3b10: 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65  ative] == 0} the
3b20: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
3b30: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
3b40: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  $varName] > 0} t 3b50: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 3b60: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
3b70: 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20  e $varName.. 3b80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 3b90: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d set native [isM 3ba0: 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 ixedModeAssembly 3bb0: 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e$fileName $varN 3bc0: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ame].. }... 3bd0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 3be0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 # NOTE: If the p 3bf0: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 rimary assembly 3c00: 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 also contains th 3c10: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 e native compone 3c20: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 nts,.. # 3c30: 20 20 20 20 77 65 20 68 61 76 65 20 65 76 65 72 we have ever 3c40: 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d ything we need.. 3c50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 3c60: 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 if {$native} the
3c70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
3c80: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
3c90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
3ca0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
3cb0: 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  d the fully qual
3cc0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20  ified file name
3cd0: 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20  for the interop
3ce0: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..
3cf0: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69  #       containi
3d00: 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  ng the System.Da
3d10: 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65  ta.SQLite native
3d20: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 66   components.  If
3d30: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
3d40: 20 20 20 20 20 66 69 6c 65 20 65 78 69 73 74 73       file exists
3d50: 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65  , we should have
3d60: 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e   everything we n
3d70: 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  eed...      #..
3d80: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
3d90: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
3da0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 3db0: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 3dc0: 20 20 20 20 20 20 53 51 4c 69 74 65 2e 49 6e 74 SQLite.Int 3dd0: 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 erop.dll]].... 3de0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 3df0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
3e00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3e10: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
3e20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
3e30: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
3e40: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
3e50: 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e  qualified file n
3e60: 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ame for the SQLi
3e70: 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23  te core..      #
3e80: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20         library.
3e90: 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78   If this file ex
3ea0: 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20  ists, we should
3eb0: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
3ec0: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  we..      #
3ed0: 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23    need...      #
3ee0: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
3ef0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
3f00: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
3f10: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 3f20: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 sqlite3 3f30: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .dll]].... 3f40: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 if {[file exists 3f50: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65$fileName]} the
3f60: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
3f70: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
3f80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
3f90: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20      # NOTE: One
3fa0: 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63  or more native c
3fb0: 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64  omponents needed
3fc0: 20 62 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e   by System.Data.
3fd0: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20  SQLite..      #
3fe0: 20 20 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e        are missin
3ff0: 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  g...      #..
4000: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
4010: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
4020: 72 6f 63 20 69 73 52 65 6c 65 61 73 65 41 76 61  roc isReleaseAva
4030: 69 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f  ilable { directo
4040: 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20  ry {varName ""}
4050: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
4060: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 4070: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 arName] > 0} the 4080: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv 4090: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 ar 1$varName $v 40a0: 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d arName.. }. 40b0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 40c0: 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c [isBuildAvailabl 40d0: 65 20 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 e ""$directory
40e0: 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d  $varName].. } 40f0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f ..... proc jo 4100: 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 inBuildDirectory 4110: 20 7b 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 { native path y 4120: 65 61 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e ear platform con 4130: 66 69 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a figuration } {.. 4140: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 4150: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 NOTE: Figure ou 4160: 74 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 t and then retur 4170: 6e 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c n the fully qual 4180: 69 66 69 65 64 20 70 61 74 68 20 74 6f 20 74 68 ified path to th 4190: 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 e build.. # 41a0: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory 41b0: 20 62 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 based on all th 41c0: 65 20 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 e arguments prov 41d0: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call 41e0: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 er... #.. 41f0: 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d if {$native}
4200: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4210: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f   return [file jo
4220: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65  in $path bin$ye
4230: 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f  ar $platform$co
4240: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20  nfiguration]..
4250: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
4260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
4270: 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69  le join $path bi 4280: 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75 n$year $configu 4290: 72 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 ration bin].. 42a0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 42b0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c proc getBuil 42c0: 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d dDirectory {} {. 42d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 42e0: 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 # NOTE: See if t 42f0: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 he "native" runt 4300: 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 ime option has b 4310: 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c een set. If so, 4320: 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 use the.. 4330: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 4340: 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d y for the mixed- 4350: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 mode assembly (a 4360: 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 .k.a. the native 4370: 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 interop.. 4380: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 4390: 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 ). To enable th 43a0: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 is option via th 43b0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 e command line, 43c0: 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 enter a.. # 43d0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 command s 43e0: 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 imilar to one of 43f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 the following ( 4400: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 all on one line) 4410: 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 :.. #.. 4420: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 # EagleS 4430: 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 hell.exe -initia 4440: 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 lize -runtimeOpt 4450: 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 ion native.. 4460: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c # -fil 4470: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e e .\path\to\all. 4480: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a eagle.. #.. 4490: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54 6f # To 44a0: 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 enable this opt 44b0: 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d ion via the comm 44c0: 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 and line prior t 44d0: 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 22 0d o the "beta 16". 44e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 . # r 44f0: 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c elease of Eagle, 4500: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 the following c 4510: 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 ommand must be u 4520: 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 sed instead.. 4530: 20 20 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f # (also 4540: 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 all on one line 4550: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 ):.. #.. 4560: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 4570: 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 Shell.exe -initi 4580: 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 alize -postIniti 4590: 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 alize.. # 45a0: 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 "object i 45b0: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 nvoke Interprete 45c0: 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 64 52 r.GetActive AddR 45d0: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 untimeOption nat 45e0: 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 ive".. # 45f0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 -file .\pa 4600: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d th\to\all.eagle. 4610: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4620: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 4630: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f ::build_directo 4640: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 4650: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 4660: 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 th$::build_dire
4670: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e  ctory] > 0} then
4680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
4690: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
46a0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
46b0: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  he build directo
46c0: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
46d0: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
46e0: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
46f0: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61  re, use it verba
4700: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  tim...        #.
4710: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
4720: 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f  $::build_directo 4730: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 4740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4750: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 4760: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 f the "native" r 4770: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 untime option is 4780: 20 73 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d set, the mixed- 4790: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 mode assembly.. 47a0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 47b0: 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 s being tested. 47c0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 In that case, t 47d0: 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 he path to the b 47e0: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a uild directory.. 47f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4800: 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 will contain the 4810: 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 platform name a 4820: 6e 64 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 nd all the binar 4830: 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a ies under test.. 4840: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4850: 73 68 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e should be presen 4860: 74 20 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 t in that direct 4870: 6f 72 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 ory. If the "na 4880: 74 69 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 tive" runtime.. 4890: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f # o 48a0: 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 ption is not set 48b0: 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 , the build dire 48c0: 63 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f ctory will be co 48d0: 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a nsidered to be.. 48e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 48f0: 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 "platform-neutra 4900: 6c 22 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 l", with the not 4910: 61 62 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f able exception o 4920: 66 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 f any native.. 4930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 # as 4940: 73 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 sembly (e.g. "SQ 4950: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 4960: 22 29 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 ") copied there 4970: 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 during the.. 4980: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 4990: 64 20 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 d process itself 49a0: 2e 20 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 . If the build 49b0: 70 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 process somehow 49c0: 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 does not.. 49d0: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 # copy t 49e0: 68 65 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 he native assemb 49f0: 6c 79 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 ly for this plat 4a00: 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 form, most of th 4a10: 65 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 e tests.. 4a20: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 4a30: 73 75 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c suite will simpl 4a40: 79 20 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 y be skipped. G 4a50: 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e enerally speakin 4a60: 67 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 g, there.. 4a70: 20 20 23 20 20 20 20 20 20 20 61 72 65 20 74 77 # are tw 4a80: 6f 20 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 o ways to build 4a90: 74 68 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 the binaries whe 4aa0: 6e 20 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 n preparing to r 4ab0: 75 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 un the.. 4ac0: 23 20 20 20 20 20 20 20 74 65 73 74 20 73 75 69 # test sui 4ad0: 74 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te:.. #.. 4ae0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4af0: 31 2e 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 1. Build the sep 4b00: 61 72 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e arate managed an 4b10: 64 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c d native assembl 4b20: 69 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a ies using some.. 4b30: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4b40: 20 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 commands simi 4b50: 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 lar to:.. 4b60: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 #.. # 4b70: 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 build.bat 4b80: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e${Configuration
4b90: 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50  }ManagedOnly ${P 4ba0: 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 latform}.. 4bb0: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 # bui 4bc0: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 ld.bat${Configu
4bd0: 72 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c  ration}NativeOnl
4be0: 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20  y ${Platform}.. 4bf0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4c00: 20 20 23 20 20 20 20 20 20 20 20 20 20 57 68 65 # Whe 4c10: 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 re${Configurati
4c20: 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 44  on} is either "D
4c30: 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73  ebug" or "Releas
4c40: 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  e" and..
4c50: 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61  #          ${Pla 4c60: 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 tform} is either 4c70: 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 "Win32" or "x64 4c80: 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 "... #.. 4c90: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 32 # 2 4ca0: 2e 20 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 . Build the mixe 4cb0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 4cc0: 75 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 using a command 4cd0: 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 similar to:.. 4ce0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4cf0: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 # build 4d00: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 .bat${Configura
4d10: 74 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d  tion} ${Platform 4d20: 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 }.. #.. 4d30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 4d40: 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 Where${Configu
4d50: 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65  ration} is eithe
4d60: 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65  r "Debug" or "Re
4d70: 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20  lease" and..
4d80: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24      #          $4d90: 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 {Platform} is ei 4da0: 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 ther "Win32" or 4db0: 22 78 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 "x64". If this 4dc0: 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 command is.. 4dd0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 75 # u 4de0: 73 65 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 sed, various tes 4df0: 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 ts that require 4e00: 73 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 supplementary ma 4e10: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 naged.. # 4e20: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 assemb 4e30: 6c 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 lies (e.g. LINQ) 4e40: 20 6d 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 may be skipped 4e50: 75 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e unless those bin 4e60: 61 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 aries.. # 4e70: 20 20 20 20 20 20 20 20 20 20 61 72 65 20 73 75 are su 4e80: 62 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 bsequently copie 4e90: 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 d into the corre 4ea0: 63 74 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e ct directory (i. 4eb0: 65 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 e. by.. # 4ec0: 20 20 20 20 20 20 20 20 20 20 22 74 65 73 74 5f "test_ 4ed0: 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 all.bat")... 4ee0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4ef0: 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 Note that 4f00: 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c all of the buil 4f10: 64 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 d commands above 4f20: 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f will default to 4f30: 20 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 using.. 4f40: 23 20 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 # the late 4f50: 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 st version of MS 4f60: 42 75 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 Build available 4f70: 61 6e 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 and the "test_ye 4f80: 61 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 ar" may.. 4f90: 20 23 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f # need to 4fa0: 20 62 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 be adjusted acc 4fb0: 6f 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 ordingly to actu 4fc0: 61 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 ally run the tes 4fd0: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 4fe0: 20 20 23 20 20 20 20 20 20 20 52 65 66 65 72 20 # Refer 4ff0: 74 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 to the comments 5000: 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 in [getBuildYear 5010: 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 ] for more infor 5020: 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 mation on.. 5030: 20 20 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 # how t 5040: 6f 20 73 65 74 20 74 68 69 73 20 76 61 72 69 61 o set this varia 5050: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ble... #. 5060: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 . set nat 5070: 69 76 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f ive [hasRuntimeO 5080: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d ption native]... 5090: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 50a0: 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 [joinBuildDirect 50b0: 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 ory$native [get
50c0: 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f  BuildBaseDirecto
50d0: 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ry] \..
50e0: 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72     [getBuildYear
50f0: 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  ] [getBuildPlatf
5100: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65  orm $native] [ge 5110: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 5120: 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ion]].. }.. 5130: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 5140: 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 oc getReleaseVer 5150: 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 sion {} {.. 5160: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 5170: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 : Figure out the 5180: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e release version 5190: 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 for use with th 51a0: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 51b0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 51c0: 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 when checking f 51d0: 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c or available rel 51e0: 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d eases... #. 51f0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 5200: 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 exists ::releas 5210: 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d e_version] && \. 5220: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 5230: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c ng length$::rel
5240: 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20  ease_version] >
5250: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
5260: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
5270: 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73  NOTE: The releas
5280: 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65  e version has be
5290: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74  en overridden; t
52a0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
52b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
52c0: 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20    verbatim...
52d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
52e0: 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73  return $::releas 52f0: 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 e_version.. 5300: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 5310: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 5320: 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 NOTE: No release 5330: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 version is avai 5340: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e lable, return an 5350: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a empty string... 5360: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5370: 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 It is important 5380: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 to return an emp 5390: 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 ty string here b 53a0: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 ecause the.. 53b0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 # resu 53c0: 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 lt of this proce 53d0: 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 dure may be used 53e0: 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e with [file join 53f0: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 ]... #.. 5400: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 return "" 5410: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 5420: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 5430: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b tBuildFileName { 5440: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 fileName {platf 5450: 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 orm ""} } {.. 5460: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 5470: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 TE: Returns the 5480: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e specified file n 5490: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72 ame as if it wer 54a0: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 e located in the 54b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 54c0: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c build directory, 54d0: 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 discarding any 54e0: 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d directory inform 54f0: 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 ation present.. 5500: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 # in 5510: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 the file name as 5520: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our 5530: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... 5540: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 #.. set res 5550: 75 6c 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ult [file native 5560: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 name \.. 5570: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 [file join [ge 5580: 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d tBuildDirectory] 5590: 20 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65$platform [file
55a0: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName] 55b0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ]].... #.. 55c0: 20 20 20 20 20 23 20 48 41 43 4b 3a 20 57 68 65 # HACK: Whe 55d0: 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 n running on WoW 55e0: 36 34 2c 20 61 73 73 75 6d 65 20 74 68 65 20 74 64, assume the t 55f0: 65 73 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 est executables 5600: 61 72 65 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 are present.. 5610: 20 20 20 23 20 20 20 20 20 20 20 77 69 74 68 20 # with 5620: 74 68 65 20 22 33 32 22 20 73 75 66 66 69 78 20 the "32" suffix 5630: 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20 on them... 5640: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 5650: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 26 26 RunningWoW64] && 5660: 20 5b 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e [file extension 5670: 20 24 72 65 73 75 6c 74 5d 20 65 71 20 22 2e 65$result] eq ".e
5680: 78 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  xe"} then {..
5690: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result
56a0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c  [appendArgs [fil
56b0: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 72 65 73 75  e rootname $resu 56c0: 6c 74 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 20 20 lt] 32.exe].. 56d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 56e0: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
56f0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5700: 20 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65   getExternalDire
5710: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20  ctory {} {..
5720: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
5730: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
5740: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69  e returns the di
5750: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68  rectory where th
5760: 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72  e external binar
5770: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
5780: 20 66 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 74   files are locat
5790: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
57a0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
57b0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
57c0: 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20  e dirname [file
57d0: 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69  dirname [info bi
57e0: 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d  nary]]]]..    }.
57f0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
5800: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20  BinaryDirectory
5810: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
5820: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
5830: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
5840: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72  rns the director
5850: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74  y where the test
5860: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20   application..
5870: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65      #       itse
5880: 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67  lf (i.e. the Eag
5890: 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63  le shell) is loc
58a0: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c  ated.  This will
58b0: 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20   be used as..
58c0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64     #       the d
58d0: 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74  estination for t
58e0: 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d  he copied System
58f0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74  .Data.SQLite nat
5900: 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23  ive and..      #
5910: 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61         managed a
5920: 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20  ssemblies (i.e.
5930: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20  because this is
5940: 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20 70  one of the few p
5950: 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20  laces..      #
5960: 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20 43       where the C
5970: 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79  LR will actually
5980: 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74   find and load t
5990: 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a  hem properly)...
59a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
59b0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
59c0: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f  ::binary_directo
59d0: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
59e0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
59f0: 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72  th $::binary_dir 5a00: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 ectory] > 0} the 5a10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 5a20: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 5a30: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 The location of 5a40: 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 63 the binary direc 5a50: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 tory has been ov 5a60: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 erridden;.. 5a70: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 # there 5a80: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 fore, use it ver 5a90: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 batim... 5aa0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 5ab0: 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 n$::binary_dire
5ac0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
5ad0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  lse {..        r
5ae0: 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61  eturn [info bina
5af0: 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ry]..      }..
5b00: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5b10: 20 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65   getExternalFile
5b20: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  Name { fileName
5b30: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
5b40: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
5b50: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rns the specifie
5b60: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69  d file name as i
5b70: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65  f it were locate
5b80: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
5b90: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72  #       director
5ba0: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  y containing the
5bb0: 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69   external binari
5bc0: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
5bd0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
5be0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5bf0: 65 20 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72  e join [getExter
5c00: 6e 61 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66  nalDirectory] $f 5c10: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d ileName]].. } 5c20: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 5c30: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 5c40: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 { fileName {plat 5c50: 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 form ""} } {.. 5c60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5c70: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 OTE: Returns the 5c80: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 specified file 5c90: 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 name as if it we 5ca0: 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 re located in th 5cb0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5cc0: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 binary director 5cd0: 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e y, discarding an 5ce0: 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f y directory info 5cf0: 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d rmation present. 5d00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 5d10: 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 n the file name 5d20: 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f as provided by o 5d30: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 ur caller... 5d40: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur 5d50: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 n [file nativena 5d60: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 5d70: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 [file join [getB 5d80: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 inaryDirectory] 5d90: 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20$platform [file
5da0: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]] 5db0: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 5dc0: 20 70 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e proc getCoreBin 5dd0: 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70 aryFileName { {p 5de0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61 latform ""} {sta 5df0: 6e 64 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b ndard false} } { 5e00: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5e10: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 # NOTE: Returns 5e20: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 the full path f 5e30: 6f 72 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 or the file cont 5e40: 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 69 74 aining the SQLit 5e50: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 e core.. # 5e60: 20 20 20 20 20 20 6e 61 74 69 76 65 20 6c 69 62 native lib 5e70: 72 61 72 79 20 63 6f 64 65 20 66 6f 72 20 74 68 rary code for th 5e80: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 is platform. Fi 5e90: 72 73 74 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 rst, check and s 5ea0: 65 65 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 ee if.. # 5eb0: 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 the SQLite 5ec0: 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72 core native libr 5ed0: 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 ary has already 5ee0: 62 65 65 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 been loaded. Ne 5ef0: 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 xt,.. # 5f00: 20 20 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 fallback to w 5f10: 68 61 74 20 74 68 65 20 66 75 6c 6c 20 70 61 74 hat the full pat 5f20: 68 20 73 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 h should be, bas 5f30: 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 ed on whether th 5f40: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5f50: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 5f60: 6d 62 6c 79 20 69 73 20 62 65 69 6e 67 20 75 73 mbly is being us 5f70: 65 64 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 ed and the name 5f80: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a of the current.. 5f90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6c # pl 5fa0: 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 atform... # 5fb0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 5fc0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 ch {.. ob 5fd0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 5fe0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 5ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 6000: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 6010: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 6020: 6f 64 73 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 ods _SQLiteNativ 6030: 65 4d 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d eModuleFileName. 6040: 0a 20 20 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d . } fileNam 6050: 65 5d 20 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 e] == 0 && [stri 6060: 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e ng length$fileN
6070: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
6080: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6090: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
60a0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74   SQLite core nat
60b0: 69 76 65 20 6c 69 62 72 61 72 79 20 68 61 73 20  ive library has
60c0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61  already been loa
60d0: 64 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 20  ded via..
60e0: 20 23 20 20 20 20 20 20 20 74 68 65 20 6e 61 74   #       the nat
60f0: 69 76 65 20 6c 69 62 72 61 72 79 20 70 72 65 2d  ive library pre-
6100: 6c 6f 61 64 65 72 2e 20 20 52 65 74 75 72 6e 20  loader.  Return
6110: 74 68 61 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e  that file name n
6120: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
6130: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $6140: 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 6150: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 6160: 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption 6170: 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b native]} then { 6180: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6190: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 61a0: 75 72 6e 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f urn the mixed-mo 61b0: 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 de assembly file 61c0: 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 name... 61d0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 61e0: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 n [file nativena 61f0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 6200: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 [file join [ge 6210: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 tBinaryDirectory 6220: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53 79 73 74 ]$platform Syst
6230: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
6240: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ll]]..      } el
6250: 73 65 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d  seif {$standard} 6260: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 6270: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6280: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e TE: Return the n 6290: 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 ative-only stand 62a0: 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 ard SQLite libra 62b0: 72 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 ry file name... 62c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 62d0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 62e0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 ativename \.. 62f0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j 6300: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 oin [getBinaryDi 6310: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f rectory]$platfo
6320: 72 6d 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d  rm sqlite3.dll]]
6330: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
6340: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6350: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
6360: 75 72 6e 20 74 68 65 20 6e 61 74 69 76 65 2d 6f  urn the native-o
6370: 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65  nly interop asse
6380: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  mbly file name..
6390: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
63a0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
63b0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
63c0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
63d0: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
63e0: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 63f0: 66 6f 72 6d 20 53 51 4c 69 74 65 2e 49 6e 74 65 form SQLite.Inte 6400: 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 rop.dll]].. 6410: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 6420: 20 20 70 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e proc getCommon 6430: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a Directory {} {.. 6440: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 6450: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc 6460: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 edure returns th 6470: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 e directory wher 6480: 65 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70 e the test scrip 6490: 74 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ts.. # 64a0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 64b0: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 64c0: 2c 20 74 68 69 73 20 6a 75 73 74 20 72 65 74 75 , this just retu 64d0: 72 6e 73 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 rns the Eagle.. 64e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e # bin 64f0: 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a ary directory... 6500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 6510: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 6520: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f ::common_directo 6530: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 6540: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 6550: 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 th$::common_dir
6560: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
6570: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
6580: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
6590: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
65a0: 74 68 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63  the common direc
65b0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65  tory has been se
65c0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  t;..        #
65d0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
65e0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
65f0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
6600: 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65  n $::common_dire 6610: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 6620: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 6630: 73 74 73 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 sts ::vendor_dir 6640: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 ectory] && \.. 6650: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 6660: 6c 65 6e 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 length$::vendor
6670: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
6680: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
6690: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
66a0: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
66b0: 20 6f 66 20 74 68 65 20 76 65 6e 64 6f 72 20 64   of the vendor d
66c0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
66d0: 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20  n set;..
66e0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
66f0: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
6700: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
6710: 65 74 75 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f  eturn $::vendor_ 6720: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 6730: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 6740: 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 exists ::tcl_li 6750: 62 72 61 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 brary] && \.. 6760: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6770: 65 6e 67 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 ength$::tcl_lib
6780: 72 61 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a  rary] > 0 && \..
6790: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
67a0: 69 73 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 74  isdirectory $::t 67b0: 63 6c 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 cl_library]} the 67c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 67d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 67e0: 54 68 65 20 76 61 72 69 61 62 6c 65 20 77 69 74 The variable wit 67f0: 68 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f h the location o 6800: 66 20 74 68 65 20 73 63 72 69 70 74 20 6c 69 62 f the script lib 6810: 72 61 72 79 20 69 73 0d 0a 20 20 20 20 20 20 20 rary is.. 6820: 20 23 20 20 20 20 20 20 20 73 65 74 20 61 6e 64 # set and 6830: 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 appears to be a 6840: 20 72 65 61 6c 20 64 69 72 65 63 74 6f 72 79 20 real directory 6850: 28 69 2e 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 (i.e. not embedd 6860: 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 6870: 20 20 20 20 77 69 74 68 69 6e 20 61 20 66 69 6c within a fil 6880: 65 29 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 e); therefore, u 6890: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 se it... 68a0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 68b0: 6e 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 n$::tcl_library
68c0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
68d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
68e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c       # NOTE: Fal
68f0: 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 64 69 72  lback to the dir
6900: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ectory containin
6910: 67 20 74 68 65 20 65 78 65 63 75 74 61 62 6c 65  g the executable
6920: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
6930: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e        return [in
6940: 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20  fo binary]..
6950: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
6960: 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 61 62     proc getDatab
6970: 61 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20  aseDirectory {}
6980: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
6990: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70    # NOTE: This p
69a0: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73  rocedure returns
69b0: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77   the directory w
69c0: 68 65 72 65 20 74 68 65 20 74 65 73 74 20 64 61  here the test da
69d0: 74 61 62 61 73 65 73 0d 0a 20 20 20 20 20 20 23  tabases..      #
69e0: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
69f0: 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65   located.  By de
6a00: 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74  fault, this just
6a10: 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72   uses the tempor
6a20: 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
6a30: 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e     directory con
6a40: 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 69 73  figured for this
6a50: 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20   system...
6a60: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
6a70: 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61  fo exists ::data
6a80: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20  base_directory]
6a90: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
6aa0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $6ab0: 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 ::database_direc 6ac0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 6ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 6ae0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 6af0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 6b00: 65 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 e database direc 6b10: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 tory has been ov 6b20: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 erridden;.. 6b30: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 # there 6b40: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 fore, use it... 6b50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6b60: 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 return$::data
6b70: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a  base_directory..
6b80: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
6b90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73  [info exists ::s
6ba0: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
6bb0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
6bc0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
6bd0: 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65   $::scratch_dire 6be0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 6bf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 6c00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 6c10: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 6c20: 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65 63 he scratch direc 6c30: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 tory has been ov 6c40: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 erridden;.. 6c50: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 # there 6c60: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 fore, use it... 6c70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6c80: 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 return$::scra
6c90: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  tch_directory..
6ca0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
6cb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67         return [g
6cc0: 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d  etTemporaryPath]
6cd0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
6ce0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
6cf0: 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74  tTemporaryDirect
6d00: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
6d10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6d20: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
6d30: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
6d40: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
6d50: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 0d  temporary files.
6d60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
6d70: 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64  hould be located
6d80: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
6d90: 68 69 73 20 6a 75 73 74 20 75 73 65 73 20 74 68  his just uses th
6da0: 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20  e temporary..
6db0: 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
6dc0: 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20  tory configured
6dd0: 66 6f 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e  for this system.
6de0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6df0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
6e00: 73 20 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69  s ::temporary_di
6e10: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
6e20: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
6e30: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f   length $::tempo 6e40: 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 rary_directory] 6e50: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 6e60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6e70: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 6e80: 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 tion of the temp 6e90: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 orary directory 6ea0: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 6eb0: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 den;.. # 6ec0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 6ed0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 6ee0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 6ef0: 75 72 6e 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 urn$::temporary
6f00: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
6f10: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
6f20: 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74  o exists ::scrat
6f30: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  ch_directory] &&
6f40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
6f50: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 6f60: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director 6f70: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 6f80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6f90: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 6fa0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 ocation of the s 6fb0: 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 cratch directory 6fc0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 6fd0: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 6fe0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 6ff0: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 , use it... 7000: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 7010: 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f turn$::scratch_
7020: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
7030: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
7040: 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65     return [getTe
7050: 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20  mporaryPath]..
7060: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
7070: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 73  .    proc getTes
7080: 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d 62  tOverridesPreamb
7090: 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61  le { {extraVarNa
70a0: 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  mes ""} } {..
70b0: 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20     set varNames
70c0: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  [list]....
70d0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
70e0: 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73   If available, s
70f0: 74 61 72 74 20 77 69 74 68 20 74 68 65 20 6d 61  tart with the ma
7100: 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73  ster list of tes
7110: 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20  t override..
7120: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62    #       variab
7130: 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  les...      #..
7140: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
7150: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65  xists ::test_ove
7160: 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20  rrides] && \..
7170: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68          [llength
7180: 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64   $::test_overrid 7190: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d es] > 0} then {. 71a0: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 . eval la 71b0: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 ppend varNames$
71c0: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73  ::test_overrides
71d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
71e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
71f0: 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64  TE: If requested
7200: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20   by our caller,
7210: 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e  add any addition
7220: 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20  al variable..
7230: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73     #       names
7240: 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20   to copy now...
7250: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
7260: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72   {[llength $extr 7270: 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 aVarNames] > 0} 7280: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7290: 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 eval lappend var 72a0: 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e Names$extraVarN
72b0: 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ames..      }...
72c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
72d0: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68  # NOTE: Build th
72e0: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  e script fragmen
72f0: 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  t to be returned
7300: 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65   by processing e
7310: 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ach..      #
7320: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65     variable name
7330: 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20   and adding the
7340: 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 72 69  nececessary scri
7350: 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72  pt fragments for
7360: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7370: 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  each one...
7380: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   #..      set re
7390: 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20  sult ""....
73a0: 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65   foreach varName
73b0: 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20   $varNames {.. 73c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 73d0: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 73e0: 68 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f he qualified glo 73f0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d bal variable nam 7400: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 7410: 20 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56 set fullV 7420: 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 arName [appendAr 7430: 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d gs ::$varName].
7440: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
7450: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f        # NOTE: Do
7460: 65 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  es the variable
7470: 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e  exist in this in
7480: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78  terpreter contex
7490: 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t?..        #..
74a0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
74b0: 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72   exists $fullVar 74c0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 74d0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 74e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70 # NOTE: Ap 74f0: 70 65 6e 64 20 61 20 73 63 72 69 70 74 20 66 72 pend a script fr 7500: 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65 agment to the re 7510: 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63 sult that will c 7520: 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 orrectly.. 7530: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 # copy 7540: 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76 any contained v 7550: 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20 alue to another 7560: 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 interpreter cont 7570: 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ext... 7580: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 #.. app 7590: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73 end result \n "s 75a0: 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d et "$fullVarNam
75b0: 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 66 75  e " \{" [set $fu 75c0: 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 llVarName] \}.. 75d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 75e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 75f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 # NOTE: If t 7600: 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 he result contai 7610: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 ns one or more s 7620: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c cript fragments, 7630: 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20 append a.. 7640: 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65 # newline 7650: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 7660: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 7670: 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20 ngth$result] >
7680: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
7690: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74     append result
76a0: 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   \n..      }....
76b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 76c0: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 76d0: 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 44 proc getAppD 76e0: 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20 omainPreamble { 76f0: 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66 {prefix ""} {suf 7700: 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 fix ""} } {.. 7710: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7720: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 TE: This procedu 7730: 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 73 re returns a tes 7740: 74 20 73 65 74 75 70 20 73 63 72 69 70 74 20 66 t setup script f 7750: 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 ragment suitable 7760: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 for.. # 7770: 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62 evaluation b 7780: 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72 y an interpreter 7790: 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69 created in an i 77a0: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 solated applicat 77b0: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # 77c0: 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20 domain. The 77d0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment 77e0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 being returned w 77f0: 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65 ill be surrounde 7800: 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 d by.. # 7810: 20 20 20 20 74 68 65 20 70 72 65 66 69 78 20 61 the prefix a 7820: 6e 64 20 73 75 66 66 69 78 20 22 73 63 72 69 70 nd suffix "scrip 7830: 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65 t fragments" spe 7840: 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 cified by our ca 7850: 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 ller,.. # 7860: 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68 if any. Th 7870: 65 20 65 6e 74 69 72 65 20 73 63 72 69 70 74 20 e entire script 7880: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 being returned w 7890: 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75 74 ill be substitut 78a0: 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20 ed via.. # 78b0: 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69 [subst], i 78c0: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of 78d0: 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66 our caller, bef 78e0: 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e ore being return 78f0: 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ed... # 7900: 20 20 20 54 68 69 73 20 73 74 65 70 20 69 73 20 This step is 7910: 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 necessary so tha 7920: 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63 t some limited c 7930: 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 ontext informati 7940: 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 on,.. # 7950: 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c primarily rel 7960: 61 74 65 64 20 74 6f 20 74 68 65 20 74 65 73 74 ated to the test 7970: 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c ing directories, 7980: 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72 can be transfer 7990: 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 red.. # 79a0: 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 to the interp 79b0: 72 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f reter in the iso 79c0: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f lated applicatio 79d0: 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 n domain, making 79e0: 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 it.. # 79f0: 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65 able to succe 7a00: 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 ssfully run test 7a10: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6f s that require o 7a20: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 ne or more of th 7a30: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 7a40: 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66 files in one of 7a50: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 the testing dir 7a60: 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65 ectories. Calle 7a70: 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69 rs should keep i 7a80: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 7a90: 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20 74 mind that the t 7aa0: 65 73 74 20 73 63 72 69 70 74 20 66 72 61 67 6d est script fragm 7ab0: 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e ent being return 7ac0: 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f ed cannot rely o 7ad0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 7ae0: 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72 any script libr 7af0: 61 72 79 20 70 72 6f 63 65 64 75 72 65 73 20 74 ary procedures t 7b00: 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76 hat are not prov 7b10: 69 64 65 64 20 62 79 20 74 68 65 20 45 61 67 6c ided by the Eagl 7b20: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 7b30: 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67 65 library package 7b40: 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 (i.e. "init.eag 7b50: 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 le"), including 7b60: 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62 those provided b 7b70: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 7b80: 20 74 68 65 20 45 61 67 6c 65 20 74 65 73 74 20 the Eagle test 7b90: 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20 package, unless 7ba0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e the file contain 7bb0: 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64 ing them is load 7bc0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 7bd0: 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73 manually via s 7be0: 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e ome other mechan 7bf0: 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63 ism (e.g. by inc 7c00: 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61 luding appropria 7c10: 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 te.. # 7c20: 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69 [package requi 7c30: 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20 re] or [source] 7c40: 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20 commands in the 7c50: 70 72 65 66 69 78 20 6f 72 20 73 75 66 66 69 78 prefix or suffix 7c60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7c70: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 script fragments 7c80: 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 ). Also, all va 7c90: 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 riable reference 7ca0: 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64 s and all nested 7cb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7cc0: 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74 commands (i.e. t 7cd0: 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20 62 hose in square b 7ce0: 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e rackets) contain 7cf0: 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d ed in the final. 7d00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 7d10: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77 cript fragment w 7d20: 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67 ill end up being 7d30: 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 evaluated in th 7d40: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 e context of the 7d50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7d60: 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 calling interpre 7d70: 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 ter and not the 7d80: 74 61 72 67 65 74 20 69 6e 74 65 72 70 72 65 74 target interpret 7d90: 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 er created in th 7da0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 7db0: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 isolated applic 7dc0: 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c ation domain unl 7dd0: 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73 ess the dollar s 7de0: 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61 igns and/or squa 7df0: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 re.. # 7e00: 20 20 62 72 61 63 6b 65 74 73 20 61 72 65 20 73 brackets are s 7e10: 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20 pecially quoted 7e20: 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73 with backslashes 7e30: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 7e40: 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 return [upleve 7e50: 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20 l 1 [list subst 7e60: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 72 65 [appendArgs$pre
7e70: 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  fix {..        i
7e80: 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  f {[hasRuntimeOp
7e90: 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68  tion native]} th
7ea0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
7eb0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
7ec0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
7ed0: 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70  ive AddRuntimeOp
7ee0: 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20  tion native..
7ef0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
7f00: 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65  [getTestOverride
7f10: 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20  sPreamble [list
7f20: 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65  path test_channe
7f30: 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a  l]] $suffix]]].. 7f40: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7f50: 6f 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e oc tryCopyExtern 7f60: 61 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 alFile {.. 7f70: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b fileName { 7f80: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 platform ""} {ne 7f90: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 wFileName ""} {v 7fa0: 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 erbose false} } 7fb0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 {.. set sou 7fc0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 rceFileName [get 7fd0: 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 ExternalFileName 7fe0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20$fileName]....
7ff0: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
8000: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69  exists $sourceFi 8010: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 8020: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
8030: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
8040: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $8050: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 8060: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 8070: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 8080: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e - skipped copyin 8090: 67 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 g external file 80a0: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
80b0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
80c0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
80d0: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
80e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
80f0: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20      return..
8100: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
8110: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
8120: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20  $newFileName] > 8130: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 8140: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil 8150: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary 8160: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c FileName$newFil
8170: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] 8180: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 8190: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta 81a0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge 81b0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 81c0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66$fileName $platf 81d0: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d orm].. }... 81e0: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 . set targe 81f0: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 tDirectory [file 8200: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 dirname$target
8210: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  FileName]....
8220: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
8230: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66  .        if {![f
8240: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67  ile exists $targ 8250: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 etDirectory]} th 8260: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 8270: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 file mkdir$targ
8280: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  etDirectory..
8290: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
82a0: 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65  file copy -force
82b0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 82c0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
82d0: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d  ..      }] == 0}
82e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
82f0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 8300: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 8310: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 8320: 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 "---- copied e 8330: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f xternal file fro 8340: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
8350: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22  eName "\" to \""
8360: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8370: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName 8380: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e 8390: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 83a0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
83b0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
83c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
83d0: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to
83e0: 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69  copy external fi
83f0: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 8400: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. 8410: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 "\" t 8420: 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c o \""$targetFil
8430: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
8440: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
8450: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79      proc tryCopy
8460: 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20  BinaryFile {..
8470: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
8480: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
8490: 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22   {newFileName ""
84a0: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65  } {verbose false
84b0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
84c0: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20   sourceFileName
84d0: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
84e0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  me $fileName$pl
84f0: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
8500: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
8510: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  ts $sourceFileNa 8520: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 8530: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
8540: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
8550: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 8560: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 8570: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 8580: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 8590: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 ipped copying bi 85a0: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 nary file \""$s
85b0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
85c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
85d0: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
85e0: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
85f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
8600: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  turn..      }...
8610: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
8620: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69  ng length $newFi 8630: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 leName] > 0} the 8640: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 8650: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 targetFileName 8660: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 8670: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 e$newFileName $8680: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 platform].. 8690: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 86a0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil 86b0: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 eName [getBuildF 86c0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
86d0: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20  e $platform].. 86e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 }.... s 86f0: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f et targetDirecto 8700: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 ry [file dirname 8710: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
8720: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
8730: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
8740: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
8750: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ts $targetDirect 8760: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. 8770: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 file mkd 8780: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ir$targetDirect
8790: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ory..        }..
87a0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70          file cop
87b0: 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65  y -force $source 87c0: 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 FileName$target
87d0: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..
87e0: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
87f0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $8800: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 8810: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 8820: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 8830: 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 copied binary fi 8840: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
8850: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20  rceFileName "\"
8860: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  to \"" \..
8870: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c        $targetFil 8880: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. 8890: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 88a0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
88b0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
88c0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
88d0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
88e0: 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72  ed to copy binar
88f0: 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  y file from \""
8900: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 8910: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 8920: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
8930: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
8940: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
8950: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
8960: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d  CopyBuildFile {.
8970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c  .            fil
8980: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
8990: 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65  ""} {newFileName
89a0: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61   ""} {verbose fa
89b0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
89c0: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61  set sourceFileNa
89d0: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  me [getBuildFile
89e0: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  Name $fileName$
89f0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
8a00: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
8a10: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65  ists $sourceFile 8a20: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 8a30: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
8a40: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
8a50: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 8a60: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 8a70: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 8a80: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 8a90: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 skipped copying 8aa0: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 build file \""$
8ab0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
8ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
8ad0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
8ae0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
8af0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72      }..        r
8b00: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  eturn..      }..
8b10: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
8b20: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46  ing length $newF 8b30: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 ileName] > 0} th 8b40: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 8b50: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 t targetFileName 8b60: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 8b70: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 ame$newFileName
8b80: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. 8b90: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 8ba0: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 set targetF 8bb0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina 8bc0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
8bd0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. 8be0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8bf0: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 set targetDire 8c00: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e ctory [file dirn 8c10: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e ame$targetFileN
8c20: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ame]....      if
8c30: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
8c40: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
8c50: 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72  xists $targetDir 8c60: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d ectory]} then {. 8c70: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 . file 8c80: 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72 mkdir$targetDir
8c90: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..
8ca0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20  }..        file
8cb0: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75  copy -force $sou 8cc0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 rceFileName$tar
8cd0: 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  getFileName..
8ce0: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e     }] == 0} then
8cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
8d00: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8d10: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 8d30: 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 -- copied build 8d40: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
8d50: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c  ourceFileName "\
8d60: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
8d70: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46          $targetF 8d80: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. 8d90: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 8da0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
8db0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
8dc0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
8dd0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61          "---- fa
8de0: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69  iled to copy bui
8df0: 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  ld file from \""
8e00: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 8e10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8e20: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 "\" to \""$targ
8e30: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
8e40: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
8e50: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
8e60: 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c  yDeleteBinaryFil
8e70: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c  e { fileName {pl
8e80: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62  atform ""} {verb
8e90: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ose false} } {..
8ea0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
8eb0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  me [getBinaryFil
8ec0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20  eName $fileName 8ed0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20$platform]....
8ee0: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
8ef0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 8f00: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8f10: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
8f20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8f30: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 8f40: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 8f50: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 8f60: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp 8f70: 65 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 ed deleting bina 8f80: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ry file \""$fil
8f90: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
8fa0: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64         "\", it d
8fb0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22  oes not exist\n"
8fc0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
8fd0: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
8fe0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
8ff0: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  f {[catch {file
9000: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName 9010: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. 9020: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
9030: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
9040: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
9050: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
9060: 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66  deleted binary f
9070: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 9080: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } 9090: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 90a0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
90b0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
90c0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
90d0: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74    "---- failed t
90e0: 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20  o delete binary
90f0: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 9100: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. 9110: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 9120: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 proc tryDeleteB 9130: 75 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e uildFile { fileN 9140: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" 9150: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 } {verbose false 9160: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set 9170: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 fileName [getBu 9180: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c ildFileName$fil
9190: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] 91a0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ 91b0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
91c0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
91d0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver 91e0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. 91f0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
9200: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
9210: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
9220: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
9230: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
9240: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22  g build file \""
9250: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. 9260: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", 9270: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi 9280: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. 9290: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 }.. retur 92a0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 92b0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 92c0: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
92d0: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68  eName}] == 0} th
92e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
92f0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 9300: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 9310: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 9320: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 ---- deleted bui 9330: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ld file \""$fil
9340: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
9350: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
9360: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 9370: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 9380: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 9390: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 93a0: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 ed to delete bui 93b0: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ld file \""$fil
93c0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
93d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
93e0: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79      proc tryCopy
93f0: 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20  Assembly {..
9400: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
9410: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b   {platform ""} {
9420: 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f  pdb true} {verbo
9430: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  se false} } {..
9440: 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c       tryCopyBuil
9450: 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20  dFile $fileName 9460: 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65$platform "" $ve 9470: 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 rbose.... i 9480: 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d f {$pdb} then {.
9490: 0a 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79  .        tryCopy
94a0: 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e  BuildFile [appen
94b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
94c0: 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e       [file rootn
94d0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e  ame $fileName] . 94e0: 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22 pdb]$platform "
94f0: 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  " $verbose.. 9500: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 9510: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet 9520: 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 eAssembly {.. 9530: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d fileNam 9540: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 9550: 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 {pdb true} {verb 9560: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ose false} } {.. 9570: 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 tryDeleteB 9580: 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e inaryFile$fileN
9590: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76  ame $platform$v
95a0: 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20  erbose....
95b0: 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b  if {$pdb} then { 95c0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 6c .. tryDel 95d0: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 eteBinaryFile [a 95e0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 95f0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 [file r 9600: 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ootname$fileNam
9610: 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f  e] .pdb] $platfo 9620: 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 rm$verbose..
9630: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
9640: 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64      proc tryLoad
9650: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e  Assembly { fileN
9660: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  ame {platform ""
9670: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
9680: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69   fileName [getBi
9690: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 96a0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
96b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
96c0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
96d0: 20 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f   set assembly [o
96e0: 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64  bject load -load
96f0: 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73  type File -alias
9700: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20   $fileName].. 9710: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e }] == 0} then 9720: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 9730: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 9740: 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 ow, add the nece 9750: 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 ssary test const 9760: 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 raint... 9770: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f #.. addCo 9780: 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 nstraint [file r 9790: 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 ootname [file ta 97a0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a il$fileName]]..
97b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
97c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61       # NOTE: Gra
97d0: 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74  b the image runt
97e0: 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d  ime version from
97f0: 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65   the assembly be
9800: 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23  cause..        #
9810: 20 20 20 20 20 20 20 73 65 76 65 72 61 6c 20 74         several t
9820: 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20  ests rely on it
9830: 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e  having a certain
9840: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...
9850: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   #..        addC
9860: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
9870: 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c  dArgs [file tail
9880: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d   $fileName] _ \. 9890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 . [$a
98a0: 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e  ssembly ImageRun
98b0: 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d  timeVersion]]...
98c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
98d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
98e0: 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68  rn the full path
98f0: 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66   of the loaded f
9900: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ile...        #.
9910: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
9920: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 9930: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 9940: 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d rn "".. }.... 9950: 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 . proc isSQLi 9960: 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 teReady {} {.. 9970: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 9980: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 9990: 75 72 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 ure must return 99a0: 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 non-zero only if 99b0: 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 the SQLite nati 99c0: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ve.. # 99d0: 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 library and th 99e0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 99f0: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 Lite managed ass 9a00: 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 embly are loaded 9a10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9a20: 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us 9a30: 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 e by the test su 9a40: 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c ite. Currently, 9a50: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d this procedure. 9a60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 9a70: 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 hould be called 9a80: 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b only after the [ 9a90: 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d tryLoadAssembly] 9aa0: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a procedure has.. 9ab0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 9ac0: 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f en called to pro 9ad0: 62 65 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 be for the Syste 9ae0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 m.Data.SQLite ma 9af0: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a naged assembly.. 9b00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 9b10: 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 d the [checkForS 9b20: 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 QLite] procedure 9b30: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 has been called 9b40: 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 to probe for.. 9b50: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 9b60: 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c SQLite native l 9b70: 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 ibrary; otherwis 9b80: 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 e, this procedur 9b90: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 e will simply.. 9ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 # alw 9bb0: 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e ays return zero. 9bc0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9bd0: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d return [expr {. 9be0: 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f . [haveCo 9bf0: 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e nstraint System. 9c00: 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 Data.SQLite] && 9c10: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 9c20: 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d SQLite].. } 9c30: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 9c40: 20 70 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 proc matchMachi 9c50: 6e 65 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 ne { platform } 9c60: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 9c70: 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 # NOTE: An emp 9c80: 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 ty string for th 9c90: 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 e platform means 9ca0: 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 that the build 9cb0: 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 is not.. # 9cc0: 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 [primarily 9cd0: 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 ] a native build 9ce0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 ; therefore, it 9cf0: 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d always matches.. 9d00: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9d10: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 9d20: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d th$platform] ==
9d30: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
9d40: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
9d50: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
9d60: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9d70: 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 63  E: Does the spec
9d80: 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d  ified platform m
9d90: 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 63  atch up to the c
9da0: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d  urrent process?.
9db0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9dc0: 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71  if {$platform eq 9dd0: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 9de0: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
9df0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74  orm(machine)]} t
9e00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
9e10: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
9e20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
9e30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
9e40: 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74  e specified plat
9e50: 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61  form does not ma
9e60: 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65 20  tch up with the
9e70: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
9e80: 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20  #       for the
9e90: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
9ea0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9eb0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
9ec0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
9ed0: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
9ee0: 42 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c  Builds { channel
9ef0: 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20   {select false}
9f00: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
9f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
9f20: 6b 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73  k for every poss
9f30: 69 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69  ible valid combi
9f40: 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73  nation of values
9f50: 20 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20   used when..
9f60: 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69    #       locati
9f70: 6e 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64  ng out the build
9f80: 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72   output director
9f90: 79 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20  y, showing each
9fa0: 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20  available..
9fb0: 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 76   #       build v
9fc0: 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74  ariation along t
9fd0: 68 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23  he way...      #
9fe0: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
9ff0: 6e 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c  native [list fal
a000: 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20  se true] {..
a010: 20 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 72      foreach year
a020: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d   [getBuildYears]
a030: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f   {..          fo
a040: 72 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74  reach configurat
a050: 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e  ion [getBuildCon
a060: 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a  figurations] {..
a070: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
a080: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
a090: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68  E: Figure out th
a0a0: 65 20 65 66 66 65 63 74 69 76 65 20 62 75 69 6c  e effective buil
a0b0: 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69  d platform.  Thi
a0c0: 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..
a0d0: 20 20 23 20 20 20 20 20 20 20 62 61 73 65 64 20    #       based
a0e0: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
a0f0: 74 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20  t a [primarily]
a100: 6e 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20  native build..
a110: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
a120: 20 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e    is being used.
a130: 20 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79    For [primarily
a140: 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69  ] non-native bui
a150: 6c 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lds,..
a160: 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 77    #       this w
a170: 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20  ill be an empty
a180: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...
a190: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a1a0: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
a1b0: 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f   [getBuildPlatfo
a1c0: 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20  rm $native].... a1d0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs a1e0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
a1f0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
a200: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
a210: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
a220: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62  em.Data.SQLite b
a230: 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c  uild \"" [expr \
a240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a250: 20 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61    {$native ? "na a260: 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 tive/" : ""}] [e a270: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e xpr {[string len a280: 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 gth \.. a290: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d$platform
a2a0: 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41  ] > 0 ? [appendA
a2b0: 72 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d  rgs $platform /] a2c0: 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d : ""}]$year \.
a2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
a2e0: 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f   / $configuratio a2f0: 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 n "\"... "].... a300: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. a310: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE a320: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full a330: 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 y qualified dire a340: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 ctory where the a350: 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 necessary.. a360: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c a370: 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 omponents for Sy a380: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a390: 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 should be found a3a0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # a3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se a3c0: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 t directory [joi a3d0: 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 nBuildDirectory a3e0: 24 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20$native \..
a3f0: 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
a400: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72  uildBaseDirector
a410: 79 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f  y] $year$platfo
a420: 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  rm $configuratio a430: 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n].... a440: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. a450: 20 23 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 # NOTE: Do the a460: 6e 65 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 necessary files a470: 65 78 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c exist? Currentl a480: 79 2c 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 y, no other step a490: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 s.. # a4a0: 20 20 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e are taken a4b0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 to verify this a4c0: 62 75 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c build is actuall a4d0: 79 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 y viable... a4e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a4f0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 if {[isBui a500: 6c 64 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 ldAvailable$nat
a510: 69 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d  ive $directory]} a520: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. a530: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a540: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: a550: 57 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 When in "select" a560: 20 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 mode, automatic a570: 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 ally select the a580: 66 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 first.. a590: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 # ava a5a0: 69 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 ilable build of a5b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi a5c0: 74 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 te and then retu a5d0: 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rn.. a5e0: 20 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 # immedi a5f0: 61 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 ately... a600: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. a610: 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 if {$sele
a620: 63 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68  ct && [matchMach
a630: 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20  ine $platform]} a640: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a650: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a660: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT a670: 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 E: Manually over a680: 72 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 ride all the bui a690: 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c ld directory sel a6a0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 ection.. a6b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # a6c0: 72 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 related test set a6d0: 74 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 tings in order t a6e0: 6f 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 o force this bui a6f0: 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ld.. a700: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 # of S a710: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a720: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 e to be used... a730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # a740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a750: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke a760: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA a770: 63 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 ctive [expr {$na
a780: 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20  tive ? \..
a790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
a7a0: 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22  ddRuntimeOption"
a7b0: 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d   : "RemoveRuntim
a7c0: 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76  eOption"}] nativ
a7d0: 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e....
a7e0: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
a7f0: 79 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20  year $year.. a800: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set a810: 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 ::test_platform a820: 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20$platform..
a830: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
a840: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
a850: 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69  ion $configurati a860: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 on.... a870: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
a880: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
a890: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a8a0: 20 20 20 20 20 20 20 20 22 79 65 73 2c 20 73 65          "yes, se
a8b0: 6c 65 63 74 65 64 20 28 22 20 5b 65 78 70 72 20  lected (" [expr
a8c0: 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69  {$native ? "nati a8d0: 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 ve/" : ""}] \.. a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a8f0: 20 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e [expr {[strin a900: 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
a910: 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e  rm] > 0 ? [appen
a920: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c               $pl a940: 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d atform /] : ""}] a950: 20 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67$year / $config a960: 75 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a uration ")\n"].. a970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a980: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e a9a0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. a9b0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
a9c0: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20  annel yes\n..
a9d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
a9e0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
a9f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
aa00: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel aa10: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 no\n.. aa20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. aa30: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. aa40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r aa50: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. aa60: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc aa70: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 checkForSQLiteRe aa80: 6c 65 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c leases { channel aa90: 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 {select false} aaa0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. aab0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec aac0: 6b 20 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 k for past relea aad0: 73 65 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 ses of System.Da aae0: 74 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 ta.SQLite in the aaf0: 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 directory.. ab00: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 # contai ab10: 6e 65 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 ned in the "Syst ab20: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 em.Data.SQLite" ab30: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari ab40: 61 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 able, if.. ab50: 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e # present. ab60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ab70: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist ab80: 73 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 s ::env(System.D ab90: 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 ata.SQLite)] && aba0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st abb0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 ring length$::e
abc0: 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nv(System.Data.S
abd0: 51 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65  QLite)] > 0} the
abe0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
abf0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
ac00: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
ac10: 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74  qualified direct
ac20: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65  ory where the ne
ac30: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20  cessary..
ac40: 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65   #       compone
ac50: 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  nts for System.D
ac60: 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c  ata.SQLite shoul
ac70: 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20  d be found...
ac80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ac90: 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66  set directory [f
aca0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
acb0: 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
acc0: 20 20 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28           $::env( acd0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi ace0: 74 65 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 te) [getReleaseV acf0: 65 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 ersion]]].... ad00: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
ad10: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
ad20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
ad30: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
ad40: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
ad50: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22  Lite release \""
ad60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ad70: 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e  $directory "\".. ad80: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 . "].... ad90: 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 if {[isReleaseAv ada0: 61 69 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f ailable$directo
adb0: 72 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  ry platform]} th
adc0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
add0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
ade0: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d  th $platform] == adf0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. ae00: 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 set plat ae10: 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 form unknown.. ae20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... ae30: 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 if {$sele
ae40: 63 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68  ct && [matchMach
ae50: 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20  ine $platform]} ae60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ae70: 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f set ::build_ ae80: 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 directory$direc
ae90: 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tory....
aea0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann aeb0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " aec0: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 yes, selected (" aed0: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22$platform ")\n"
aee0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
aef0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
af00: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
af10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
af20: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap af30: 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 pendArgs "yes (" af40: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22$platform ")\n"
af50: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
af60: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
af70: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
af80: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. af90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 ... for afa0: 65 61 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 each path [lsort afb0: 20 2d 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 -decreasing [fi afc0: 6c 65 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f le list$directo
afd0: 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20  ry *]] {..
afe0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
aff0: 65 78 69 73 74 73 20 24 70 61 74 68 5d 20 26 26  exists $path] && b000: 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f [file isdirecto b010: 72 79 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 ry$path]} then
b020: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
b030: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b040: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b060: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking b070: 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. b080: 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c SQLite release \ b090: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. b0a0: 20 20 20 20 20 20 20 20 24 70 61 74 68 20 22 5c$path "\
b0b0: 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20  "... "]....
b0c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73           if {[is
b0d0: 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65  ReleaseAvailable
b0e0: 20 24 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d   $path platform] b0f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b100: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s b110: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c tring length$pl
b120: 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68  atform] == 0} th
b130: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b140: 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74          set plat
b150: 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20  form unknown..
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b170: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
b180: 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26     if {$select & b190: 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 & [matchMachine b1a0: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e$platform]} then
b1b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
b1c0: 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c        set ::buil
b1d0: 64 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 74  d_directory $pat b1e0: 68 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h.... b1f0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
b200: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
b210: 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64  s "yes, selected
b220: 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29   (" $platform ") b230: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... b240: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return b250: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 true.. b260: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. b270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b280: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
b290: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79  l [appendArgs "y
b2a0: 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20  es (" $platform b2b0: 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 ")\n"].. b2c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. b2d0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else b2e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. b2f0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
b300: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20  l no\n..
b310: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
b320: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
b330: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
b340: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
b350: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c b360: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr b370: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. b380: 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d "---- environm b390: 65 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 ent variable \"S b3a0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit b3b0: 65 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a e\" is not " \.. b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 73 65 74 "set b3d0: 2c 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b , skipping check b3e0: 20 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e for releases... b3f0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d \n"].. }... b400: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 . return fa b410: 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 lse.. }..... b420: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor b430: 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 SQLiteLibrary { b440: 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 channel } {.. b450: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
b460: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67  l "---- checking
b470: 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65   for SQLite core
b480: 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d   library... "...
b490: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
b4a0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
b4b0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
b4c0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
b4e0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
b4f0: 51 4c 69 74 65 33 20 53 51 4c 69 74 65 56 65 72  QLite3 SQLiteVer
b500: 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65  sion..      } ve
b510: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
b520: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
b530: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
b540: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74  Check if the ret
b550: 75 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61  urned version wa
b560: 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20  s null.  If so,
b570: 6d 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20  make it easy..
b580: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
b590: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20   spot...
b5a0: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
b5b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v b5c0: 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 ersion] == 0} th b5d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. b5e0: 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c set version null b5f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... b600: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. b610: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp b620: 74 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 t to query the F b630: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide b640: 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 ntifier for the b650: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 SQLite.. b660: 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 # core lib b670: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 rary... # b680: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c b690: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. b6a0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke b6b0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli b6c0: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. b6d0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S b6e0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 QLite.SQLite3 SQ b6f0: 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 LiteSourceId.. b700: 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 } sourceId b710: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. b720: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b730: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 # NOTE: We fai b740: 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 led to query the b750: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 Fossil source i b760: 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 dentifier... b770: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. b780: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId b790: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. b7a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. b7b0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: b7c0: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 Check if the re b7d0: 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f turned Fossil so b7e0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier b7f0: 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 was null. If.. b800: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s b810: 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 o, make it easy b820: 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 to spot... b830: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if b840: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b850: 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d$sourceId] == 0}
b860: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b870: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
b880: 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d  null..        }.
b890: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b8a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
b8b0: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  s, the SQLite co
b8c0: 72 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61  re library appea
b8d0: 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62  rs to be availab
b8e0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
b8f0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
b900: 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a  raint SQLite....
b910: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c b920: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr b930: 67 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 gs "yes ("$vers
b940: 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49  ion " " $sourceI b950: 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 d ")\n"].. b960: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. b970: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b980: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a   no\n..      }..
b990: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
b9a0: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
b9b0: 65 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e  eInterop { chann
b9c0: 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  el } {..      tp
b9d0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- b9e0: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for b9f0: 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 SQLite interop a ba00: 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a ssembly... ".... ba10: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch ba20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 {.. obje ba30: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags ba40: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. ba50: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste ba60: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ ba70: 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 Lite3 InteropVer ba80: 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 sion.. } ve ba90: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the baa0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. bab0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: bac0: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret bad0: 75 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 urned version wa bae0: 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 s null. If so, baf0: 6d 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 make it easy.. bb00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to bb10: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 spot... bb20: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ bb30: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
bb40: 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
bb50: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
bb60: 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c  set version null
bb70: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
bb80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
bb90: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
bba0: 74 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46  t to query the F
bbb0: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65  ossil source ide
bbc0: 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20  ntifier for the
bbd0: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20  SQLite..
bbe0: 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62  #       core lib
bbf0: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23  rary...        #
bc00: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
bc10: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
bc20: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
bc30: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
bc40: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
bc50: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
bc60: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e  QLite.SQLite3 In
bc70: 74 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20  teropSourceId..
bc80: 20 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49         } sourceI
bc90: 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
bca0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
bcb0: 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61     # NOTE: We fa
bcc0: 69 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68  iled to query th
bcd0: 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20  e Fossil source
bce0: 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20  identifier...
bcf0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
bd00: 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64      set sourceId
bd10: 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20   unknown..
bd20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
bd30: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
bd40: 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72  : Check if the r
bd50: 65 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73  eturned Fossil s
bd60: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
bd70: 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a   was null.  If..
bd80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
bd90: 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79  so, make it easy
bda0: 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20   to spot...
bdb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
bdc0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
bdd0: 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30   $sourceId] == 0 bde0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bdf0: 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 set sourceId be00: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d null.. } be10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. be20: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 # NOTE: Y be30: 65 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 es, the SQLite i be40: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly be50: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 appears to be av be60: 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 ailable... be70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 #.. add be80: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 Constraint SQLit be90: 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20 eInterop.... bea0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
beb0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
bec0: 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20  yes (" $version bed0: 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 " "$sourceId ")
bee0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  \n"]..      } el
bef0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
bf00: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ bf10: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 n.. }.. bf20: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c bf30: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 heckForSQLiteDef bf40: 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 ineConstant { ch bf50: 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a annel name } {.. bf60: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
bf70: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
bf80: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d   \..          "-
bf90: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
bfa0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
bfb0: 69 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74  ite define const
bfc0: 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d  ant \"" $name \. bfd0: 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e . "\".. bfe0: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 . "].... if bff0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. c000: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok c010: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub c020: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. c030: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S c040: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 QLite.SQLite3 De c050: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 fineConstants.. c060: 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e } defineCon c070: 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 stants] == 0} th c080: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if c090: 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 {[lsearch -exac c0a0: 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e t -nocase$defin
c0b0: 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65  eConstants $name c0c0: 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d ] != -1} then {. c0d0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. c0e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: c0f0: 59 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 Yes, this define c100: 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e constant was en c110: 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d abled when the m c120: 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 anaged.. c130: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb c140: 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e ly was compiled. c150: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. c160: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 addCons c170: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr c180: 67 73 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e gs defineConstan c190: 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t.System.Data.SQ c1a0: 4c 69 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a Lite.$name]....
c1b0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c1c0: 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. c1d0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { c1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput c1f0: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
c200: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
c210: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
c220: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann c230: 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 el error\n.. c240: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... c250: 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 proc getDateT c260: 69 6d 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a imeFormat {} {.. c270: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # c280: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc c290: 65 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 edure simply ret c2a0: 75 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c urns the "defaul c2b0: 74 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d t" DateTime form c2c0: 61 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 at used.. # c2d0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 by the te c2e0: 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 st suite... c2f0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i c300: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 nfo exists ::dat c310: 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 etime_format] && c320: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s c330: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
c340: 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d  datetime_format]
c350: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
c360: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c370: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
c380: 74 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65  the manually ove
c390: 72 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f  rridden value fo
c3a0: 72 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66  r the DateTime f
c3b0: 6f 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20  ormat...
c3c0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
c3d0: 6e 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f  n $::datetime_fo c3e0: 72 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c rmat.. } el c3f0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. c400: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: c410: 20 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 Return an ISO86 c420: 30 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 01 DateTime form c430: 61 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 at compatible wi c440: 74 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 th SQLite,.. c450: 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 # Syst c460: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 em.Data.SQLite, c470: 61 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 and suitable for c480: 20 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 round-tripping c490: 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 with the.. c4a0: 20 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 # DateTi c4b0: 6d 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 me class of the c4c0: 66 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 framework. If t c4d0: 68 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 his value is cha c4e0: 6e 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 nged,.. # c4f0: 20 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 various t c500: 65 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a ests may fail... c510: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. c520: 20 20 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d return "yyyy- c530: 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 MM-dd HH:mm:ss.F c540: 46 46 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 FFFFFFK".. c550: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... c560: 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 proc enumerable c570: 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 ToList { enumera c580: 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ble } {.. s c590: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d et result [list] c5a0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s c5b0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e tring length$en
c5c0: 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c  umerable] == 0 |
c5d0: 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71  | $enumerable eq c5e0: 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d "null"} then {. c5f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return c600: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d$result..      }
c610: 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74  ....      object
c620: 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
c630: 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65  item $enumerable c640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { c650: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
c660: 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20  item] > 0} then
c670: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70  {..          lap
c680: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74  pend result [$it c690: 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 em ToString].. c6a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } c6b0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return c6c0: 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d$result..    }.
c6d0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74  ....    proc cat
c6e0: 63 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63  chAndReturn { sc
c6f0: 72 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65  ript {stackTrace
c700: 20 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20   false} {strict
c710: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
c720: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
c730: 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73  : Evaluate the s
c740: 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62  cript provided b
c750: 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20  y our caller in
c760: 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a  their context,..
c770: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
c780: 70 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65  pturing both the
c790: 20 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20   result and the
c7a0: 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...
c7b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
c7c0: 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70   code [catch {up
c7d0: 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d  level 1 $script} c7e0: 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 result].... c7f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT c800: 45 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 70 E: Did the scrip c810: 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 t provided by ou c820: 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 r caller NOT rai c830: 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 se an error?.. c840: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if c850: 7b 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 {$strict && $cod c860: 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 e == 0 || !$stri
c870: 63 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31  ct && $code != 1 c880: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c890: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N c8a0: 4f 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 OTE: Success. R c8b0: 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 eturn a list wit c8c0: 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 h the return cod c8d0: 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 e and the result c8e0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. c8f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li c900: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 st$code $result c910: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 ].. } elsei c920: 66 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 f {$stackTrace}
c930: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c940: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
c950: 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72  E: Failure.  Our
c960: 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20   caller wants a
c970: 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65  full stack trace
c980: 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29   (if applicable)
c990: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
c9a0: 20 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74     return a list
c9b0: 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e   with the return
c9c0: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65   code and the re
c9d0: 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a  sult verbatim...
c9e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
c9f0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list
ca00: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a  $code$result]..
ca10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
ca20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
ca30: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75     # NOTE: Failu
ca40: 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20  re.  Our caller
ca50: 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20  does not want a
ca60: 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65  full stack trace
ca70: 20 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20   (if..        #
ca80: 20 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65        applicable
ca90: 29 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74  ), return a list
caa0: 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e   with the return
cab0: 20 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72   code, the error
cac0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
cad0: 20 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69    code for the i
cae0: 6e 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20  nterpreter, and
caf0: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
cb00: 65 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20  e up to the..
cb10: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69       #       poi
cb20: 6e 74 20 77 68 65 72 65 20 74 68 65 20 73 74 61  nt where the sta
cb30: 63 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20  ck trace should
cb40: 73 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20  start...
cb50: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69  #..        set i
cb60: 6e 64 65 78 20 5b 73 74 72 69 6e 67 20 66 69 72  ndex [string fir
cb70: 73 74 20 22 20 20 20 61 74 20 22 20 24 72 65 73  st "   at " $res cb80: 75 6c 74 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 ult]; # HACK: Re cb90: 6c 69 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 liable?.... cba0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list cbb0: 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f$code $::errorCo cbc0: 64 65 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 de [expr {$index
cbd0: 20 21 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20   != -1 ? \..
cbe0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
cbf0: 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e  trim [string ran
cc00: 67 65 20 24 72 65 73 75 6c 74 20 30 20 24 69 6e  ge $result 0$in
cc10: 64 65 78 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d  dex]] : $result} cc20: 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 ]].. }.. cc30: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc cc40: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 compileCSharpWit cc50: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. cc60: 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d text memory sym cc70: 62 6f 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 bols strict resu cc80: 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 ltsVarName error cc90: 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d sVarName fileNam cca0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 es.. ccb0: 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 args } {.. ccc0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: ccd0: 20 53 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f Since we are go cce0: 69 6e 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 ing to use this ccf0: 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f method name a lo cd00: 74 2c 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 t, assign it to cd10: 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 a.. # cd20: 20 76 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e variable first. cd30: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cd40: 20 73 65 74 20 61 64 64 20 52 65 66 65 72 65 6e set add Referen cd50: 63 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 cedAssemblies.Ad cd60: 64 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 d.... #.. cd70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 # NOTE: Crea cd80: 74 65 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d te the base comm cd90: 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 and to evaluate cda0: 61 6e 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 and add the prop cdb0: 65 72 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 erty settings.. cdc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha cdd0: 74 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 t are almost alw cde0: 61 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 ays needed by ou cdf0: 72 20 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e r unit tests (i. ce00: 65 2e 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 e. the System.. ce10: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 # and ce20: 20 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 System.Data ass ce30: 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 embly references ce40: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. ce50: 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b set command [ ce60: 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. ce70: 20 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 compileCSharp ce80: 24 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73$text $memory$s
ce90: 79 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72  ymbols $strict r cea0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d esults errors \. ceb0: 0a 20 20 20 20 20 20 20 20 20 20 24 61 64 64 20 .$add
cec0: 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20  System.dll $add ced0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 System.Data.dll cee0: 24 61 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e$add System.Tran
cef0: 73 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a  sactions.dll \..
cf00: 20 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53            $add S cf10: 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a ystem.Xml.dll].. cf20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cf30: 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c # NOTE: Add all cf40: 20 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 the provided fi cf50: 6c 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 le names as asse cf60: 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e mbly references. cf70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cf80: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam cf90: 65 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a e$fileNames {..
cfa0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
cfb0: 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65  command $add [ge cfc0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName cfd0: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
cfe0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
cff0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64        # NOTE: Ad
d000: 64 20 74 68 65 20 65 78 74 72 61 20 61 72 67 75  d the extra argu
d010: 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74  ments, if any, t
d020: 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f  o the command to
d030: 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20   evaluate...
d040: 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20    #..      eval
d050: 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20  lappend command
d060: 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23  $args.... # d070: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d080: 41 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c Alias the compil d090: 65 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 er local results d0a0: 20 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 and errors vari d0b0: 61 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 ables to the.. d0c0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari d0d0: 61 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 able names provi d0e0: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle d0f0: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. d100: 20 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75 upvar 1$resu
d110: 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c  ltsVarName resul
d120: 74 73 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20  ts..      upvar
d130: 31 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65  1 $errorsVarName d140: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 errors.... d150: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE d160: 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 : Evaluate the c d170: 6f 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 onstructed [comp d180: 69 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 ileCSharp] comma d190: 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 nd and return th d1a0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # d1b0: 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 result... d1c0: 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 #.. eval$c
d1d0: 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c  ommand..    }...
d1e0: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d  ..    proc isMem
d1f0: 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65  oryDb { fileName
d200: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
d210: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20       # NOTE: Is
d220: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61  the specified da
d230: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65  tabase file name
d240: 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65   really an in-me
d250: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a  mory database?..
d260: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
d270: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69  eturn [expr {$fi d280: 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f leName eq ":memo d290: 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ry:" || \.. d2a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e [string ran d2b0: 67 65 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 ge$fileName 0 1
d2c0: 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d  2] eq "file::mem
d2d0: 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a  ory:"}]..    }..
d2e0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61  ...    proc isTa
d2f0: 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b  bleInDb { name {
d300: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d  varName db} } {.
d310: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d320: 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
d330: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
d340: 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
d350: 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
d360: 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
d370: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
d380: 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68    It contains th
d390: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
d3a0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61  ction handle tha
d3b0: 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  t will be..
d3c0: 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74 6f   #       used to
d3d0: 20 65 78 65 63 75 74 65 20 74 68 65 20 71 75 65   execute the que
d3e0: 72 79 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ry used to deter
d3f0: 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65  mine if the name
d400: 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20  d table is..
d410: 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e    #       presen
d420: 74 20 69 6e 20 74 68 61 74 20 64 61 74 61 62 61  t in that databa
d430: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
d440: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var d450: 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... d460: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE d470: 3a 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 : Use the sqlite d480: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f _master table to d490: 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 determine if th d4a0: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 e named table is d4b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # d4c0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 present in the d d4d0: 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 atabase... d4e0: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c #.. set sql d4f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 {.. SELE d500: 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d CT COUNT(*) FROM d510: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 sqlite_master W d520: 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 HERE type = 'tab d530: 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f le' AND name = ? d540: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ;.. }.... d550: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N d560: 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d OTE: Return non- d570: 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 zero if the name d580: 64 20 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 d table is prese d590: 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 nt... #.. d5a0: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 return [expr d5b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c {.. [sql d5c0: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 execute -execut d5d0: 65 20 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 e scalar$db $sq d5e0: 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 l [list param1 S d5f0: 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 tring$name]] >
d600: 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20  0..      }]..
d610: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
d620: 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20  trimSql { sql }
d630: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return
d640: 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20  [regsub -all --
d650: 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72  {\s+} [string tr
d660: 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20  im $sql] " "].. d670: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro d680: 63 20 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 c executeSql { s d690: 71 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 ql {execute none d6a0: 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 } {format none} d6b0: 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 {fileName ""} } d6c0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 {.. if {[st d6d0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c ring length$fil
d6e0: 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65  eName] == 0} the
d6f0: 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  n {set fileName
d700: 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20  :memory:}..
d710: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa d720: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 me "" "" "" "" " d730: 22 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 " false false fa d740: 6c 73 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 lse false db tru d750: 65 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b e.... try { d760: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return d770: 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 [uplevel 1 [lis d780: 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. d790: 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 sql execute -ex d7a0: 65 63 75 74 65 20 24 65 78 65 63 75 74 65 20 2d ecute$execute -
d7b0: 66 6f 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24  format $format$
d7c0: 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20  db $sql]].. d7d0: 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 } finally {.. d7e0: 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 cleanupDb d7f0: 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c$fileName db fal
d800: 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  se false false..
d810: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
d820: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
d830: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b  onnectionFlags {
d840: 20 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20   fileName flags
d850: 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
d860: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
d870: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65    # NOTE: Figure
d880: 20 6f 75 74 20 77 68 69 63 68 20 64 61 74 61 62   out which datab
d890: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72  ase file name or
d8a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
d8b0: 6e 67 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20  ng these..
d8c0: 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  #       connecti
d8d0: 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63  on flags will ac
d8e0: 74 75 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e  tually apply to.
d8f0: 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65    This is not ne
d900: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23  cessary..      #
d910: 20 20 20 20 20 20 20 69 6e 20 71 75 69 65 74 20         in quiet
d920: 6d 6f 64 65 20 62 65 63 61 75 73 65 20 74 68 69  mode because thi
d930: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  s information is
d940: 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
d950: 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20  ogging..      #
d960: 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74        and report
d970: 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20  ing purposes...
d980: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
d990: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then d9a0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ d9b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
d9c0: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
d9d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
d9e0: 73 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 70  set database [ap
d9f0: 70 65 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e  pendArgs "file n
da00: 61 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ame \"" $fileNam da10: 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d e \"].. } da20: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e da30: 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 xists ::dataSour da40: 63 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ce] && \.. da50: 20 20 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 ![array ex da60: 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 ists ::dataSourc da70: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. da80: 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 set databa da90: 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 se [appendArgs " daa0: 64 61 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 data source \"" dab0: 24 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22$::dataSource \"
dac0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ]..        } els
dad0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
dae0: 65 74 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b  et database <unk
daf0: 6e 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d  nown>..        }
db00: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
db10: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
db20: 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
db30: 67 29 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e  g) the local con
db40: 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e  nection flags an
db50: 64 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  d the associated
db60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
db70: 64 61 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66  data source or f
db80: 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ile name...
db90: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$dba0: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. dbb0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
dbc0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
dbd0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
dbe0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f          "---- lo
dbf0: 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  cal connection f
dc00: 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61  lags for " $data dc10: 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 base \.. dc20: 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 " are: " [ex dc30: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng dc40: 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f th$flags] > 0 ?
dc50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
dc60: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $dc70: 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f flags \"] : "<no dc80: 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 ne>"}] \n].. dc90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. dca0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh dcb0: 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 ow (and log) the dcc0: 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 shared connecti dcd0: 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 on flags... dce0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
dcf0: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
dd00: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
dd10: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
dd20: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73  bject invoke Sys
dd30: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
dd40: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
dd50: 20 53 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20   SharedFlags..
dd60: 20 20 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c        } sharedFl
dd70: 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ags] == 0} then
dd80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
dd90: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann dda0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ ddb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ddc0: 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e "---- shared con ddd0: 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f nection flags fo dde0: 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d r "$database \.
ddf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
de00: 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 5b   are: " [expr {[
de10: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s de20: 68 61 72 65 64 46 6c 61 67 73 5d 20 3e 20 30 20 haredFlags] > 0 de30: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. de40: 20 20 20 20 24 73 68 61 72 65 64 46 6c 61 67 73$sharedFlags
de50: 20 6e 65 20 22 4e 6f 6e 65 22 20 3f 20 5c 0d 0a   ne "None" ? \..
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
de70: 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68  ppendArgs \" $sh de80: 61 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 aredFlags \"] : de90: 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a "<none>"}] \n].. dea0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { deb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput dec0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
ded0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
dee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
def0: 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e  ---- shared conn
df00: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72  ection flags for
df10: 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a   " $database \.. df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " df30: 61 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c are: <unavailabl df40: 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 e>\n"].. df50: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... df60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N df70: 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 OTE: If there ar df80: 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 e any global (pe df90: 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e r test run) conn dfa0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 ection flags cur dfb0: 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 rently.. # dfc0: 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 set, use t dfd0: 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 hem now (i.e. by dfe0: 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 combining them dff0: 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f with the ones fo e000: 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 r this.. # e010: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection e020: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. e030: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi e040: 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e sts ::connection e050: 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 _flags] && \.. e060: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string e070: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 length$::connec
e080: 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d  tion_flags] > 0}
e090: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e0a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
e0b0: 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
e0c0: 67 29 20 74 68 65 20 64 65 74 65 63 74 65 64 20  g) the detected
e0d0: 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f  global connectio
e0e0: 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20  n flags...
e0f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
e100: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { e110: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput e120: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
e130: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
e140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
e150: 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e  ---- global conn
e160: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74  ection flags det
e170: 65 63 74 65 64 3a 20 22 20 5c 0d 0a 20 20 20 20  ected: " \..
e180: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
e190: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
e1a0: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73  connection_flags
e1b0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
e1c0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
e1d0: 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69  ngth $::connecti e1e0: 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 on_flags] > 0 ? e1f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. e200: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 [appendArgs \" e210: 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c$::connection_fl
e220: 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65  ags \"] : "<none
e230: 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  >"}] \n]..
e240: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
e250: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
e260: 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72  : Combine and/or
e270: 20 72 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e   replace the con
e280: 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e  nection flags an
e290: 64 20 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d  d then show the.
e2a0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
e2b0: 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20   new value...
e2c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e2d0: 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69  set flags [combi
e2e0: 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24  neFlags $flags$
e2f0: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
e300: 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  gs]....        #
e310: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
e320: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29  : Show (and log)
e330: 20 74 68 65 20 6e 65 77 20 65 66 66 65 63 74 69   the new effecti
e340: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  ve connection fl
e350: 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ags...        #.
e360: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q e370: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. e380: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
e390: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
e3a0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
e3b0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
e3c0: 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63   combined connec
e3d0: 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22  tion flags for "
e3e0: 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20   $database \.. e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 " ar e400: 65 3a 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 72 e: " [expr {[str e410: 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 ing length$flag
e420: 73 5d 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20  s] > 0 ? \..
e430: 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
e440: 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20  dArgs \" $flags e450: 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d \"] : "<none>"}] e460: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. e470: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... e480: 20 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d return$flags.
e490: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
e4a0: 72 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70  roc getFlagsProp
e4b0: 65 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22  erty { {flags ""
e4c0: 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  } {quiet false}
e4d0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
e4e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65      # NOTE: Dete
e4f0: 72 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20 63  rmine what the c
e500: 6f 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20  ombined (global
e510: 61 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65  and local) conne
e520: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  ction..      #
e530: 20 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c       flags shoul
e540: 64 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71  d be, possibly q
e550: 75 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23  uietly...      #
e560: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67  ..      set flag
e570: 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  s [getConnection
e580: 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20  Flags "" $flags e590: 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20$quiet]....
e5a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
e5b0: 3a 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f  : If no global o
e5c0: 72 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69  r local connecti
e5d0: 6f 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73 70  on flags were sp
e5e0: 65 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20  ecified, the..
e5f0: 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61      #       defa
e600: 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  ult connection f
e610: 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75  lags should be u
e620: 73 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  sed; therefore,
e630: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20  return..      #
e640: 20 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73        an empty s
e650: 74 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61  tring in that ca
e660: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
e670: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
e680: 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d  length $flags] = e690: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. e6a0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. e6b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... e6c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE e6d0: 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 : In order to ch e6e0: 65 63 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 eck if the defau e6f0: 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c lt connection fl e700: 61 67 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 ags are being us e710: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # e720: 20 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 it is necessar e730: 79 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 y to attempt a c e740: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 onversion to the e750: 20 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 actual enumerat e760: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # e770: 20 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 type. Failing e780: 20 74 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b that, the check e790: 20 61 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 against the def e7a0: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 ault value will e7b0: 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 be.. # e7c0: 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 skipped... e7d0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 #.. set e e7e0: 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e rror null; # IGN e7f0: 4f 52 45 44 0d 0a 20 20 20 20 20 20 73 65 74 20 ORED.. set e800: 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e value [object in e810: 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 voke Utility Try e820: 50 61 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 ParseFlagsEnum " e830: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 " \.. S e840: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit e850: 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti e860: 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 onFlags ""$flag
e870: 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20  s null true \..
e880: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 5d 0d           error].
e890: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e8a0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
e8b0: 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 20   combined flags
e8c0: 73 74 72 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74  string could not
e8d0: 20 61 63 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e   actually be con
e8e0: 76 65 72 74 65 64 0d 0a 20 20 20 20 20 20 23 20  verted..      #
e8f0: 20 20 20 20 20 20 74 6f 20 74 68 65 20 65 6e 75        to the enu
e900: 6d 65 72 61 74 65 64 20 74 79 70 65 20 69 74 20  merated type it
e910: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  is the default v
e920: 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75 73 74 20  alue, then just
e930: 75 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  use..      #
e940: 20 20 20 69 74 20 76 65 72 62 61 74 69 6d 3b 20     it verbatim;
e950: 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74 20  otherwise, just
e960: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20  return an empty
e970: 73 74 72 69 6e 67 2e 20 20 49 6e 20 74 68 61 74  string.  In that
e980: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e990: 63 61 73 65 2c 20 74 68 65 20 64 65 66 61 75 6c  case, the defaul
e9a0: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  t connection fla
e9b0: 67 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e  gs will be used.
e9c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e9d0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
e9e0: 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30  gth $value] == 0 e9f0: 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65 20 22 44 ||$value ne "D
ea00: 65 66 61 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d  efault"} then {.
ea10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ea20: 20 20 20 20 23 20 57 41 52 4e 49 4e 47 3a 20 54      # WARNING: T
ea30: 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20  his returns the
ea40: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 6f 66 20  string value of
ea50: 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61  the combined fla
ea60: 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  gs, not..
ea70: 20 23 20 20 20 20 20 20 20 20 20 20 74 68 65 20   #          the
ea80: 65 6e 75 6d 65 72 61 74 65 64 20 76 61 6c 75 65  enumerated value
ea90: 2e 20 20 54 68 69 73 20 69 73 20 62 79 20 64 65  .  This is by de
eaa0: 73 69 67 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20  sign and should
eab0: 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  not..        #
eac0: 20 20 20 20 20 20 20 20 62 65 20 63 68 61 6e 67          be chang
ead0: 65 64 20 77 69 74 68 6f 75 74 20 63 61 72 65 66  ed without caref
eae0: 75 6c 20 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e  ul consideration
eaf0: 20 28 65 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d   (e.g. it would.
eb00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
eb10: 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20      prevent the
eb20: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
eb30: 20 63 6c 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f   class from allo
eb40: 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20  wing invalid..
eb50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
eb60: 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74   ["magical"] met
eb70: 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20  a-flags)...
eb80: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
eb90: 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73  turn [appendArgs
eba0: 20 22 46 6c 61 67 73 3d 22 20 24 66 6c 61 67 73   "Flags=" $flags ebb0: 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d \;].. }... ebc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 . return "" ebd0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... ebe0: 70 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a proc setupDb {.. ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 file ec00: 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b Name {mode ""} { ec10: 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 dateTimeFormat " ec20: 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 "} {dateTimeKind ec30: 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d ""} {flags ""}. ec40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 . {ex ec50: 74 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 tra ""} {qualify ec60: 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 true} {delete t ec70: 72 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d rue} {uri false} ec80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 .. {t ec90: 65 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b emporary true} { eca0: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 varName db} {qui ecb0: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. ecc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # ecd0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 NOTE: First, see ece0: 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 if our caller h ecf0: 61 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 as requested an ed00: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 in-memory databa ed10: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 se... #.. ed20: 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 set isMemory ed30: 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 [isMemoryDb$fi
ed40: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  leName]....
ed50: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
ed60: 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74  : For now, all t
ed70: 65 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73  est databases us
ed80: 65 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73  ed by the test s
ed90: 75 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d  uite are placed.
eda0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
edb0: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
edc0: 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63   directory.  Eac
edd0: 68 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72  h database and r
ede0: 65 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20  elated files..
edf0: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64      #       used
ee00: 20 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c   by a test shoul
ee10: 64 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20  d be cleaned up
ee20: 62 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69  by that test usi
ee30: 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  ng the..      #
ee40: 20 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62        "cleanupDb
ee50: 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c  " procedure, bel
ee60: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
ee70: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f      if {!$isMemo ee80: 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 ry &&$qualify}
ee90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
eea0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
eeb0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
eec0: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b  baseDirectory] [
eed0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN eee0: 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ame]].. }.. eef0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ef00: 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 # NOTE: By defa ef10: 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 ult, delete any ef20: 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 pre-existing dat ef30: 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 abase with the s ef40: 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 ame file.. ef50: 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 # name if ef60: 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 it currently exi ef70: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sts... #.. ef80: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
ef90: 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26  ory && $delete & efa0: 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 & [file exists$
efb0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
efc0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
efd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
efe0: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
eff0: 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67  any pre-existing
f000: 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74   database with t
f010: 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20  he same file..
f020: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
f030: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  me...        #..
f040: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
f050: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete
f060: 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72  $fileName} error f070: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. f080: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f090: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som f0a0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 ehow failed to d f0b0: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 elete the file, f0c0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... f0d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f0e0: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
f0f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f100: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te f110: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe f120: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. f130: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== f140: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed f150: 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 to delete databa f160: 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c se file \""$fil
f170: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
f180: 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72           "\" dur
f190: 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f 72  ing setup, error
f1a0: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error f1b0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } f1c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. f1d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. f1e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R f1f0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec f200: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( f210: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th f220: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our f230: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # f240: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e caller. The han f250: 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 dle to the opene f260: 64 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 d database will f270: 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e be stored there. f280: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. f290: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
f2a0: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  e db....      #.
f2b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
f2c0: 74 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68  tart building th
f2d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
f2e0: 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72  ing.  The only r
f2f0: 65 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d  equired portion.
f300: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f  .      #       o
f310: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
f320: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 64   string is the d
f330: 61 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63  ata source, whic
f340: 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a  h contains the..
f350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61        #       da
f360: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65  tabase file name
f370: 20 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72   itself.  If our
f380: 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f   caller wants to
f390: 20 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20   use a URI as..
f3a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
f3b0: 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73   data source, us
f3c0: 65 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f  e the FullUri co
f3d0: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
f3e0: 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20  property to..
f3f0: 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76 65     #       preve
f400: 6e 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 72  nt the data sour
f410: 63 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62  ce string from b
f420: 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20  eing mangled...
f430: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
f440: 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a   {$uri} then {.. f450: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e set conn f460: 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d ection {FullUri= f470: 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20${fileName}}..
f480: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
f490: 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63        set connec
f4a0: 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63  tion {Data Sourc
f4b0: 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a  e=${fileName}}.. f4c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f4d0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE f4e0: 3a 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f : Since this pro f4f0: 63 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 cedure has no sp f500: 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 ecial knowledge f510: 6f 66 20 77 68 61 74 20 74 68 65 20 64 65 66 61 of what the defa f520: 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ult.. # f530: 20 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f setting is fo f540: 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 r the ToFullPath f550: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri f560: 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 ng propery, alwa f570: 79 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ys.. # f580: 20 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 add the value f590: 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f we know about to f5a0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection f5b0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 string... # f5c0: 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 .. append c f5d0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 onnection {;ToFu f5e0: 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 llPath=${qualify
f5f0: 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  }}....      #..
f600: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
f610: 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
f620: 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d  fied a journal m
f630: 6f 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63  ode, add the nec
f640: 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a  essary portion..
f650: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66        #       of
f660: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
f670: 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20  string now...
f680: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
f690: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $f6a0: 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 mode] > 0} then f6b0: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen f6c0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a d connection {;J f6d0: 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f ournal Mode=${mo
f6e0: 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  de}}..      }...
f6f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
f700: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
f710: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
f720: 61 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  a DateTime forma
f730: 74 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73  t, add the neces
f740: 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20  sary..      #
f750: 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74      portion of t
f760: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
f770: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ring now...
f780: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
f790: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61  tring length $da f7a0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 teTimeFormat] > f7b0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. f7c0: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec f7d0: 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 tion {;DateTimeF f7e0: 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 ormat=${dateTime
f7f0: 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20  Format}}..
f800: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
f810: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
f820: 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
f830: 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69  ied a DateTimeKi
f840: 6e 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65  nd, add the nece
f850: 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20  ssary portion..
f860: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20       #       of
f870: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
f880: 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20  tring now...
f890: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
f8a0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64  string length $d f8b0: 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 ateTimeKind] > 0 f8c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f8d0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect f8e0: 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 ion {;DateTimeKi f8f0: 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e nd=${dateTimeKin
f900: 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  d}}..      }....
f910: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
f920: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
f930: 74 20 77 68 61 74 20 74 68 65 20 66 69 6e 61 6c  t what the final
f940: 20 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20   flags for this
f950: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20  connection need
f960: 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d  to be...      #.
f970: 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73  .      set flags
f980: 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46   [getConnectionF
f990: 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 24  lags $fileName$
f9a0: 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d  flags $quiet]... f9b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. f9c0: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 # NOTE: If our c f9d0: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 aller specified f9e0: 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 some SQLiteConne f9f0: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 ctionFlags, add fa00: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # fa10: 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 necessary por fa20: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e tion of the conn fa30: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f ection string no fa40: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. fa50: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l fa60: 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 ength$flags] >
fa70: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
fa80: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
fa90: 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66  tion {;Flags=${f faa0: 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d lags}}.. }. fab0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. fac0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our fad0: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie fae0: 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f d an extra paylo faf0: 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 ad to the connec fb00: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # fb10: 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 string, appe fb20: 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 nd it now... fb30: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ fb40: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 string length$e
fb50: 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20  xtra] > 0} then
fb60: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
fb70: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20  d connection \;
fb80: 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d  $extra.. }. fb90: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. fba0: 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 # NOTE: Open t fbb0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e he database conn fbc0: 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 ection now, plac fbd0: 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 ing the opaque h fbe0: 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 andle value.. fbf0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 # into fc00: 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 the variable spe fc10: 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 cified by our ca fc20: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ller... #.. fc30: 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 set db [sq fc40: 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c l open -type SQL fc50: 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e ite [subst$conn
fc60: 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20  ection]]....
fc70: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
fc80: 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65  E: Configure the
fc90: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
fca0: 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77  tory for the new
fcb0: 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61  ly opened databa
fcc0: 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  se..      #
fcd0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77    connection now
fce0: 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c   unless our call
fcf0: 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a  er forbids it...
fd00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
fd10: 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26  f {$temporary && fd20: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a ![info exists : fd30: 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 :no(setTemporary fd40: 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 Directory)]} the fd50: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c n {.. sql fd60: 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 execute$db [ap
fd70: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
fd80: 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20          "PRAGMA
fd90: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
fda0: 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54  tory = \"" [getT
fdb0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72  emporaryDirector
fdc0: 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20  y] \"\;]..
fdd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
fde0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61      # NOTE: Alwa
fdf0: 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f  ys return the co
fe00: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle
fe10: 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20  upon success...
fe20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
fe30: 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d  turn $db.. }. fe40: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get fe50: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b DbConnection { { fe60: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d varName db} } {. fe70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. fe80: 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to fe90: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v fea0: 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d feb0: 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte fec0: 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. fed0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. fee0: 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 The handle to fef0: 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 the database pre ff00: 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 viously opened v ff10: 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 ia the.. # ff20: 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 [setupDb] ff30: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 procedure should ff40: 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 be stored there ff50: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ff60: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
ff70: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
ff80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
ff90: 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65  This returns the
ffa0: 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e   ADO.NET IDbConn
ffb0: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e  ection object in
ffc0: 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a  stance for the..
ffd0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70        #       sp
ffe0: 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20  ecified databse
fff0: 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67  handle.  Since g
10000 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65  etting this obje
10010 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a  ct relies upon..
10020 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
10030 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67  gle internals, g
10040 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64  reat care should
10050 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f   be taken to avo
10060 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d  id disposing of.
10070 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
10080 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74  his object or ot
10090 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20  herwise putting
100a0 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c  it into an inval
100b0 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20  id state...
100c0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
100d0 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20  nfo exists db]}
100e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
100f0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
10100 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
10110 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
10120 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66  nPublic -objectf
10130 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20  lags +NoDispose
10140 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..
10150 20 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65          Interpre
10160 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f  ter.GetActive.co
10170 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24  nnections Item $10180 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 db.. } re 10190 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 101a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 101b0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 101c0 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 E: Success, retu 101d0 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 rn the opaque ob 101e0 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 ject handle... 101f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10200 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
10210 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  ult..        } e
10220 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
10230 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
10240 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72  NOTE: Failure, r
10250 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
10260 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10270 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 10280 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 10290 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 102a0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 102b0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g 102c0 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 et connection ha 102d0 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 ndle for databas 102e0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 102f0 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20$db "\",
10300 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72  error: " \n\t $r 10310 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 10320 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 10330 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 10340 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 c freeDbConnecti 10350 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f on { {varName co 10360 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 nnection} } {.. 10370 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 10380 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 10390 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 103a0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e iable (e.g. "con 103b0 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 nection") in the 103c0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 103d0 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 context of our c 103e0 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 aller. The opaq 103f0 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 ue object handle 10400 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d for an ADO.NET. 10410 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 10420 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f onnection previo 10430 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 usly returned by 10440 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f [getDbConnectio 10450 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 n] should be.. 10460 20 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 # stor 10470 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 10480 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 10490 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 1$varName conne
104a0 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23  ction....      #
104b0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
104c0 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76  Attempt to remov
104d0 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a  e the opaque obj
104e0 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20  ect handle from
104f0 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d  the interpreter.
10500 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
10510 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63  ow.  This [objec
10520 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20  t dispose] call
10530 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c  will not actuall
10540 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  y dispose of the
10550 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
10560 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63  underlying objec
10570 74 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e  t because the +N
10580 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61  oDispose flag wa
10590 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20  s set on it..
105a0 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e     #       durin
105b0 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68  g creation of th
105c0 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  e opaque object
105d0 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23  handle...      #
105e0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
105f0 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74  o exists connect
10600 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ion] && \..
10610 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a       [catch {obj
10620 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e  ect dispose $con 10630 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d nection} error]} 10640 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10650 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 10660 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 10670 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 ailed to remove 10680 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f the handle, repo 10690 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 106a0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 106b0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
106c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
106d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
106e0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
106f0 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e  ed to remove con
10700 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c  nection handle \
10710 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c  "" $connection \ 10720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ 10730 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 10740 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
10750 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
10760 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f      proc addDbCo
10770 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65  nnection { conne
10780 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64  ction {varName d
10790 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  b} } {..      #.
107a0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
107b0 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
107c0 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
107d0 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
107e0 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
107f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
10800 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
10810 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
10820 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 10830 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 10840 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 NOTE: Create a c 10850 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 orrectly formatt 10860 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 ed name for the 10870 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect 10880 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 ion to.. # 10890 20 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 be added t 108a0 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 o the list manag 108b0 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 ed by the Eagle 108c0 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... 108d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 108e0 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f db [object invo 108f0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 10900 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 10910 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 Eagle._Compone 10920 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d nts.Private.Form 10930 61 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 atOps DatabaseOb 10940 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 jectName$connec
10950 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  tion \..
10960 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
10970 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  on [object invok
10980 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
10990 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d  tActive NextId]]
109a0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
109b0 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74     # NOTE: Add t
109c0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
109d0 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20  ection provided
109e0 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f  by our caller to
109f0 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20   the list..
10a00 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73   #       of thos
10a10 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45  e known to the E
10a20 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72  agle interpreter
10a30 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
10a40 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
10a50 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
10a60 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  c Interpreter.Ge
10a70 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69  tActive.connecti
10a80 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20  ons Add \..
10a90 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63       $db$connec
10aa0 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  tion..    }.....
10ab0 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70      proc cleanup
10ac0 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76  Db { fileName {v
10ad0 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c  arName db} {coll
10ae0 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c 69  ect true} {quali
10af0 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 20  fy true}..
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10b10 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20 7b  delete true} } {
10b20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
10b30 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
10b40 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65   to force all pe
10b50 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20  nding "garbage"
10b60 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f  objects to be co
10b70 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20  llected,..
10b80 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e  #       includin
10b90 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65  g SQLite stateme
10ba0 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f  nts and backup o
10bb0 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f  bjects; this sho
10bc0 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20  uld allow..
10bd0 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64   #       the und
10be0 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
10bf0 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65   file to be dele
10c00 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ted...      #..
10c10 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 10c20 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 10c30 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 10c40 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
10c50 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
10c60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
10c70 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
10c80 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
10c90 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
10ca0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
10cb0 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
10cc0 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54        caller.  T
10cd0 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65  he handle to the
10ce0 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f   database previo
10cf0 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20  usly opened via
10d00 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
10d10 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f     [setupDb] pro
10d20 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65  cedure should be
10d30 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
10d40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
10d50 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 10d60 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. 10d70 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f # NOTE: Clo 10d80 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f se the connectio 10d90 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 n to the databas 10da0 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 6f e now. This sho 10db0 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 uld allow us.. 10dc0 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 64 # to d 10dd0 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 6c elete the underl 10de0 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 ying database fi 10df0 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 le... #.. 10e00 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 10e10 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61 74 ists db] && [cat 10e20 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 ch {sql close$d
10e30 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  b} error]} then
10e40 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
10e50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
10e60 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20   somehow failed
10e70 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74  to close the dat
10e80 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77 68  abase, report wh
10e90 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
10ea0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 10eb0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 10ec0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 10ed0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 10ee0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 10ef0 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 20 close database 10f00 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72 72 \""$db "\", err
10f10 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
10f20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72       \n\t $error 10f30 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d \n].. }... 10f40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 10f50 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 # NOTE: First, s 10f60 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 ee if our caller 10f70 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61 has requested a 10f80 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 n in-memory data 10f90 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a base... #.. 10fa0 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f set isMemo 10fb0 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 ry [isMemoryDb$
10fc0 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  fileName]....
10fd0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
10fe0 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
10ff0 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20 64  ll path to the d
11000 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d  atabase file nam
11010 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c  e.  For now, all
11020 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20   test..      #
11030 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69       database fi
11040 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  les are stored i
11050 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  n the temporary
11060 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20  directory...
11070 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
11080 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75  $isMemory &&$qu
11090 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  alify} then {..
110a0 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
110b0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
110c0 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
110d0 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c  tory] [file tail
110e0 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20   $fileName]].. 110f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 11100 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 11110 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c Check if the fil 11120 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d e still exists.. 11130 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 11140 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
11150 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69  & $delete && [fi 11160 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
11170 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
11180 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11190 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65   # NOTE: Skip de
111a0 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  leting database
111b0 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64  files if somebod
111c0 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61  y sets the globa
111d0 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  l..        #
111e0 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 20 70     variable to p
111f0 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20  revent it...
11200 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
11210 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
11220 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46   ::no(cleanupDbF
11230 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile)]} then {..
11240 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
11250 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
11260 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
11270 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73  the test databas
11280 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20  e file now...
11290 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
112a0 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64      if {[set cod
112b0 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64  e [catch {file d
112c0 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} 112d0 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b error]]} then { 112e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 112f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 11300 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 11310 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 11320 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 the file, repor 11330 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 11340 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 11350 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
11360 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
11370 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
11380 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
11390 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
113a0 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65   delete database
113b0 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 113c0 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 113d0 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin 113e0 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 g cleanup, error 113f0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
11400 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
11410 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
11420 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
11430 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
11440 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20  E: Show that we
11450 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
11460 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20   the file...
11470 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11480 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d     set code 0...
11490 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
114a0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 114b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 114d0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 === WARNING: ski 114e0 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61 pped deleting da 114f0 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 11500 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
11510 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
11520 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22  uring cleanup\n"
11530 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
11540 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
11550 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11560 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c   # NOTE: The fil
11570 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
11580 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20  , success!..
11590 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
115a0 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20  et code 0..
115b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
115c0 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d  rn $code.. }. 115d0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 .... proc set 115e0 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c upDbInterruptCal 115f0 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 lback { channel 11600 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 log } {.. t 11610 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
11620 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64  --- setting up d
11630 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70  ebugger interrup
11640 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d  t callback... ".
11650 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
11660 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  tch {..        #
11670 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
11680 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  : Make sure the
11690 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 20  script debugger
116a0 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64  and the isolated
116b0 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 72 65   interpreter are
116c0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
116d0 20 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64    setup and read
116e0 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20  y for use...
116f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64      #..        d
11700 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 20  ebug setup true
11710 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  true....
11720 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
11730 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65  E: Load the nece
11740 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69  ssary packages i
11750 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64  nto the isolated
11760 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
11770 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
11780 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b 0d 0a    debug eval {..
11790 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
117a0 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d  e require Eagle.
117b0 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61  .          packa
117c0 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
117d0 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20  .Library..
117e0 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
117f0 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a  ire Eagle.Test..
11800 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
11810 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11820 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
11830 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61   necessary varia
11840 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73  bles into the is
11850 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74  olated interpret
11860 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  er...        #..
11870 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e          debug in
11880 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73  voke 0 set ::tes
11890 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e 6e  t_channel $chann 118a0 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 el; # NOTE: For 118b0 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20 20 [tputs]... 118c0 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 debug invoke 0 118d0 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 set ::test_log 118e0 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f$log; # NOTE: Fo
118f0 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20  r [tlog].....
11900 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11910 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20  # NOTE: Install
11920 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72  the callback scr
11930 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61  ipt to be evalua
11940 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61  ted in the isola
11950 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ted..        #
11960 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 72       interpreter
11970 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72   when this inter
11980 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 72  preter is interr
11990 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 0d  upted by script.
119a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
119b0 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65   cancellation, e
119c0 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  tc...        #..
119d0 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 61          debug ca
119e0 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73  llback apply {{s
119f0 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20  ender e} {..
11a00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11a10 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
11a20 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62 61 63   if this callbac
11a30 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65  k is one that we
11a40 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20   care about...
11a50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11a60 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 65 6c       if {"Cancel
11a70 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b 24  ed" in [split [$11a80 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 65 5d e InterruptType] 11a90 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a ", "]} then {.. 11aa0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 11ab0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 11ac0 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 E: Iterate throu 11ad0 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 gh all database 11ae0 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 connections know 11af0 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 n to the.. 11b00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 11b10 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72 rent interpreter 11b20 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 11b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 11b40 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c ject foreach -al 11b50 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20 20 20 ias pair \.. 11b60 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a [obj 11b70 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 11b80 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 65 20 s +NonPublic$e
11b90 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e  Interpreter.conn
11ba0 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20  ections] {..
11bb0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
11bc0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
11bd0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61  E: Attempt to ca
11be0 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65  ncel any SQL que
11bf0 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ries in progress
11c00 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20   on this..
11c10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
11c20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11c30 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ion...
11c40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
11c50 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
11c60 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 6e  {$pair Value.Can 11c70 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 cel} error]} the 11c80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 11c90 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
11ca0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
11cb0 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20  ndArgs \n \..
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11cd0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
11ce0 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 65 6c  failed to cancel
11cf0 20 71 75 65 72 79 20 66 6f 72 20 63 6f 6e 6e 65   query for conne
11d00 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20  ction \"" \..
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d20 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22   [$pair Key] "\" 11d30 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 11d40 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
11d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
11d60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
11d70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
11d80 20 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72   }}..      } err
11d90 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
11da0 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
11db0 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70  straint interrup
11dc0 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65  tCallback.sqlite
11dd0 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  3....        tpu
11de0 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ 11df0 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 n.. } else 11e00 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 11e10 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
11e20 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72  dArgs "no, error
11e30 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 11e40 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 11e50 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 11e60 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 cleanupFile { f 11e70 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 ileName {collect 11e80 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 true} {force fa 11e90 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 11ea0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 11eb0 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 Attempt to forc 11ec0 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 e all pending "g 11ed0 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 arbage" objects 11ee0 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c to be collected, 11ef0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11f00 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 including SQLite 11f10 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 statements and 11f20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 backup objects; 11f30 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f this should allo 11f40 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 w.. # 11f50 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 the underlying 11f60 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f database file to 11f70 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 be deleted... 11f80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 11f90 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
11fa0 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
11fb0 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73  ctGarbage $::tes 11fc0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 11fd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 11fe0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 11ff0 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 ck if the file s 12000 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 till exists... 12010 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 12020 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
12030 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
12040 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
12050 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
12060 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  p deleting test
12070 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64  files if somebod
12080 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61  y sets the globa
12090 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20  l variable..
120a0 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 70      #       to p
120b0 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20  revent it...
120c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
120d0 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69  f {$force || ![i 120e0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 120f0 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 cleanupFile)]} t 12100 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 12110 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 12120 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 12130 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 delete the test 12140 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 file now... 12150 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12160 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 if {[set code 12170 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 [catch {file de 12180 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 lete$fileName}
12190 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d  error]]} then {.
121a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
121b0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
121c0 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66  TE: We somehow f
121d0 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
121e0 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74  the file, report
121f0 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20   why...
12200 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
12210 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 12220 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 12230 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 12240 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 12250 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 12260 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 delete test file 12270 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
12280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12290 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65    "\" during cle
122a0 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c  anup, error: " \
122b0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 122c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 122d0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 122e0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 122f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 12300 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 ow that we skipp 12310 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 ed deleting the 12320 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 file... 12330 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 12340 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 t code 0.... 12350 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
12360 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
12370 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
12380 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
12390 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20  ARNING: skipped
123a0 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69  deleting test fi
123b0 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 123c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 123d0 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 123e0 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 anup\n"].. 123f0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 12400 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 12410 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 12420 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f The file does no 12430 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 t exist, success 12440 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 !.. #.. 12450 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 12460 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 12470 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d return$code.
12480 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
12490 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 61  roc collectGarba
124a0 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69  ge { channel {mi
124b0 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30 7d  lliseconds 1000}
124c0 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d 20   {quiet true} }
124d0 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  {..      if {[ca
124e0 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
124f0 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
12500 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75  mory false} resu
12510 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
12520 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$12530 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 12540 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
12550 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
12560 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
12570 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72       "---- memor
12580 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20  y in use by the
12590 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65  CLR before colle
125a0 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20  ction... " \..
125b0 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res 125c0 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ult " bytes\n"]. 125d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 125e0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 125f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
12600 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
12610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
12620 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
12630 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d  led to get CLR m
12640 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72  emory usage, err
12650 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
12660 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 12670 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a t \n].. }.. 12680 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 23 23 .. ######## 12690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 126a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 126b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 126c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 126d0 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 #.... #.. 126e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 # NOTE: Repe 126f0 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74 atedly attempt t 12700 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 o collect garbag 12710 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f e until the allo 12720 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 tted number.. 12730 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69 # of mi 12740 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65 lliseconds has e 12750 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20 lapsed. Always 12760 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 attempt to colle 12770 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20 ct garbage.. 12780 20 20 23 20 20 20 20 20 20 20 61 74 20 6c 65 61 # at lea 12790 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 st once... 127a0 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74 61 #.. set sta 127b0 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 rt [clock second 127c0 73 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74 s].. set st 127d0 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74 op [expr {$start
127e0 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64   + ($millisecond 127f0 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 s / 1000)}].... 12800 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 do {.. 12810 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 12820 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 12830 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61 force a full ga 12840 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e rbage collection 12850 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e now. Report an 12860 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 12870 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 error that is 12880 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 encountered if 12890 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 we fail... 128a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 128b0 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object 128c0 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 128d0 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d 20 65 alMemory true} e 128e0 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. 128f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
12900 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
12910 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
12920 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
12930 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20  NG: failed full
12940 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69  garbage collecti
12950 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  on, error: " \..
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
12970 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 12980 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 12990 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f set now [clo 129a0 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 ck seconds].. 129b0 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 } while {$sta
129c0 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e  rt <= $now &&$n
129d0 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d 0a 20  ow < $stop}.... 129e0 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 ########### 129f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12a10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a ##############.. 12a30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 12a40 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok 12a50 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d e GC GetTotalMem 12a60 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75 6c ory false} resul 12a70 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 12a80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
12a90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
12aa0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12ab0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12ac0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12ad0 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 "---- memory 12ae0 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 in use by the C 12af0 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 63 74 LR after collect 12b00 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 ion... " \.. 12b10 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c$resul
12b20 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  t " bytes\n"]..
12b30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
12b40 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
12b50 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12b60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 12b70 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 12b80 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 12b90 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d d to get CLR mem 12ba0 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 ory usage, error 12bb0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 12bc0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
12bd0 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
12be0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
12bf0 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65   getSQLiteHandle
12c00 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c  Counts { channel
12c10 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
12c20 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   {..      set re
12c30 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list]....
12c40 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f       if {[haveCo
12c50 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20  nstraint \..
12c60 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65            define
12c70 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
12c80 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e  Data.SQLite.COUN
12c90 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20  T_HANDLE]} then
12ca0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
12cb0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64        # NOTE: Ad
12cc0 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20  d each critical
12cd0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20  handle count to
12ce0 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69  the resulting li
12cf0 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  st...        #..
12d00 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
12d10 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65  name [list conne
12d20 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65  ctionCount state
12d30 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70  mentCount backup
12d40 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20  Count] {..
12d50 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f      set value [o
12d60 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
12d70 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
12d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12d90 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
12da0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
12db0 65 74 68 6f 64 73 20 24 6e 61 6d 65 5d 0d 0a 0d  ethods $name]... 12dc0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 12dd0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
12de0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
12df0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 12e00 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 12e10 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 12e20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 critical handle 12e30 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 count \""$name
12e40 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 20  "\" is " $value 12e50 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 12e60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 .... la 12e70 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 ppend result$va
12e80 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lue..        }..
12e90 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
12ea0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 12eb0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 12ec0 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 12ed0 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f actual handle co 12ee0 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 76 61 unts are not ava 12ef0 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 ilable; therefor 12f00 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 e, just.. 12f10 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 # return 12f20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a an empty list... 12f30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12f40 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
12f50 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c  l "---- critical
12f60 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75   handle counts u
12f70 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20  navailable\n"..
12f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
12f90 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result.. 12fa0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 12fb0 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 oc shutdownSQLit 12fc0 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 e { channel {for 12fd0 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 ce false} {quiet 12fe0 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 12ff0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13000 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 TE: Make sure th 13010 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c at SQLite core l 13020 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 ibrary is comple 13030 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 tely shutdown. 13040 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 This.. # 13050 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 74 is used by t 13060 65 73 74 73 20 74 68 61 74 20 63 68 61 6e 67 65 ests that change 13070 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f configuration o 13080 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 ptions and/or th 13090 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ose.. # 130a0 20 20 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 that need to 130b0 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67 69 6e make sure loggin 130c0 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 g is initialized 130d0 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 (i.e. just in c 130e0 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ase.. # 130f0 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f the SQLite co 13100 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 69 re library was i 13110 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 nitialized in th 13120 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f 72 20 e process prior 13130 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 13140 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 the SQLiteLog 13150 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62 6c 65 class being able 13160 20 74 6f 20 73 65 74 75 70 20 69 74 73 20 6c 6f to setup its lo 13170 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e gging callback). 13180 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13190 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 Normally, this s 131a0 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 hould only be pe 131b0 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 rformed if SQLit 131c0 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d e is loaded and. 131d0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 . # r 131e0 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 eady for use by 131f0 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. 13200 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13210 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 if {$force || [i
13220 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74  sSQLiteReady]} t
13230 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
13240 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46  ..        # BUGF
13250 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69  IX: Before calli
13260 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68  ng the native sh
13270 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c  utdown function,
13280 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d   make sure both.
13290 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
132a0 20 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41     of the PRAGMA
132b0 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f   related directo
132c0 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65  ry names are fre
132d0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
132e0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
132f0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
13300 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  s $channel true. 13310 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 13320 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 13330 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 13340 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 13350 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 13360 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 13370 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 13380 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 iveMethods sqlit 13390 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 e3_shutdown.. 133a0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d } result] = 133b0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 133c0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
133d0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
133e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 133f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 13400 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 13410 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 13420 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 13430 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 n()... ok: "$re
13440 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
13450 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
13460 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
13470 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 13480 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 13490 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
134a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
134b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
134c0 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
134d0 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e  ite3_shutdown().
134e0 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  .. error: " \n\t
134f0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 13500 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13510 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 13520 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 13530 63 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 c reportSQLiteRe 13540 73 6f 75 72 63 65 73 20 7b 20 63 68 61 6e 6e 65 sources { channe 13550 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 l {quiet false} 13560 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d {collect true} } 13570 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 13580 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 13590 61 6c 6c 20 6f 75 74 70 75 74 20 69 66 20 77 65 all output if we 135a0 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e 20 are running in 135b0 22 71 75 69 65 74 22 20 6d 6f 64 65 2e 0d 0a 20 "quiet" mode... 135c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 135d0 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {[haveConstrain 135e0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 135f0 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e defineConstan 13600 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t.System.Data.SQ 13610 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 Lite.INTEROP_VIR 13620 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c TUAL_TABLE] && \ 13630 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 .. [hav 13640 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 eConstraint \.. 13650 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 def 13660 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 ineConstant.Syst 13670 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 em.Data.SQLite.T 13680 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 RACK_MEMORY_BYTE 13690 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 S]} then {.. 136a0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
136b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
136c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 136d0 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 l "---- current 136e0 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 memory in use by 136f0 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e SQLiteMemory... 13700 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ".. }... 13710 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 13720 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 13730 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 13740 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 13750 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13760 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 13770 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 Lite.SQLiteMemor 13780 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 y bytesAllocated 13790 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f .. } memo 137a0 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { 137b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 137c0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
137d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
137e0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 137f0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
13800 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
13810 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
13820 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13830 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
13840 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20   unknown....
13850 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 13860 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 13870 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
13880 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
13890 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 138a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 138b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 138c0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
138d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
138e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " 138f0 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d ---- maximum mem 13900 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 ory in use by SQ 13910 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d LiteMemory... ". 13920 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 13930 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 13940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 13950 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 13960 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 13970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 13980 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 13990 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 6d e.SQLiteMemory m 139a0 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 aximumBytesAlloc 139b0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ated.. } 139c0 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 139d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 139e0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
139f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
13a00 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 13a10 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
13a20 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
13a30 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
13a40 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
13a50 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65            set me
13a60 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a  mory unknown....
13a70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$13a80 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 13a90 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 13aa0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
13ab0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 13ac0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 13ad0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13ae0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 13af0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
13b00 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $13b10 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 channel "---- cu 13b20 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 rrent memory in 13b30 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e use by SQLite... 13b40 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ".. }.... 13b50 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 13b60 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 13b70 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 13b80 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 13b90 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 13ba0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 13bb0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 13bc0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f sqlite3_memory_ 13bd0 75 73 65 64 0d 0a 20 20 20 20 20 20 7d 20 6d 65 used.. } me 13be0 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e mory] == 0} then 13bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 13c00 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
13c10 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
13c20 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 13c30 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 dArgs$memory "
13c40 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  bytes\n"]..
13c50 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
13c60 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
13c70 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
13c80 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74   Maybe the SQLit
13c90 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
13ca0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a  s unavailable?..
13cb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13cc0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
13cd0 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
13ce0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 13cf0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13d00 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
13d10 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 13d20 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 13d30 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 13d40 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 set result$
13d50 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20  memory; # NOTE:
13d60 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e  Return memory in
13d70 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c  -use to our call
13d80 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  er.....      if
13d90 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 13da0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 13db0 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d$channel "---- m
13dc0 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e  aximum memory in
13dd0 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e   use by SQLite..
13de0 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  . "..      }....
13df0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
13e00 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
13e10 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
13e20 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
13e30 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
13e40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
13e50 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13e60 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s sqlite3_memory
13e70 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20  _highwater 0..
13e80 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d      } memory] ==
13e90 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
13ea0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 13eb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13ec0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
13ed0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 13ee0 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 emory " bytes\n" 13ef0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 13f00 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 13f10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13f20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 # NOTE: Maybe t 13f30 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 13f40 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 ibrary is unavai 13f50 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 lable?.. 13f60 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d #.. set m 13f70 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 13f80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
13f90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
13fa0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 13fb0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 13fc0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
13fd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
13fe0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
13ff0 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b  $collect} then { 14000 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 .. collec 14010 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 tGarbage$channe
14020 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
14030 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 14040 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 14050 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
14060 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65  "---- current me
14070 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74  mory in use by t
14080 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20  he CLR... "..
14090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
140a0 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
140b0 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
140c0 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d  talMemory false}
140d0 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
140e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
140f0 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e  f {[string is in
14100 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d  teger -strict $m 14110 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a emory]} then {.. 14120 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
14130 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
14140 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
14150 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 14160 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 dArgs$memory "
14170 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  bytes\n"]..
14180 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
14190 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
141a0 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69      set memory i
141b0 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20  nvalid....
141c0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 141d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 141e0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
141f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
14200 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 14210 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 14220 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 14230 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set 14240 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d memory unknown. 14250 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 14260 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
14270 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
14280 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 14290 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
142a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
142b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
142c0 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 142d0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 142e0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 142f0 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 irectories { cha 14300 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 nnel {reset fals 14310 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 14320 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 14330 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 heck if the sqli 14340 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 14350 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function 14360 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a is available... 14370 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 #.. t 14380 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d puts$channel \.
14390 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d  .          "----
143a0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75   checking for fu
143b0 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77  nction sqlite3_w
143c0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
143d0 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ry... "....
143e0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
143f0 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74  : This call to t
14400 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
14410 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
14420 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65  unction uses the
14430 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
14440 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20  invalid value 0
14450 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72  for the first ar
14460 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  gument.  This co
14470 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a  de is designed..
14480 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
14490 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e   check if callin
144a0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77  g the function w
144b0 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63  ill raise an exc
144c0 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20  eption (i.e...
144d0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
144e0 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66  actual result of
144f0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f   the function do
14500 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73  es not matter as
14510 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20   long as no..
14520 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
14530 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29  tory is changed)
14540 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
14550 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
14560 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
14570 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
14580 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
14590 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
145a0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
145b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d  NativeMethods \.
145c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
145d0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
145e0 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c 0d  irectory 0 null.
145f0 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20  .      }] == 0}
14600 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14610 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
14620 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73  E: Calling the s
14630 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
14640 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
14650 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20  ion does not..
14660 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
14670 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  use an exception
14680 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20  ; therefore, it
14690 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c  must be availabl
146a0 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20  e (i.e...
146b0 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 68   #       even th
146c0 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 72  ough it should r
146d0 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 20  eturn a failure
146e0 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 74  return code in t
146f0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  his..        #
14700 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 20       case)...
14710 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14720 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71  addConstraint sq
14730 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
14740 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20  directory....
14750 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 14760 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 nel yes\n.... 14770 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14780 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 # NOTE: Does our 14790 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 caller want to 147a0 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 reset the direct 147b0 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 ories?.. 147c0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
147d0 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  reset} then {..
147e0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
147f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
14800 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  w make sure the
14810 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
14820 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
14830 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  es are..
14840 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20    #       reset
14850 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61  their default va
14860 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75  lues, which shou
14870 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62  ld be null for b
14880 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  oth...
14890 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68  #       Since th
148a0 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
148b0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75  set_directory fu
148c0 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  nction is availa
148d0 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..
148e0 23 20 20 20 20 20 20 20 75 73 65 20 69 74 2e 0d  #       use it..
148f0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
14900 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74          for {set
14910 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65   index 1} {$inde 14920 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 x < 3} {incr ind 14930 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ex} {.. 14940 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 14950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f . o 14960 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 14970 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 14980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14990 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 149a0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 149b0 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 149d0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 149e0 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64 t_directory$ind
149f0 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  ex null..
14a00 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d       } result] =
14a10 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
14a20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
14a30 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 14a40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 14a50 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 14a60 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 call sqlite3_wi 14a70 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 14a80 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 y("$index \..
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14aa0 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20  ", null)... ok:
14ab0 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  " $result \n].. 14ac0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 14ad0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 14ae0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
14af0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
14b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14b10 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
14b20 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
14b30 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64  directory(" $ind 14b40 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ex \.. 14b50 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 ", null) 14b60 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c ... error: " \n\ 14b70 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
14b80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
14b90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
14ba0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
14bb0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
14bc0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ 14bd0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n.... #.. 14be0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 14bf0 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 Does our caller 14c00 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 want to reset th 14c10 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 e directories? 14c20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 This can only.. 14c30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 14c40 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 e performed if S 14c50 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 QLite is loaded 14c60 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us 14c70 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 e by the test.. 14c80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 14c90 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 uite... # 14ca0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
14cb0 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74  eset && [isSQLit
14cc0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
14cd0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
14ce0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
14cf0 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68  Now make sure th
14d00 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
14d10 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
14d20 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20  ries are..
14d30 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65      #       rese
14d40 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20  t their default
14d50 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68  values, which sh
14d60 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72  ould be null for
14d70 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20   both...
14d80 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20    #       Since
14d90 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
14da0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
14db0 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
14dc0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  t..          #
14dd0 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62       appear to b
14de0 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65  e available, use
14df0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated
14e00 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d  PRAGMA commands.
14e10 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
14e20 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20     instead...
14e30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14e40 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65      foreach dire
14e50 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61  ctory [list data
14e60 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
14e70 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
14e80 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20  ctory] {..
14e90 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61        set sql [a
14ea0 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d  ppendArgs "PRAGM
14eb0 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22  A " $directory " 14ec0 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 = \"\";"].... 14ed0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 14ee0 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c atch {executeSql 14ef0 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d$sql} result] =
14f00 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
14f10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
14f20 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 14f30 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 14f40 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 14f50 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 execute PRAGMA 14f60 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e "$directory "..
14f70 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20  . ok: \"" \..
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $14f90 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 result \"\n].. 14fa0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 14fb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14fc0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
14fd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ff0 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20    "---- execute
15000 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct 15010 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 ory "... error: 15020 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 15030 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
15040 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
15050 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
15060 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
15070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
15080 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
15090 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20  : Finally, show
150a0 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
150b0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
150c0 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d  e and temporary.
150d0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
150e0 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69  irectories.  Thi
150f0 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65  s can only be pe
15100 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74  rformed if SQLit
15110 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  e is loaded..
15120 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
15130 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
15140 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
15150 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15160 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61  if {[isSQLiteRea
15170 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  dy]} then {..
15180 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72       foreach dir
15190 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74  ectory [list dat
151a0 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
151b0 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  y temp_store_dir
151c0 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20  ectory] {..
151d0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 151e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 151f0 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 "---- checking " 15200 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
15210 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   "]....
15220 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64   set sql [append
15230 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24  Args "PRAGMA " $15240 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d directory \;]... 15250 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 15260 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 catch {executeSq 15270 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 l$sql scalar} r
15280 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
15290 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
152a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 152b0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a [appendArgs "ok: 152c0 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c \""$result \"\
152d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
152e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
152f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 15300 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 15310 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
15320 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
15330 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
15340 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
15350 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c  }.....    proc l
15360 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
15370 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20  tings { channel
15380 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69  {suffix ""} {qui
15390 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
153a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
153b0 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69  NOTE: Skip loadi
153c0 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20  ng the settings
153d0 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68  if their usage h
153e0 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
153f0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15400 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
15410 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54  sts ::no(sqliteT
15420 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74  estSettings)]} t
15430 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
15440 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
15450 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65  : Load custom pe
15460 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
15470 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74  r-host test sett
15480 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
15490 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
154a0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
154b0 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73  :tcl_platform(us
154c0 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  er)]} then {..
154d0 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72          set user
154e0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
154f0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
15500 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d  CommonDirectory]
15510 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15520 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65    [appendArgs se
15530 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e  ttings $suffix . 15540 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
15550 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d  (user) .eagle]].
15560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
15570 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75  {[file exists $u 15580 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 15590 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 155a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
155b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
155d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 155e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 15600 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 -- loading per-u 15610 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 ser test setting 15620 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15640 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
15650 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  eName \"...\n]..
15660 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15670 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
15680 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
15690 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c           uplevel
156a0 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source
156b0 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil 156c0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 156d0 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 } error]} th 156e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 156f0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
15700 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15710 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $15720 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 15730 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 15740 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 15750 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 15760 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 to load per-use 15770 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 r settings file 15780 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 15790 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72$user
157a0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
157b0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
157c0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 157e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 157f0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 15800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15810 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
15820 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
15830 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 15840 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 15850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 15860 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped 15870 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 loading per-use 15880 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 r test settings 15890 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75$u
158b0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
158c0 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73  ame "\", it does
158d0 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
158e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
158f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
15900 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
15910 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
15920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15950 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
15960 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
15970 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
15980 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e  orm(host)]} then
15990 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
159a0 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69  t hostSettingsFi
159b0 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  leName [file joi
159c0 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65  n [getCommonDire
159d0 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20  ctory] \..
159e0 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41          [appendA
159f0 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75  rgs settings $su 15a00 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c ffix .$::tcl_pl
15a10 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61  atform(host) .ea
15a20 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  gle]]....
15a30 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
15a40 73 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67  sts $hostSetting 15a50 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e sFileName]} then 15a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15a70 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
15a80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
15a90 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 15aa0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 15ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 15ac0 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 "---- loading 15ad0 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 per-host test s 15ae0 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 15af0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15b00 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69$hostSetti
15b10 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e  ngsFileName \"..
15b20 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  .\n]..
15b30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
15b40 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
15b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
15b60 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73  plevel 1 [list s
15b70 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 69  ource $hostSetti 15b80 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 ngsFileName].. 15b90 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f } erro 15ba0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 15bb0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
15bc0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15be0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 15bf0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15c10 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 15c20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 failed to load p 15c30 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 er-host settings 15c40 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15c60 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69$hostSettingsFi
15c70 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f  leName "\", erro
15c80 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 15c90 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 15ca0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 15cb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 15cc0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 15cd0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
15ce0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
15cf0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $15d00 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 15d10 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 15d20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 15d30 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 kipped loading p 15d40 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 15d50 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 15d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15d70 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67$hostSetting
15d80 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69  sFileName "\", i
15d90 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
15da0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
15db0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
15dc0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
15dd0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
15de0 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69      proc runSQLi
15df0 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b  teTestPrologue {
15e00 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
15e10 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
15e20 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73   running our cus
15e30 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20  tom prologue if
15e40 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73  the main one has
15e50 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20   been..      #
15e60 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20       skipped...
15e70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
15e80 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
15e90 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61  ::no(prologue.ea
15ea0 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  gle)]} then {..
15eb0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15ec0 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
15ed0 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74  he "before-const
15ee0 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70  raints" custom p
15ef0 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70  er-user and/or p
15f00 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20  er-host..
15f10 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65   #       test se
15f20 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20  ttings now...
15f30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15f40 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
15f50 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65  loadSQLiteTestSe
15f60 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63  ttings $::test_c 15f70 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d hannel .before]. 15f80 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 15f90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 # NOTE: De 15fa0 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 termine the name 15fb0 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 s of the native 15fc0 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 platform and arc 15fd0 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 15fe0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 15ff0 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get 16000 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 BuildPlatform tr 16010 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ue].. set 16020 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 architecture [a 16030 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c rchitectureForPl 16040 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d atform$platform
16050 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
16060 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
16070 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72  Show the platfor
16080 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75  m and architectu
16090 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  re used to help
160a0 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20  locate the..
160b0 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69      #       nati
160c0 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d  ve build files..
160d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
160e0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 160f0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 16100 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 16110 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 "---- platf 16120 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 orm for locating 16130 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 native build fi 16140 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 les is \"" \.. 16150 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
16160 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  orm \"\n]....
16170 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 16180 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 16190 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 161a0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 "---- arch 161b0 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 itecture for loc 161c0 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 ating native bui 161d0 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 ld files is \"" 161e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
161f0 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c  architecture \"\
16200 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
16210 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
16220 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66   Build a list of
16230 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
16240 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
16250 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
16260 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
16270 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
16280 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
16290 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
162a0 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d  Lite.dll.config]
162b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
162c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
162d0 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
162e0 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64  uxiliary Managed
162f0 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73   Debugging Assis
16300 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20  tants (MDA)..
16310 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
16320 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
16330 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
16340 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16350 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66       set mdaConf
16360 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
16370 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
16380 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78   EagleShell32.ex
16390 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73  e.mda.config Ins
163a0 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63  taller.exe.mda.c
163b0 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20  onfig \..
163c0 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64       test.exe.md
163d0 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e  a.config testlin
163e0 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  q.exe.mda.config
163f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16400 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e  testef6.exe.mda.
16410 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20  config]....
16420 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
16430 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
16440 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c  list of external
16450 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
16460 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d  andle.  Some of.
16470 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
16480 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79   these files may
16490 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f   be native and/o
164a0 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  r managed assemb
164b0 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20  lies that are..
164c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
164d0 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f  equired to perfo
164e0 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 73  rm various tests
164f0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
16500 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72 6e        set extern
16510 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  alFileNames [lis
16520 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
16530 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69   [file join Enti
16540 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20  tyFramework lib
16550 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
16560 74 20 46 78 20 22 22 5d 20 5b 73 74 72 69 6e 67  t Fx ""] [string
16570 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16580 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34  map [list netFx4
16590 35 31 20 6e 65 74 46 78 34 35 5d 20 5b 67 65 74  51 netFx45] [get
165a0 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 6e  BuildNetFx]]] En
165b0 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c  tityFramework.dl
165c0 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  l]]....        #
165d0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
165e0 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74  : Build the list
165f0 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65 6d   of native assem
16600 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77  bly files that w
16610 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d 0a  e handle.  The..
16620 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16630 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79 73 74  reason the "Syst
16640 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
16650 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e 63 6c  ll" file is incl
16660 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a 20 20  uded here is..
16670 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
16680 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64 20 62  cause it could b
16690 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  e the mixed-mode
166a0 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
166b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
166c0 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  et nativeFileNam
166d0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
166e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e          sqlite3.
166f0 64 6c 6c 20 53 51 4c 69 74 65 2e 49 6e 74 65 72  dll SQLite.Inter
16700 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61  op.dll System.Da
16710 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a  ta.SQLite.dll]..
16720 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16730 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
16740 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d  ld the list of m
16750 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20  anaged assembly
16760 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
16770 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
16780 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61  ..        set ma
16790 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b  nagedFileNames [
167a0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
167b0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
167c0 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 65  SQLite.dll Syste
167d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69  m.Data.SQLite.Li
167e0 6e 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20  nq.dll \..
167f0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
16800 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
16810 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
16820 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
16830 52 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20  Remove any test
16840 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74  constraints that
16850 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61   refer to the na
16860 74 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20  tive and/or..
16870 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e       #       man
16880 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69  aged assembly fi
16890 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
168a0 6c 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64  le unless forbid
168b0 64 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20  den from..
168c0 20 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20    #       doing
168d0 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  so...        #..
168e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
168f0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73  fo exists ::no(s
16900 71 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74  qliteRemoveConst
16910 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b  raints)]} then {
16920 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
16930 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f  ach fileName $co 16940 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 16950 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 16960 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 16970 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 16980 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
16990 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
169a0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
169b0 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67  eName $mdaConfig 169c0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 169d0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 169e0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 169f0 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c dArgs file_$fil
16a00 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..
16a10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
16a20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
16a30 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e  e $externalFileN 16a40 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 16a50 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 16a60 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 16a70 20 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 file_ [file tai 16a80 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 l$fileName]]..
16a90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
16aa0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
16ab0 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65  fileName $native 16ac0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 16ad0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 16ae0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 16af0 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c dArgs file_$fil
16b00 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..
16b10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
16b20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
16b30 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  e $managedFileNa 16b40 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 16b50 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 removeConstra 16b60 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 16b70 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d file_$fileName]
16b80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
16b90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
16ba0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
16bb0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20   NOTE: Skip all
16bc0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16bd0 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20  te related file
16be0 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69  handling (deleti
16bf0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ng,..        #
16c00 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e       copying, an
16c10 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 6e  d loading) if in
16c20 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
16c30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
16c40 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
16c50 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73  ::no(sqliteFiles
16c60 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
16c70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16c80 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
16c90 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65  trying to delete
16ca0 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e   any files if in
16cb0 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
16cc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16cd0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
16ce0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
16cf0 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68  qliteFiles)]} th
16d00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
16d10 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
16d20 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
16d30 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73  qliteConfigFiles
16d40 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
16d50 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
16d60 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66  h fileName $conf 16d70 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 16d90 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 ryDeleteBinaryFi 16da0 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 le$fileName..
16db0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
16dc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
16de0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
16df0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45  no(deleteSqliteE
16e00 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20  xternalFiles)]}
16e10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16e20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
16e30 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69  leName $mdaConfi 16e40 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 gFileNames {.. 16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 16e60 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 yDeleteBuildFile 16e70 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
16e80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
16ea0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65  each fileName $e 16eb0 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 xternalFileNames 16ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 16ed0 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e tryDeleteBin 16ee0 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d aryFile$fileNam
16ef0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
16f00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
16f10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
16f20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
16f30 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
16f40 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29  liteNativeFiles)
16f50 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
16f60 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
16f70 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
16f80 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c  deleteSqliteImpl
16f90 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
16fa0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
16fb0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
16fc0 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 16fd0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 16fe0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 16ff0 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 eleteAssembly$f
17000 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
17010 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
17020 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
17040 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
17050 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
17060 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73  NonImplicitFiles
17070 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
17080 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
17090 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
170a0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50  no(deleteSqliteP
170b0 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26  latformFiles)] &
170c0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
170d0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
170e0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 170f0 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a m] > 0} then {.. 17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17110 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 17120 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
17130 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
17140 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
17150 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 17160 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
17170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17180 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
17190 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
171a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
171b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
171c0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41  no(deleteSqliteA
171d0 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73  rchitectureFiles
171e0 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
17200 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 17210 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 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 20 20 20 20 66 6f 72 65 61 63 foreac 17240 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
17250 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17270 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
17280 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
17290 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20  architecture..
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
172b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
172c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
172d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
172e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
172f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
17300 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
17310 65 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69  eSqliteManagedFi
17320 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
17340 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 17350 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 17360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17370 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 tryDeleteAsse 17380 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a mbly$fileName..
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
173a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
173b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
173c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
173d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
173e0 65 63 6b 20 66 6f 72 20 74 68 65 20 22 61 75 74  eck for the "aut
173f0 6f 53 65 6c 65 63 74 22 20 72 75 6e 74 69 6d 65  oSelect" runtime
17400 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 65   option.  If pre
17410 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  sent,..
17420 20 23 20 20 20 20 20 20 20 61 74 74 65 6d 70 74   #       attempt
17430 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   to automaticall
17440 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72  y select the fir
17450 73 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20  st available..
17460 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
17470 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 61  build (or "relea
17480 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61  se") of SQLite a
17490 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nd System.Data.S
174a0 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20  QLite..
174b0 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 65   #       for use
174c0 20 77 69 74 68 20 74 68 65 20 74 65 73 74 20 73   with the test s
174d0 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  uite...
174e0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
174f0 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
17500 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d  ion autoSelect]}
17510 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17520 20 20 20 20 20 69 66 20 7b 21 5b 63 68 65 63 6b       if {![check
17530 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20  ForSQLiteBuilds
17540 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 17550 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 true]} then {.. 17560 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 17570 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 ckForSQLiteRelea 17580 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ses$::test_chan
17590 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20  nel true..
175a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
175b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
175c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
175d0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69   NOTE: Skip tryi
175e0 6e 67 20 74 6f 20 76 65 72 69 66 79 20 74 68 65  ng to verify the
175f0 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
17600 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 3b 0d   if instructed;.
17610 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
17620 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61     otherwise, ma
17630 6b 65 20 73 75 72 65 20 69 74 20 61 63 74 75 61  ke sure it actua
17640 6c 6c 79 20 65 78 69 73 74 73 20 6f 72 20 68 61  lly exists or ha
17650 6c 74 20 74 68 65 20 65 6e 74 69 72 65 0d 0a 20  lt the entire..
17660 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
17670 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
17680 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   if it does not
17690 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20  exist...
176a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
176b0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
176c0 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 6c   ::no(verifyBuil
176d0 64 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68  dDirectory)]} th
176e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
176f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
17700 20 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73   # NOTE: At this
17710 20 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 6c   point, the buil
17720 64 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53 54  d directory MUST
17730 20 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20 20   exist as a..
17740 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
17750 20 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79   valid directory
17760 20 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e 67   for the testing
17770 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e 74   process to cont
17780 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  inue...
17790 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
177a0 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory
177b0 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f  [getBuildDirecto
177c0 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ry]....
177d0 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
177e0 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d  ists $directory] 177f0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 17800 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 ![file is 17810 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 directory$direc
17820 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
17850 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72  NOTE: Just prior
17860 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c   to actually hal
17870 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67  ting the testing
17880 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20   process,..
17890 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
178a0 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f   add an error to
178b0 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69   the test log fi
178c0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...
178d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
178e0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 178f0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 17900 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 17910 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 17920 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 could not verif 17930 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 y build director 17940 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 y \""$directory
17950 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17960 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74        "\", all t
17970 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22  esting halted\n"
17980 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
17990 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
179a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73      # NOTE: Rais
179b0 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72  ing a script err
179c0 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69  or from this poi
179d0 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a  nt should halt..
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
179f0 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e        the testin
17a00 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  g process...
17a10 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
17a20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
17a30 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17a50 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72    "could not ver
17a60 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74  ify build direct
17a70 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f  ory \"" $directo 17a80 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 17a90 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c "\", all 17aa0 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 testing halted" 17ab0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 17ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 17ad0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 17ae0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 17af0 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 Skip trying to c 17b00 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 opy any files if 17b10 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 17b20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17b30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 17b40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 17b50 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 17b60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 17b70 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 17b80 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 17b90 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 liteConfigFiles) 17ba0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 17bb0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 17bc0 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 fileName$confi
17bd0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17bf0 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24  yCopyBuildFile $17c00 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 17c10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 17c30 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 17c40 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 17c50 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 opySqliteExterna 17c60 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b lFiles)]} then { 17c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17c80 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 17c90 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th 17ca0 65 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 e Managed Debugg 17cb0 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 ing Assistants ( 17cc0 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 MDA) configurati 17cd0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. 17ce0 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 # file f 17cf0 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 or the Eagle she 17d00 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 ll to the build 17d10 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory 17d20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.. 17d30 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 # while u 17d40 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 sing each of the 17d50 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 names of the va 17d60 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 rious legacy tes 17d70 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t.. 17d80 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 # executa 17d90 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c bles. This will 17da0 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 help to make su 17db0 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d re that all the. 17dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 17dd0 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 legacy te 17de0 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 sts run with exa 17df0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 ctly the same se 17e00 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 t of Managed.. 17e10 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 17e20 20 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 Debugging As 17e30 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 sistants configu 17e40 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 red... 17e50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 17e60 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 17e70 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 eName$mdaConfig
17e80 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
17ea0 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 45  CopyBinaryFile E
17eb0 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64  agleShell.exe.md
17ec0 61 2e 63 6f 6e 66 69 67 20 22 22 20 24 66 69 6c  a.config "" $fil 17ed0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 17ee0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 17ef0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17f00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 17f10 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e Copy the extern 17f20 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 al binaries, if 17f30 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 any, to the dire 17f40 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 ctory that.. 17f50 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 17f60 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 contains the E 17f70 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 agle shell. Thi 17f80 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 s is typically u 17f90 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 sed to make.. 17fa0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 17fb0 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 sure assembli 17fc0 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 es referenced by 17fd0 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 the ones being 17fe0 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 tested are.. 17ff0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 18000 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 available duri 18010 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 ng the testing p 18020 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 rocess... 18030 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18040 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 18050 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e fileName$extern
18060 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  alFileNames {..
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18080 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69  ryCopyExternalFi
18090 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  le $fileName.. 180a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 180b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 180c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 180d0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 180e0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 no(copySqliteNat 180f0 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iveFiles)]} then 18100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18110 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 18120 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 18130 65 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 e test platform 18140 69 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 is likely the de 18150 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a fault for this.. 18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 18170 20 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 machine, a 18180 6c 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 lso try to copy 18190 74 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 the native files 181a0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 to the.. 181b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 181c0 69 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d inary location.. 181d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 181e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 181f0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 18200 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 18210 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d eImplicitFiles)] 18220 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 18230 20 20 20 20 20 20 20 20 20 5b 69 73 44 65 66 61 [isDefa 18240 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d ultBuildPlatform 18250 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a true]} then {.. 18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18270 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 18280 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
18290 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
182a0 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73         tryCopyAs
182b0 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 182c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 182d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 182e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 182f0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 18300 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 18310 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 ySqliteNonImplic 18320 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 itFiles)]} then 18330 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18340 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 18350 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 18360 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 litePlatformFile 18370 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 18390 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c tring length$pl
183a0 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65  atform] > 0} the
183b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
183c0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
183d0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46  ileName $nativeF 183e0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18400 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 18410 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66$fileName $platf 18420 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 orm.. 18430 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 18440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i 18460 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 18470 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 18480 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 ArchitectureFile 18490 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 184b0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 tring length$ar
184c0 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d  chitecture] > 0}
184d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
184e0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
184f0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 18500 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18520 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 18530 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 bly$fileName $a 18540 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 18560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18570 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 18580 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 18590 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 185a0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 185b0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 185c0 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 liteManagedFiles 185d0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 185e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 185f0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 h fileName$mana
18600 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  gedFileNames {..
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18620 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
18630 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 18640 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 18650 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 18660 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 18670 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 18680 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 # NOTE: Skip tr 18690 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 ying to load any 186a0 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 files if instru 186b0 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 186c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 186d0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 186e0 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 ::no(loadSqliteF 186f0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 18700 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 18710 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 18720 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 no(loadSqliteImp 18730 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 18740 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 18750 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d tryLoadAssem 18760 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e bly System.Data. 18770 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 SQLite.dll.. 18780 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18790 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 187a0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 187b0 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46 69 loadSqliteLinqFi 187c0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 187e0 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 LoadAssembly Sys 187f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 18800 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 Linq.dll.. 18810 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 18820 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 18830 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 18840 61 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65 73 adSqliteEf6Files 18850 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 18860 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 18870 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 18880 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 .Data.SQLite.EF6 18890 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 188a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 188b0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 188c0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 188d0 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 liteNonImplicitF 188e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 18900 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 18910 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 ::no(loadSqliteP 18920 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 latformFiles)] & 18930 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 18940 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 18950 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
18960 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18980 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
18990 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
189a0 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  .dll $platform.. 189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 189c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 189d0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 189e0 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 189f0 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 teArchitectureFi 18a00 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 les)] && \.. 18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 18a20 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 tring length$ar
18a30 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d  chitecture] > 0}
18a40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18a50 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
18a60 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
18a70 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll
18a80 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20  $architecture.. 18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 18aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 18ab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 18ac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 18ad0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 18ae0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
18af0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
18b00 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
18b10 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
18b20 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 73  e version of \"s
18b30 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20  qlite3.dll\"...
18b40 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
18b50 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e     [file version
18b60 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
18b70 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d  ame sqlite3.dll]
18b80 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ] \n]..        }
18b90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
18ba0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
18bb0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 18bc0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 18bd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18be0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 18bf0 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65 sion of \"SQLite 18c00 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e .Interop.dll\".. 18c10 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 . " \.. 18c20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 [file versi 18c30 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 18c40 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 eName SQLite.Int 18c50 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a erop.dll]] \n].. 18c60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18c70 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 18c80 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
18c90 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
18ca0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
18cb0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
18cc0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
18cd0 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \"System.Data.S
18ce0 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  QLite.dll\"... "
18cf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18d00 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
18d10 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
18d20 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
18d30 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  QLite.dll]] \n].
18d40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
18d50 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
18d60 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $18d70 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 18d80 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 18d90 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 18da0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 18db0 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 18dc0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c SQLite.Linq.dll\ 18dd0 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 "... " \.. 18de0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 [file ve 18df0 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 rsion [getBinary 18e00 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e FileName System. 18e10 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 18e20 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 .dll]] \n].. 18e30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 18e40 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 18e50 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
18e60 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
18e70 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
18e80 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
18e90 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
18ea0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
18eb0 65 2e 45 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  e.EF6.dll\"... "
18ec0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18ed0 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
18ee0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
18ef0 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
18f00 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20  QLite.EF6.dll]]
18f10 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
18f20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
18f30 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 18f40 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 18f50 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 18f60 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 18f70 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
18f80 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
18f90 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
18fa0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
18fb0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
18fc0 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a  "" $platform \.. 18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18fe0 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e "/sqlite3.dll\". 18ff0 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 .. " [file versi 19000 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 19010 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 [getBinary 19020 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 FileName sqlite3 19030 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d .dll$platform]]
19040 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
19050 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  }....          c
19060 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
19070 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 19080 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 19090 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 190a0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 190b0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 190c0 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a ""$platform \..
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
190e0 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  "/SQLite.Interop
190f0 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c  .dll\"... " [fil
19100 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
19120 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
19130 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
19140 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c  ll $platform]] \ 19150 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 19160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 ... cat 19170 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 19180 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
19190 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
191a0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
191b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
191c0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
191d0 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20   $platform \.. 191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f "/ 191f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 19200 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 te.dll\"... " [f 19210 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 ile version \.. 19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 19230 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 19240 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 19250 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f Lite.dll$platfo
19260 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rm]] \n]..
19270 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
19280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
19290 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $192a0 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 architecture] > 192b0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 192c0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 192d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 192e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
192f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19310 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
19320 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74  n of \"" $archit 19330 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 ecture \.. 19340 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c 69 "/sqli 19350 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b te3.dll\"... " [ 19360 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19380 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 19390 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 me sqlite3.dll$
193a0 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c  architecture]] \
193b0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
193c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74  ...          cat
193d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
193e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 193f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 19400 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 19410 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 19420 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 19430 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c$architecture \
19440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19450 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72    "/SQLite.Inter
19460 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66  op.dll\"... " [f
19470 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20  ile version \..
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
19490 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
194a0 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  e SQLite.Interop
194b0 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75  .dll $architectu 194c0 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 re]] \n].. 194d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 194e0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 194f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
19500 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
19510 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
19530 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
19540 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63  of \"" $architec 19550 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 ture \.. 19560 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d "/System 19570 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 19580 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 \"... " [file ve 19590 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 195a0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e [getBin 195b0 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 aryFileName Syst 195c0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 195d0 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 ll$architecture
195e0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
195f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
19600 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
19610 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61       # NOTE: Gra
19620 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61  b the list of ma
19630 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73  naged assemblies
19640 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
19650 20 70 72 6f 63 65 73 73 0d 0a 20 20 20 20 20 20   process..
19660 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65    #       and re
19670 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74  port on the Syst
19680 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
19690 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20  elated ones...
196a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
196b0 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 20   set assemblies
196c0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41  [object invoke A
196d0 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74  ppDomain.Current
196e0 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62  Domain GetAssemb
196f0 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  lies]....
19700 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
19710 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62  assembly $assemb 19720 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 lies {.. 19730 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 19740 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 tch \{System.Dat 19750 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d a.SQLite*$assem
19760 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bly]} then {..
19770 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
19780 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 19790 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 197b0 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 ---- found loade 197c0 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 d assembly: "$a
197d0 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20  ssembly \n]..
197e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
197f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
19800 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
19810 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 19820 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 19830 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d 19840 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 efine constants 19850 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 for \"System.Dat 19860 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d a.SQLite\"... ". 19870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 19880 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 19890 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 198a0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 198b0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 198c0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 198d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 198e0 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 ite3 DefineConst 198f0 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ants.. 19900 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 } defineConstant 19910 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 19920 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 19930 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
19940 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
19950 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
19960 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
19970 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73       $defineCons 19980 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c tants] <none>] \ 19990 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 199a0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 199b0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
199c0 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77  t_channel unknow
199d0 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n\n..          }
199e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
199f0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
19a00 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
19a10 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 19a20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19a30 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65 "---- source ve 19a40 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 rsion of \"Syste 19a50 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 19a60 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 l\"... ".... 19a70 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 19a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19a90 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 19aa0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 19ab0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19ac0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 19ad0 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e QLite.SQLiteConn 19ae0 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 56 ection ProviderV 19af0 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 ersion.. 19b00 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 } version] == 19b10 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 19b20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 19b30 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 ng length$versi
19b40 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
19b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19b60 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c  set version null
19b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
19b90 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 19ba0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
19bb0 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20  version \n]..
19bc0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
19bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
19be0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 19bf0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 el unknown\n.. 19c00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 19c10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 19c20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 19c30 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
19c40 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
19c50 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
19c60 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20  source checkout
19c70 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61  of \"System.Data
19c80 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e  .SQLite.dll\"...
19c90 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   "....
19ca0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
19cb0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
19cc0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
19cd0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
19cf0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
19d00 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
19d10 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 49   ProviderSourceI
19d20 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 73  d..          } s
19d30 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
19d40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19d50 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
19d60 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d  ength $sourceId] 19d70 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 19d90 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a sourceId null.. 19da0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 19db0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 19dc0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
19dd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 6f   [appendArgs $so 19de0 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 urceId \n].. 19df0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 19e00 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 19e10 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
19e20 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
19e30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
19e40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
19e50 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
19e60 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 69  : Check the avai
19e70 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 6e  lable builds (an
19e80 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f 66  d "releases") of
19e90 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20   SQLite and..
19ea0 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73       #       Sys
19eb0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
19ec0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
19ed0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
19ee0 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 19ef0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 19f00 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 19f10 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 eReleases$::tes
19f20 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
19f30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19f40 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20  # NOTE: Now, we
19f50 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20  need to know if
19f60 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
19f70 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c  library is avail
19f80 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
19f90 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61        (i.e. beca
19fa0 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d  use the managed-
19fb0 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  only System.Data
19fc0 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79  .SQLite assembly
19fd0 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20   can..        #
19fe0 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f        load witho
19ff0 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20  ut it; however,
1a000 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79  it cannot do any
1a010 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74  thing useful wit
1a020 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20  hout..        #
1a030 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77        it).  If w
1a040 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20  e are using the
1a050 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
1a060 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61  bly and we alrea
1a070 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  dy..        #
1a080 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62      found it (ab
1a090 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c  ove), this shoul
1a0a0 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64  d always succeed
1a0b0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1a0c0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
1a0d0 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a 74  LiteLibrary $::t 1a0e0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 1a0f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a100 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1a110 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e if the SQLite in 1a120 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 terop assembly i 1a130 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 s available... 1a140 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1a150 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 checkForSQLiteI 1a160 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 nterop$::test_c
1a170 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
1a180 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1a190 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 53  OTE: Check the S
1a1a0 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61  QLite database a
1a1b0 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
1a1c0 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20  ectories...
1a1d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
1a1e0 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
1a1f0 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f  ctories $::test_ 1a200 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 1a210 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1a220 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 1a230 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 61 determine if va 1a240 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 rious compile-ti 1a250 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 me options neede 1a260 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 d for.. # 1a270 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 73 test cons 1a280 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e 61 traints were ena 1a290 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e bled for the man 1a2a0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 aged assembly. 1a2b0 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23 There.. # 1a2c0 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 20 are some 1a2d0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 compile-time opt 1a2e0 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 61 ions that must a 1a2f0 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 6e lso have been en 1a300 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 23 abled.. # 1a310 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 69 for the i 1a320 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 1a330 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 65 in order to be e 1a340 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 74 ffective. For t 1a350 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 hose.. # 1a360 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 options, i 1a370 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 t will be assume 1a380 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65 6e d that it was en 1a390 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e abled for the in 1a3a0 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 terop.. # 1a3b0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 assembly 1a3c0 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 if it was enable 1a3d0 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 d for the manage 1a3e0 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 d assembly... 1a3f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a400 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f foreach defineCo 1a410 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a nstant [list \.. 1a420 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43 CHEC 1a430 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 K_STATE COUNT_HA 1a440 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 52 NDLE DEBUG INTER 1a450 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 OP_CODEC INTEROP 1a460 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 _DEBUG \.. 1a470 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 INTEROP_EX 1a480 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e TENSION_FUNCTION 1a490 53 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 S INTEROP_LEGACY 1a4a0 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c _CLOSE INTEROP_L 1a4b0 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 OG \.. 1a4c0 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 INTEROP_TEST_E 1a4d0 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 XTENSION INTEROP 1a4e0 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 4e _VIRTUAL_TABLE N 1a4f0 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d 0a ET_20 NET_35 \.. 1a500 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f NET_ 1a510 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 40 NET_45 NET_45 1a520 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 1 NET_COMPACT_20 1a530 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 PLATFORM_COMPAC 1a540 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 TFRAMEWORK \.. 1a550 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f 41 PRELOA 1a560 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 D_NATIVE_LIBRARY 1a570 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53 51 RETARGETABLE SQ 1a580 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d LITE_STANDARD \. 1a590 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48 52 . THR 1a5a0 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 OW_ON_DISPOSED T 1a5b0 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 RACE TRACE_CONNE 1a5c0 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 54 45 CTION TRACE_DETE 1a5d0 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 CTION \.. 1a5e0 20 20 20 20 20 54 52 41 43 45 5f 48 41 4e 44 4c TRACE_HANDL 1a5f0 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 E TRACE_PRELOAD 1a600 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52 41 TRACE_SHARED TRA 1a610 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 5c 0d 0a CE_STATEMENT \.. 1a620 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 TRAC 1a630 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f E_WARNING TRACK_ 1a640 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 45 MEMORY_BYTES USE 1a650 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 _ENTITY_FRAMEWOR 1a660 4b 5f 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 K_6 \.. 1a670 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 USE_INTEROP_D 1a680 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 LL USE_PREPARE_V 1a690 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 2 WINDOWS] {.. 1a6a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a6b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1a6c0 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c ck if the compil 1a6d0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 e-time option is 1a6e0 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c listed in the l 1a6f0 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 ist of.. 1a700 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69 6e # "defin 1a710 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 e constants" kep 1a720 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68 t track of by th 1a730 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 e managed assemb 1a740 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ly... # 1a750 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 1a760 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 kForSQLiteDefine 1a770 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 Constant$::test
1a780 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65  _channel $define 1a790 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 Constant.. 1a7a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 1a7b0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1a7c0 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 : Check the curr 1a7d0 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20 ent build year. 1a7e0 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 Basically, this 1a7f0 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 indicates.. 1a800 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 # whic 1a810 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 h version of MSB 1a820 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 uild and/or Visu 1a830 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75 73 al Studio was us 1a840 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 ed to.. # 1a850 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 compile t 1a860 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 he assembly bina 1a870 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e ries under test. 1a880 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a890 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1a8a0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
1a8b0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1a8c0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73  checking for Sys
1a8d0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
1a8e0 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d  build year... ".
1a8f0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 79  ...        set y
1a900 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61  ear [getBuildYea
1a910 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43  r]..        addC
1a920 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
1a930 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 2e  dArgs buildYear.
1a940 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 20   $year].. 1a950 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1a960 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1a970 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e  gs \" $year \"\n 1a980 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 1a990 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1a9a0 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e Check the curren 1a9b0 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 t build .NET Fra 1a9c0 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 61 6c mework. Basical 1a9d0 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20 ly, this.. 1a9e0 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 63 61 # indica 1a9f0 74 65 73 20 77 68 69 63 68 20 76 65 72 73 69 6f tes which versio 1aa00 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46 72 n of the .NET Fr 1aa10 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 6e 67 amework is being 1aa20 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1aa30 20 20 75 73 65 64 20 62 79 20 74 68 65 20 61 73 used by the as 1aa40 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 sembly binaries 1aa50 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 under test... 1aa60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1aa70 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1aa80 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
1aa90 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b       "---- check
1aaa0 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  ing for System.D
1aab0 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64  ata.SQLite build
1aac0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e   .NET Framework.
1aad0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .. "....
1aae0 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42 75  set netFx [getBu
1aaf0 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20 20  ildNetFx]..
1ab00 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
1ab10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69   [appendArgs bui
1ab20 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e 65  ldFramework. $ne 1ab30 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 tFx].. tp 1ab40 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1ab50 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1ab60 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d  \" $netFx \"\n]. 1ab70 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1ab80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1ab90 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 eck the current 1aba0 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 build configurat 1abb0 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c ion. This shoul 1abc0 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 d normally.. 1abd0 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65 # be e 1abe0 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 ither "Debug" or 1abf0 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20 "Release"... 1ac00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1ac10 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1ac20 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
1ac30 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b       "---- check
1ac40 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  ing for System.D
1ac50 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64  ata.SQLite build
1ac60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e   configuration..
1ac70 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  . "....        s
1ac80 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  et configuration
1ac90 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67   [getBuildConfig
1aca0 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20  uration]..
1acb0 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
1acc0 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c  [appendArgs buil
1acd0 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20  dConfiguration.
1ace0 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d  $configuration]. 1acf0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1ad00 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1ad10 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 63  appendArgs \" $c 1ad20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c onfiguration \"\ 1ad30 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. 1ad40 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1ad50 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61 6e Try to setup an 1ad60 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 interrupt callb 1ad70 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73 63 ack using the sc 1ad80 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a 20 ript debugger.. 1ad90 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 1ada0 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 hat will cancel 1adb0 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73 20 all SQL queries 1adc0 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20 in progress for 1add0 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 20 all database.. 1ade0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 1adf0 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 nnections known 1ae00 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 to this interpre 1ae10 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ter... #. 1ae20 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 1ae30 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 1ae40 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74 43 sqliteInterruptC 1ae50 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 allback)]} then 1ae60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 1ae70 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c upDbInterruptCal 1ae80 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 lback$::test_ch
1ae90 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f  annel $::test_lo 1aea0 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a g.. }.... 1aeb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1aec0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 1aed0 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 for the native 1aee0 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 runtime option, 1aef0 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e which would mean 1af00 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20 we are.. 1af10 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 # using t 1af20 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 he mixed-mode as 1af30 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 1af40 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 #.. chec 1af50 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f kForRuntimeOptio 1af60 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 n$::test_channe
1af70 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20  l native....
1af80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1af90 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
1afa0 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73  the test suite s
1afb0 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 20  hould count the
1afc0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63  number of connec
1afd0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23  tions..        #
1afe0 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 20         "opened"
1aff0 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 6f  and "closed" fro
1b000 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20  m the pool when
1b010 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61  determining if a
1b020 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
1b030 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 20         passed.
1b040 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 62  Disabling this b
1b050 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 74  ehavior is somet
1b060 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 28  imes necessary (
1b070 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20  e.g...        #
1b080 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 65        during the
1b090 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e 67   release testing
1b0a0 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 73   process) becaus
1b0b0 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76 65  e there are seve
1b0c0 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ral..        #
1b0d0 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20       tests that
1b0e0 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 65  rely on the "ope
1b0f0 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63  ned from pool" c
1b100 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 74  ount being great
1b110 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  er..        #
1b120 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20      than zero.
1b130 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 20  These tests may
1b140 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 20  fail due to the
1b150 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69  non-deterministi
1b160 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  c..        #
1b170 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74     behavior of t
1b180 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e 20  he CLR GC, even
1b190 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f  when there is no
1b1a0 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 65   bug in the code
1b1b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1b1c0 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d    being tested..
1b1d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1b1e0 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74      checkForRunt
1b1f0 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73  imeOption $::tes 1b200 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c t_channel noPool 1b210 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 Counts.... 1b220 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1b230 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 OTE: Report the 1b240 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 resource usage p 1b250 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 rior to running 1b260 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 any tests... 1b270 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 1b280 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 1b290 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 rces$::test_cha
1b2a0 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
1b2b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1b2c0 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74  E: Grab the list
1b2d0 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c   of native modul
1b2e0 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  es for the curre
1b2f0 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a  nt process and..
1b300 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1b310 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79  report on the Sy
1b320 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1b330 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a   related ones...
1b340 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1b350 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b     set modules [
1b360 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d  object invoke \.
1b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
1b380 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e  tem.Diagnostics.
1b390 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65  Process.GetCurre
1b3a0 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65  ntProcess Module
1b3b0 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62  s]....        ob
1b3c0 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
1b3d0 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75  ias module $modu 1b3e0 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 les {.. 1b3f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1b400 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 NOTE: The module 1b410 20 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 file name here 1b420 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a must be normaliz 1b430 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 1b440 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1b450 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n 1b460 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c ormalize [$modul
1b470 65 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a  e FileName]]....
1b480 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
1b490 74 72 69 6e 67 20 6d 61 74 63 68 20 2d 6e 6f 63  tring match -noc
1b4a0 61 73 65 20 2a 2f 73 71 6c 69 74 65 33 2e 64 6c  ase */sqlite3.dl
1b4b0 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  l $fileName]} th 1b4c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1b4d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1b4e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1b4f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1b500 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75         "---- fou
1b510 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 65  nd loaded SQLite
1b520 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20   native library
1b530 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20  module: " \..
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69               $fi 1b550 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 leName \n].. 1b560 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 1b570 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d [string match \. 1b580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d . - 1b590 6e 6f 63 61 73 65 20 2a 2f 53 51 4c 69 74 65 2e nocase */SQLite. 1b5a0 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 66 69 6c Interop.dll$fil
1b5b0 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1b5d0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1b5e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1b5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1b600 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 "---- found loa 1b610 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74 65 72 ded SQLite inter 1b620 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 op assembly modu 1b630 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 le: " \.. 1b640 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
1b650 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  me \n]..
1b660 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1b670 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
1b680 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1b690 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1b6a0 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 1b6b0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c "---- compil 1b6c0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 e-time options f 1b6d0 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c or SQLite core l 1b6e0 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 ibrary... ".... 1b6f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1b700 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1b710 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1b720 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 1b730 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 1b740 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1b750 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 1b760 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 SQLiteCompileOp 1b770 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 tions.. 1b780 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e } compileOption 1b790 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 1b7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1b7b0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1b7c0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
1b7d0 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
1b7e0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1b7f0 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74       $compileOpt 1b800 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e ions] <none>] \n 1b810 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 1b820 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1b830 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1b840 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e  _channel unknown
1b850 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  \n..          }.
1b860 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1b870 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1b880 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1b890 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 1b8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b8b0 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 "---- compile-ti 1b8c0 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 me options for S 1b8d0 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 1b8e0 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... 1b8f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1b900 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1b910 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1b920 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 1b930 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 1b940 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1b950 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 1b960 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f InteropCompileO 1b970 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 ptions.. 1b980 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f } compileOptio 1b990 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ns] == 0} then { 1b9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1b9b0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1b9c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b9d0 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f  [formatList [lso
1b9e0 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  rt \..
1b9f0 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70        $compileOp 1ba00 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c tions] <none>] \ 1ba10 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 1ba20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1ba30 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1ba40 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77  t_channel unknow
1ba50 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n\n..          }
1ba60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
1ba70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1ba80 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74    # NOTE: Show t
1ba90 68 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63  he active test c
1baa0 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20  onstraints...
1bab0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1bac0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1bad0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1bae0 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 s "---- constrai 1baf0 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 nts: " \.. 1bb00 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 [formatLis 1bb10 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e t [lsort [getCon 1bb20 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 straints]] <none 1bb30 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 >] \n].... 1bb40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1bb50 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 OTE: Save the te 1bb60 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 st constraints f 1bb70 6f 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64 or use by thread 1bb80 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 s created in thi 1bb90 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 1bba0 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 application d 1bbb0 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 omain. This is 1bbc0 6e 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 necessary becaus 1bbd0 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d e all the Eagle. 1bbe0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1bbf0 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 "test context" 1bc00 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 information is p 1bc10 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 er-thread... 1bc20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 1bc30 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 1bc40 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 ::test_constrai 1bc50 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 nts]} then {.. 1bc60 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 set ::te 1bc70 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 st_constraints$
1bc80 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f  ::eagle_tests(co
1bc90 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20  nstraints)..
1bca0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1bcb0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1bcc0 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66  TE: Load the "af
1bcd0 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22  ter-constraints"
1bce0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72   custom per-user
1bcf0 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74   and/or per-host
1bd00 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1bd10 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20    test settings
1bd20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
1bd30 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c  .        uplevel
1bd40 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c   1 [list loadSQL
1bd50 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20  iteTestSettings
1bd60 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1bd70 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 .after].... 1bd80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1bd90 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 NOTE: Show when 1bda0 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c our tests actual 1bdb0 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d ly began (now).. 1bdc0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1bdd0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1bde0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1bdf0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1be00 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65       "---- Syste
1be10 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65  m.Data.SQLite te
1be20 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c  sts began at " \
1be30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63  ..            [c
1be40 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f  lock format [clo
1be50 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d  ck seconds]] \n]
1be60 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1be70 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75  .....    proc ru
1be80 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f  nSQLiteTestEpilo
1be90 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  gue {} {..
1bea0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1beb0 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75   Skip running ou
1bec0 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75  r custom epilogu
1bed0 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e  e if the main on
1bee0 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  e has been..
1bef0 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65    #       skippe
1bf00 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
1bf10 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
1bf20 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67  ists ::no(epilog
1bf30 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e  ue.eagle)]} then
1bf40 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1bf50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1bf60 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73  how when our tes
1bf70 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65  ts actually ende
1bf80 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20  d (now)...
1bf90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
1bfa0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1bfb0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1bfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 1bfd0 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e --- System.Data. 1bfe0 53 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 SQLite tests end 1bff0 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 ed at " \.. 1c000 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f [clock fo 1c010 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f rmat [clock seco 1c020 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 nds]] \n].... 1c030 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1c040 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 1c050 20 22 65 70 69 6c 6f 67 75 65 22 20 63 75 73 74 "epilogue" cust 1c060 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f om per-user and/ 1c070 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 or per-host test 1c080 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1c090 20 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d settings now.. 1c0a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1c0b0 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 1c0c0 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 ist loadSQLiteTe 1c0d0 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 stSettings$::te
1c0e0 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c  st_channel .epil
1c0f0 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ogue]....
1c100 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
1c110 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65  GFIX: Before che
1c120 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  cking the final
1c130 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65  resources in use
1c140 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65   by SQLite, make
1c150 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1c160 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66      sure both of
1c170 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61   the PRAGMA rela
1c180 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61  ted directory na
1c190 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a  mes are freed...
1c1a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1c1b0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
1c1c0 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a  eDirectories $:: 1c1d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 test_channel tru 1c1e0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 1c1f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1c200 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 Also report the 1c210 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 resource usage a 1c220 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 fter running the 1c230 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 1c240 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f #.. repo 1c250 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 rtSQLiteResource 1c260 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1c270 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
1c280 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c290 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 69  Report the criti
1c2a0 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
1c2b0 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20  s after running
1c2c0 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20  the tests...
1c2d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67      #..        g
1c2e0 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f  etSQLiteHandleCo
1c2f0 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  unts \$::test_cha
1c300 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  nnel..      }..
1c310 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23     }.....    ###
1c320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c360 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23  ########..    ##
1c370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c380 23 23 23 23 23 23 23 23 23 23 23 20 45 4e 44 20  ########### END
1c390 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23  Eagle ONLY #####
1c3a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3b0 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23  #########..    #
1c3c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c3f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c400 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d  ##########..  }.
1c410 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
1c420 3a 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20  : Save the name
1c430 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  of the directory
1c440 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
1c450 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69   file...  #..  i
1c460 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1c470 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72   common_director
1c480 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
1c490 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63  set common_direc
1c4a0 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61  tory [file dirna
1c4b0 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  me [info script]
1c4c0 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20  ]..  }....  #..
1c4d0 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65   # NOTE: Provide
1c4e0 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
1c4f0 2e 53 51 4c 69 74 65 20 74 65 73 74 20 70 61 63  .SQLite test pac
1c500 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65  kage to the inte
1c510 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20  rpreter...  #..
1c520 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65   package provide
1c530 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1c540 69 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d  ite.Test 1.0..}.
1c550 0a                                               .