System.Data.SQLite
Hex Artifact Content
Not logged in

• File Tests/common.eagle — part of check-in [673875e370] at 2015-04-08 23:12:06 on branch trunk — Modify the test suite itself to work without the 'object' command, if necessary. (user: mistachkin size: 140905)

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 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
0fd0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
0fe0: 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
0ff0: 6e 20 61 64 64 69 6e 67 20 73 68 69 6d 6d 65 64  n adding shimmed
1000: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
1010: 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70  s...    #..    p
1020: 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6c 72 56  roc getBuildClrV
1030: 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20  ersion {} {..
1040: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1050: 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5d 20  sts ::test_clr]
1060: 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  && [string lengt
1070: 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5d 20 3e  h $::test_clr] > 1080: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1090: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 10a0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 10b0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76 65 pecified test ve 10c0: 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c rsion for the CL 10d0: 52 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 R. If this vari 10e0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 able.. # 10f0: 20 20 20 20 20 20 69 73 20 6e 6f 74 20 73 65 74 is not set 1100: 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 , the default va 1110: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 1120: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 1130: 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 not.. # 1140: 20 20 20 20 20 45 61 67 6c 65 20 68 61 73 20 62 Eagle has b 1150: 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 een compiled aga 1160: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 1170: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 1180: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1190: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
11a0: 74 5f 63 6c 72 0d 0a 20 20 20 20 20 20 7d 20 65  t_clr..      } e
11b0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
11c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
11d0: 3a 20 43 68 65 63 6b 20 69 66 20 45 61 67 6c 65  : Check if Eagle
11e0: 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c   has been compil
11f0: 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43  ed against the C
1200: 4c 52 20 76 34 2e 30 2e 20 20 49 66 20 73 6f 2c  LR v4.0.  If so,
1210: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1220: 20 20 6a 75 73 74 20 75 73 65 20 74 68 61 74 20    just use that
1230: 43 4c 52 20 76 65 72 73 69 6f 6e 2e 20 20 4f 74  CLR version.  Ot
1240: 68 65 72 77 69 73 65 2c 20 75 73 65 20 74 68 65  herwise, use the
1250: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65   version for the
1260: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1270: 20 20 43 4c 52 20 76 32 2e 30 2e 20 20 49 66 20    CLR v2.0.  If
1280: 61 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69  another major [i
1290: 6e 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72  ncompatible] ver
12a0: 73 69 6f 6e 20 6f 66 20 74 68 65 20 43 4c 52 0d  sion of the CLR.
12b0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
12c0: 20 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68   is released, th
12d0: 69 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61  is check will ha
12e0: 76 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64  ve to be changed
12f0: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0d 0a  .  The default..
1300: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1310: 76 65 72 73 69 6f 6e 20 76 61 6c 75 65 20 66 6f  version value fo
1320: 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 43  r a particular C
1330: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62  LR version may b
1340: 65 20 6f 76 65 72 72 69 64 64 65 6e 0d 0a 20 20  e overridden..
1350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79        #       by
1360: 20 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f   setting the glo
1370: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 22 74 65  bal variable "te
1380: 73 74 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65  st_clr_v$X", whe 1390: 72 65 20 22 24 58 22 20 6d 61 79 0d 0a 20 20 20 re "$X" may..
13a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 63 75       #       [cu
13b0: 72 72 65 6e 74 6c 79 5d 20 62 65 20 65 69 74 68  rrently] be eith
13c0: 65 72 20 22 32 22 20 6f 72 20 22 34 22 2e 0d 0a  er "2" or "4"...
13d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13e0: 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73     if {[haveCons
13f0: 74 72 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74  traint imageRunt
1400: 69 6d 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ime40]} then {..
1410: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69            if {[i
1420: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
1430: 74 5f 63 6c 72 5f 76 34 5d 20 26 26 20 5c 0d 0a  t_clr_v4] && \..
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
1450: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 1460: 74 65 73 74 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 test_clr_v4] > 0 1470: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1480: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1490: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 14a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 the specified t 14b0: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 est version for 14c0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 the CLR v4.0... 14d0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 14e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 14f0: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 0d$::test_clr_v4.
1500: 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
1510: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1520: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1530: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1540: 64 65 66 61 75 6c 74 20 74 65 73 74 20 76 65 72  default test ver
1550: 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52  sion for the CLR
1560: 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v4.0...
1570: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1580: 20 20 20 72 65 74 75 72 6e 20 34 2e 30 2e 33 30     return 4.0.30
1590: 33 31 39 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f  319; # TODO: Goo
15a0: 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66  d "fallback" def
15b0: 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20  ault?..
15c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
15d0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
15e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
15f0: 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 32 5d 20   ::test_clr_v2]
1600: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1610: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
1620: 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76  th $::test_clr_v 1630: 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 2] > 0} then {.. 1640: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1650: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1660: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 1670: 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f fied test versio 1680: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 n for the CLR v2 1690: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 16a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 16b0: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 return$::test_c
16c0: 6c 72 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20  lr_v2..
16d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
16e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
16f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1700: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65  e the default te
1710: 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  st version for t
1720: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20  he CLR v2.0...
1730: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1740: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
1750: 32 2e 30 2e 35 30 37 32 37 3b 20 23 20 54 4f 44  2.0.50727; # TOD
1760: 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63  O: Good "fallbac
1770: 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20  k" default?..
1780: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1790: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
17a0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
17b0: 20 67 65 74 42 75 69 6c 64 59 65 61 72 73 20 7b   getBuildYears {
17c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
17d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20      # NOTE: See
17e0: 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74  if the list of t
17f0: 65 73 74 20 79 65 61 72 73 20 68 61 73 20 62 65  est years has be
1800: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79  en overridden by
1810: 20 74 68 65 20 75 73 65 72 0d 0a 20 20 20 20 20   the user..
1820: 20 23 20 20 20 20 20 20 20 28 65 2e 67 2e 20 6f   #       (e.g. o
1830: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
1840: 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne)...      #..
1850: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
1860: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61  xists ::test_yea
1870: 72 73 5d 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20  rs] && [llength
1880: 24 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 3e  $::test_years] > 1890: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 18a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 18b0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 18c0: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 pecified list of 18d0: 20 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 test years... 18e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18f0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
1900: 79 65 61 72 73 0d 0a 20 20 20 20 20 20 7d 20 65  years..      } e
1910: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
1920: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1930: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
1940: 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79  t list of test y
1950: 65 61 72 73 20 28 69 2e 65 2e 20 61 6c 6c 29 2e  ears (i.e. all).
1960: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1970: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
1980: 74 20 32 30 30 35 20 32 30 30 38 20 32 30 31 30  t 2005 2008 2010
1990: 20 32 30 31 32 20 32 30 31 33 5d 0d 0a 20 20 20   2012 2013]..
19a0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
19b0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
19c0: 64 4e 65 74 46 78 20 7b 7d 20 7b 0d 0a 20 20 20  dNetFx {} {..
19d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
19e0: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 74  TE: See if the t
19f0: 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  est .NET Framewo
1a00: 72 6b 20 73 65 74 74 69 6e 67 20 68 61 73 20 62  rk setting has b
1a10: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62  een overridden b
1a20: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
1a30: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20   the user (e.g.
1a40: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  on the command l
1a50: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ine)...      #..
1a60: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
1a70: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e 65  exists ::test_ne
1a80: 74 5f 66 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20  t_fx] && \..
1a90: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
1aa0: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 65 74  ngth $::test_net 1ab0: 5f 66 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _fx] > 0} then { 1ac0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1ad0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1ae0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 the specified t 1af0: 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f est .NET Framewo 1b00: 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rk... #.. 1b10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
1b20: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 0d 0a 20  ::test_net_fx..
1b30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1b40: 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20         set year
1b50: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a  [getBuildYear]..
1b60: 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  ..        switch
1b70: 20 2d 65 78 61 63 74 20 2d 2d 20 24 79 65 61 72   -exact -- $year 1b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 32 30 {.. 20 1b90: 30 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 05 {.. 1ba0: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30 return netFx20 1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1bc0: 20 20 20 20 20 20 20 20 20 32 30 30 38 20 7b 0d 2008 {. 1bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret 1be0: 75 72 6e 20 6e 65 74 46 78 33 35 0d 0a 20 20 20 urn netFx35.. 1bf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1c00: 20 20 20 20 32 30 31 30 20 7b 0d 0a 20 20 20 20 2010 {.. 1c10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 1c20: 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 etFx40.. 1c30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 1c40: 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 012 {.. 1c50: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 1c60: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 5.. }.. 1c70: 20 20 20 20 20 20 20 20 20 20 32 30 31 33 20 7b 2013 { 1c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1c90: 74 75 72 6e 20 6e 65 74 46 78 34 35 31 0d 0a 20 turn netFx451.. 1ca0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1cb0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d default {. 1cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret 1cd0: 75 72 6e 20 6e 65 74 46 78 33 35 3b 20 23 20 54 urn netFx35; # T 1ce0: 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 ODO: Good "fallb 1cf0: 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 ack" default?.. 1d00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1d10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 1d20: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d }..... #. 1d30: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 . # NOTE: Thi 1d40: 73 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 s procedure shou 1d50: 6c 64 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 ld return non-ze 1d60: 72 6f 20 69 66 20 74 68 65 20 63 6f 6e 66 69 67 ro if the config 1d70: 75 72 65 64 20 74 65 73 74 0d 0a 20 20 20 20 23 ured test.. # 1d80: 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 platform 1d90: 69 73 20 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 74 is most likely t 1da0: 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 he default for t 1db0: 68 69 73 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 his machine... 1dc0: 20 20 23 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 #.. proc is 1dd0: 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 DefaultBuildPlat 1de0: 66 6f 72 6d 20 7b 20 7b 76 65 72 62 6f 73 65 20 form { {verbose 1df0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 1e00: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1e10: 45 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f E: Running on Wo 1e20: 57 36 34 20 69 73 20 6e 65 76 65 72 20 74 68 65 W64 is never the 1e30: 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 default platfor 1e40: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 1e50: 20 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e if {[isRunnin 1e60: 67 57 6f 57 36 34 5d 7d 20 74 68 65 6e 20 7b 0d gWoW64]} then {. 1e70: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
1e80: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
1e90: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1ea0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 1eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ec0: 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 6e "---- detected n 1ed0: 6f 6e 2d 64 65 66 61 75 6c 74 20 70 6c 61 74 66 on-default platf 1ee0: 6f 72 6d 20 28 57 6f 57 36 34 29 5c 6e 22 0d 0a orm (WoW64)\n".. 1ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f00: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 1f10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1f20: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1f30: 45 3a 20 54 68 69 73 20 68 61 73 20 61 20 67 6f E: This has a go 1f40: 6f 64 20 63 68 61 6e 63 65 20 6f 66 20 62 65 69 od chance of bei 1f50: 6e 67 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 ng the default p 1f60: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 1f70: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 #.. if {$ve
1f80: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
1f90: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1fa0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d test_channel "-- 1fb0: 2d 2d 20 64 65 74 65 63 74 65 64 20 64 65 66 61 -- detected defa 1fc0: 75 6c 74 20 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d ult platform\n". 1fd0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 . }.. 1fe0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 1ff0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 2000: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d getBuildPlatform 2010: 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 { native } {.. 2020: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 2030: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 xists ::test_pla 2040: 74 66 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 tform] && \.. 2050: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 2060: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c ength$::test_pl
2070: 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65  atform] > 0} the
2080: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
2090: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
20a0: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
20b0: 64 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e  d test platform.
20c0: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62    If this variab
20d0: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a  le is not set,..
20e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
20f0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
2100: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20  e will be based
2110: 6f 6e 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61  on the machine a
2120: 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20  rchitecture...
2130: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2140: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24   return [expr {$2150: 6e 61 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74 native ?$::test
2160: 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d  _platform : ""}]
2170: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
2180: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
2190: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26  :test_machine] &
21a0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
21b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 21c0: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e :test_machine] > 21d0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 21e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 21f0: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 NOTE: For nativ 2200: 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e e builds, return 2210: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 2220: 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 me corresponding 2230: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 2240: 20 20 20 20 20 74 68 65 20 74 65 73 74 20 6d 61 the test ma 2250: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 chine architectu 2260: 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 re; otherwise, r 2270: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a eturn an empty.. 2280: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2290: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 string... 22a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 22b0: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 rn [expr {.. 22c0: 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20$native ?
22d0: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f  [machineToPlatfo
22e0: 72 6d 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69  rm $::test_machi 22f0: 6e 65 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 ne] : "".. 2300: 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }].. } el 2310: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 2320: 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 ts ::tcl_platfor 2330: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 m(machine)]} the 2340: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 2350: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2360: 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 For native build 2370: 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c s, return the pl 2380: 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 atform name corr 2390: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 esponding to.. 23a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 23b0: 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 e machine archit 23c0: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 ecture; otherwis 23d0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 e, return an emp 23e0: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 ty string... 23f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2400: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 eturn [expr {.. 2410: 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76 65$native
2420: 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61   ? [machineToPla
2430: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61  tform $::tcl_pla 2440: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 tform(machine)] 2450: 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d : "".. }] 2460: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 2470: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2480: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 # NOTE: No 2490: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 machine architec 24a0: 74 75 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c ture is availabl 24b0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 e, return an emp 24c0: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 ty string... 24d0: 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20 69 # It i 24e0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 s important to r 24f0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2500: 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 tring here becau 2510: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 se the.. 2520: 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f # result o 2530: 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 f this procedure 2540: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74 may be used wit 2550: 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a h [file join]... 2560: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2570: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 2580: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 2590: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 . proc getBui 25a0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 ldConfiguration 25b0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 25c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 # NOTE: See 25d0: 20 69 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75 if the "configu 25e0: 72 61 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 ration" setting 25f0: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 2600: 64 65 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20 den by the.. 2610: 20 20 23 20 20 20 20 20 20 20 75 73 65 72 20 28 # user ( 2620: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d e.g. on the comm 2630: 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 and line). This 2640: 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 helps control e 2650: 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 xactly.. # 2660: 20 20 20 20 20 20 77 68 69 63 68 20 73 65 74 20 which set 2670: 6f 66 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 of binaries we a 2680: 72 65 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e re testing (i.e. 2690: 20 74 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 those built in 26a0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 26b0: 20 20 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 "Debug" or "R 26c0: 65 6c 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f elease" build co 26d0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 nfigurations). 26e0: 54 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 To override this 26f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 2700: 76 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f value via the co 2710: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 mmand line, ente 2720: 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 r a command simi 2730: 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 lar to one of.. 2740: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 2750: 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 following (all 2760: 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 on one line):.. 2770: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2780: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c EagleShell 2790: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c .exe -anyInitial 27a0: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f ize "set test_co 27b0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75 nfiguration Debu 27c0: 67 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 g".. # 27d0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 27e0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 27f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2800: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c EagleShell 2810: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c .exe -anyInitial 2820: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f ize "set test_co 2830: 6e 66 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 nfiguration Rele 2840: 61 73 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 ase".. # 2850: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 -file .\pa 2860: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d th\to\all.eagle. 2870: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2880: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 # EagleShe 2890: 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 ll.exe -file .\p 28a0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 ath\to\all.eagle 28b0: 20 2d 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20 -preTest.. 28c0: 20 23 20 20 20 20 20 20 20 20 20 22 75 6e 73 65 # "unse 28d0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 t -nocomplain te 28e0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 28f0: 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ".. #.. 2900: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 2910: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 ts ::test_config 2920: 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 uration] && \.. 2930: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2940: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f length$::test_
2950: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e  configuration] >
2960: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2970: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2980: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
2990: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f  pecified test co
29a0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68  nfiguration.  Th
29b0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value
29c0: 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  used..        #
29d0: 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20 76        for this v
29e0: 61 72 69 61 62 6c 65 20 69 73 20 74 79 70 69 63  ariable is typic
29f0: 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20  ally "Release",
2a00: 61 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65  as set by the te
2a10: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  st..        #
2a20: 20 20 20 20 73 75 69 74 65 20 69 74 73 65 6c 66      suite itself
2a30: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2a40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 2a50: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 2a60: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 on.. } else 2a70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 2a80: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 2a90: 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c ormally, we will 2aa0: 20 6e 65 76 65 72 20 68 69 74 20 74 68 69 73 20 never hit this 2ab0: 63 61 73 65 20 62 65 63 61 75 73 65 20 74 68 65 case because the 2ac0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 value of the.. 2ad0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 2ae0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 2af0: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c n variable is al 2b00: 77 61 79 73 20 73 65 74 20 62 79 20 74 68 65 20 ways set by the 2b10: 74 65 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20 test suite.. 2b20: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 # itse 2b30: 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 lf; however, it 2b40: 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 can be overridde 2b50: 6e 20 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65 n using the unse 2b60: 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 t command.. 2b70: 20 20 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 # from 2b80: 74 68 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74 the -preTest opt 2b90: 69 6f 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20 ion to the test 2ba0: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 2bb0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 2bc0: 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 n$::eagle_platf
2bd0: 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  orm(configuratio
2be0: 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n)..      }..
2bf0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
2c00: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
2c10: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20  ations {} {..
2c20: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
2c30: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c  TE: See if the l
2c40: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66  ist of test conf
2c50: 69 67 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62  igurations has b
2c60: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62  een overridden b
2c70: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
2c80: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20   the user (e.g.
2c90: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  on the command l
2ca0: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ine)...      #..
2cb0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
2cc0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f  exists ::test_co
2cd0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26  nfigurations] &&
2ce0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c   \..          [l
2cf0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63  length $::test_c 2d00: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e onfigurations] > 2d10: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2d30: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 2d40: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 pecified list of 2d50: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 test configurat 2d60: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ions... # 2d70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 2d80: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75$::test_configu
2d90: 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d  rations..      }
2da0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
2db0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2dc0: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61  TE: Use the defa
2dd0: 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74  ult list of test
2de0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e   configurations.
2df0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2e00: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
2e10: 74 20 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d  t Debug Release]
2e20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2e30: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
2e40: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74  tBuildBaseDirect
2e50: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
2e60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2e70: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20   Figure out the
2e80: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 77  base directory w
2e90: 68 65 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69  here all the bui
2ea0: 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20  lds should be..
2eb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63       #       loc
2ec0: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c  ated.  This will
2ed0: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72   be the director
2ee0: 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  y that contains
2ef0: 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20  the actual..
2f00: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
2f10: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79  output directory
2f20: 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66   (e.g. parent of
2f30: 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20   "bin")...
2f40: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
2f50: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c  fo exists ::buil
2f60: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79  d_base_directory
2f70: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
2f80: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
2f90: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64   $::build_base_d 2fa0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 2fb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 2fc0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2fd0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 2fe0: 66 20 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 f the build base 2ff0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 3000: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 3010: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 3020: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 3030: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 it verbatim... 3040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3050: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 return$::build
3060: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d  _base_directory.
3070: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20  .      } elseif
3080: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
3090: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
30a0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
30b0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
30c0: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 30d0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 30e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 30f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 # NOTE: Ne 3100: 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 xt, fallback to 3110: 74 68 65 20 70 61 72 65 6e 74 20 64 69 72 65 63 the parent direc 3120: 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e 65 20 tory of the one 3130: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 containing.. 3140: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 # this 3150: 20 66 69 6c 65 20 28 69 2e 65 2e 20 22 63 6f 6d file (i.e. "com 3160: 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 69 66 20 mon.eagle"), if 3170: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... 3180: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 3190: 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e eturn [file dirn 31a0: 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 ame$::common_di
31b0: 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 20 20 20  rectory]..
31c0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
31d0: 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d 20 26  exists ::path] &
31e0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
31f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 3200: 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68 65 6e :path] > 0} then 3210: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 3220: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 3230: 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63 6b inally, fallback 3240: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 to the parent d 3250: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 irectory of the 3260: 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20 20 20 EagleTest.. 3270: 20 20 20 23 20 20 20 20 20 20 20 70 61 74 68 2e # path. 3280: 20 20 54 68 65 20 45 61 67 6c 65 54 65 73 74 20 The EagleTest 3290: 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e 74 65 package guarante 32a0: 65 73 20 74 68 61 74 20 74 68 69 73 20 76 61 72 es that this var 32b0: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 iable.. # 32c0: 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 73 will be s 32d0: 65 74 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 et to the direct 32e0: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t 32f0: 68 65 20 66 69 72 73 74 20 66 69 6c 65 20 74 6f he first file to 3300: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3310: 20 20 65 78 65 63 75 74 65 20 74 68 65 20 5b 72 execute the [r 3320: 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20 unTestPrologue] 3330: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 script library p 3340: 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 rocedure... 3350: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 3360: 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 turn [file dirna 3370: 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 me$::path]..
3380: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
3390: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
33a0: 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 68 20  # NOTE: No path
33b0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  is available, re
33c0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
33d0: 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f 69 6e  ring.  This poin
33e0: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
33f0: 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65     should not be
3400: 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 20 20   reached...
3410: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3420: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d  turn ""..      }
3430: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3440: 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 54 65  proc getSQLiteTe
3450: 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 7b 0d  stDataPath {} {.
3460: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3470: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
3480: 75 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ut the directory
3490: 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 74   where all the t
34a0: 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 20 73  est data files s
34b0: 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 20 20  hould..      #
34c0: 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 64 2e       be located.
34d0: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
34e0: 20 74 68 65 20 22 64 61 74 61 22 20 64 69 72 65   the "data" dire
34f0: 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 74 68  ctory beneath th
3500: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
3510: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
3520: 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 61 6c  ining the actual
3530: 20 74 65 73 74 20 73 63 72 69 70 74 73 2e 0d 0a   test scripts...
3540: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
3550: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  eturn [file join
3560: 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d 0d 0a   $::path data].. 3570: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 3580: 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 oc isRunningWoW6 3590: 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 4 {} {.. #. 35a0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 35b0: 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75 73 65 or now, just use 35c0: 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 74 65 the existing te 35d0: 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f st constraint fo 35e0: 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20 20 20 r detecting.. 35f0: 20 20 20 23 20 20 20 20 20 20 20 61 20 57 6f 57 # a WoW 3600: 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 64 process... 3610: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 3620: 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 rn [haveConstrai 3630: 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20 20 7d nt wow64].. } 3640: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 3650: 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c MixedModeAssembl 3660: 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 y { fileName {va 3670: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 rName ""} } {.. 3680: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3690: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d 61 6b NOTE: First, mak 36a0: 65 20 73 75 72 65 20 74 68 65 20 74 65 73 74 20 e sure the test 36b0: 73 75 69 74 65 20 69 6e 66 72 61 73 74 72 75 63 suite infrastruc 36c0: 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 ture is allowed 36d0: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 36e0: 20 20 75 73 65 20 74 68 65 20 5b 65 78 65 63 5d use the [exec] 36f0: 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 command... 3700: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 3710: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 3720: 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69 6e 66 (exec)] && ![inf 3730: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 3740: 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e 20 7b rFlags)]} then { 3750: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3760: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 3770: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 the location of 3780: 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72 65 73 CorFlags is pres 3790: 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76 69 72 ent in the envir 37a0: 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 onment,.. 37b0: 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 3b # use it; 37c0: 20 6f 74 68 65 72 77 69 73 65 20 61 73 73 75 6d otherwise assum 37d0: 65 20 69 74 20 69 73 20 69 6e 20 74 68 65 20 50 e it is in the P 37e0: 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ATH... #. 37f0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 72 . set cor 3800: 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d 0a 20 Flags [expr {.. 3810: 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 [info e 3820: 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f 72 46 xists ::env(CorF 3830: 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 lags)] ?$::env(
3840: 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 6f 72  CorFlags) : "Cor
3850: 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 20 20  Flags"..
3860: 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  }]....        #.
3870: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3880: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63   Attempt to exec
3890: 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f 6e 20  ute CorFlags on
38a0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
38b0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
38c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
38d0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
38e0: 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c 61 67  exec -- $corFlag 38f0: 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 s [file nativena 3900: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 me$fileName]..
3910: 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d 20 3d         } exec] =
3920: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
3930: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3940: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72      # NOTE: If r
3950: 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20  equested by our
3960: 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 74 20  caller, attempt
3970: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
3980: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
3990: 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72      platform for
39a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
39b0: 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20  ile as well...
39c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
39d0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
39e0: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 39f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 3a00: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3a10: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 3a20: 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c 61 74 : Store the plat 3a30: 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61 6d 65 form in the name 3a40: 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68 d variable in th 3a50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 e.. # 3a60: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f context o 3a70: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 f our caller... 3a80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3a90: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 upvar 3aa0: 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61 74 66 1$varName platf
3ab0: 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  orm....
3ac0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
3ad0: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
3ae0: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
3af0: 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68   PE line from th
3b00: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20  e captured..
3b10: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3b20: 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 69 73  output.  If this
3b30: 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 32 22   value is "PE32"
3b40: 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 68 65   or "PE32+", the
3b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
3b60: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66        assembly f
3b70: 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 6f 72  ile is 32-bit or
3b80: 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 63 74   64-bit, respect
3b90: 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  ively;..
3ba0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65      #       othe
3bb0: 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 65 20  rwise, its type
3bc0: 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20  is unknown...
3bd0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
3be0: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74          set patt
3bf0: 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 20 20  ern {^PE
3c00: 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b 29 5c  : (PE32|PE32\+)\
3c10: 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s+$}.... 3c20: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 if {[regexp 3c30: 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 -line --$patter
3c40: 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 70 65  n $exec dummy pe 3c50: 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 32]} then {.. 3c60: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3c70: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 48 41 # HA 3c80: 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74 63 68 CK: This [switch 3c90: 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 33 ] assumes that 3 3ca0: 32 2d 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 2-bit executable 3cb0: 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 s are.. 3cc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 # alw 3cd0: 61 79 73 20 78 38 36 20 61 6e 64 20 74 68 61 74 ays x86 and that 3ce0: 20 36 34 2d 62 69 74 20 65 78 65 63 75 74 61 62 64-bit executab 3cf0: 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73 0d 0a les are always.. 3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 3d10: 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20 20 20 x64... 3d20: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 3d30: 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 switc 3d40: 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70 65 33 h -exact --$pe3
3d50: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2 {..
3d60: 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 20 20       PE32 {..
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3d80: 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 6e 33  et platform Win3
3d90: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  2..
3da0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
3db0: 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d 0a 20        PE32+ {..
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3dd0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 78 36   set platform x6
3de0: 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  4..
3df0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
3e00: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d        default {.
3e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
3e20: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
3e30: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..
3e40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
3e50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
3e60: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
3e80: 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20  platform ""..
3e90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
3ea0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
3eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
3ec0: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
3ed0: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
3ee0: 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 72 6f   ILONLY line fro
3ef0: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a  m the captured..
3f00: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
3f10: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68    output.  If th
3f20: 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  is value is zero
3f30: 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  , the specified
3f40: 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 20 20  file must..
3f50: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
3f60: 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  a mixed-mode ass
3f70: 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 73 65  embly; otherwise
3f80: 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  , it contains on
3f90: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ly..          #
3fa0: 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 63 6f        managed co
3fb0: 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 20 20  mponents...
3fc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
3fd0: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e    set pattern {^
3fe0: 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 7c 31  ILONLY    : (0|1
3ff0: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20  )\s+$}.... 4000: 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 if {![regexp 4010: 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 -line --$patte
4020: 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 69  rn $exec dummy i 4030: 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a lOnly]} then {.. 4040: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 4050: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 rn false.. 4060: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 4070: 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d if {!$ilOnly}
4080: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4090: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
40a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
40b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
40c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
40d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
40e0: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 63 61  he test suite ca
40f0: 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 5d 20  nnot use [exec]
4100: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  or execution of
4110: 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20  CorFlags..
4120: 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 2c 20  #       failed,
4130: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d 0a 20  return false...
4140: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
4150: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
4160: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69  }.....    proc i
4170: 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20  sBuildAvailable
4180: 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74 6f  { native directo
4190: 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20  ry {varName ""}
41a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
41b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
41c0: 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  d the fully qual
41d0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20  ified file name
41e0: 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79 20  for the primary
41f0: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..
4200: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69  #       containi
4210: 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  ng the System.Da
4220: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  ta.SQLite manage
4230: 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49  d components.  I
4240: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
4250: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64   should be noted
4260: 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65 6d   that this assem
4270: 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c 73  bly file may als
4280: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20  o contain the..
4290: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74       #       nat
42a0: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20  ive components,
42b0: 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c  if a native buil
42c0: 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20  d is in use...
42d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
42e0: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file
42f0: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
4300: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory 4310: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 \.. Sy 4320: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 4330: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .dll]].... 4340: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist 4350: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
4360: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
4370: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
4380: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
4390: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
43a0: 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74  tempt to automat
43b0: 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69 66  ically detect if
43c0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73   the primary ass
43d0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  embly..      #
43e0: 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e       contains an
43f0: 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  y native compone
4400: 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61 72  nts, if necessar
4410: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
4420: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
4430: 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20 3d  ength $native] = 4440: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 4450: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 4460: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 length$varName
4470: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
4480: 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31           upvar 1
4490: 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61   $varName$varNa
44a0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  me..        }...
44b0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74  .        set nat
44c0: 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65  ive [isMixedMode
44d0: 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 44e0: 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 me$varName]..
44f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
4500: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
4510: 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61  If the primary a
4520: 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e  ssembly also con
4530: 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76 65  tains the native
4540: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20   components,..
4550: 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20 68      #       we h
4560: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77  ave everything w
4570: 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23  e need...      #
4580: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74  ..      if {$nat 4590: 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ive} then {.. 45a0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 45b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 45c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 45d0: 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 20 TE: What is the 45e0: 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 69 platform for thi 45f0: 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20 20 s machine?.. 4600: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 #.. set p 4610: 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 68 69 6e 65 latform [machine 4620: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 ToPlatform$::tc
4630: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
4640: 6e 65 29 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  ne)]....      #.
4650: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
4660: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
4670: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
4680: 6d 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72  me for the inter
4690: 6f 70 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  op assembly..
46a0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61     #       conta
46b0: 69 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d  ining the System
46c0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74  .Data.SQLite nat
46d0: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20  ive components.
46e0: 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20   If this..
46f0: 23 20 20 20 20 20 20 20 66 69 6c 65 20 65 78 69  #       file exi
4700: 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68  sts, we should h
4710: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77  ave everything w
4720: 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23  e need...      #
4730: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
4740: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
4750: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
4760: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 4770: 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f$platfo
4780: 72 6d 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  rm SQLite.Intero
4790: 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20  p.dll]]....
47a0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
47b0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 47c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 47d0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 47e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set 47f0: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n 4800: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 4810: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 join$directory
4820: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  \..          SQL
4830: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d  ite.Interop.dll]
4840: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
4850: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 4860: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 4870: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 4880: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... 4890: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 48a0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 48b0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified 48c0: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 file name for t 48d0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a he SQLite core.. 48e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 # li 48f0: 62 72 61 72 79 2e 20 20 49 66 20 74 68 69 73 20 brary. If this 4900: 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 file exists, we 4910: 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 should have ever 4920: 79 74 68 69 6e 67 20 77 65 0d 0a 20 20 20 20 20 ything we.. 4930: 20 23 20 20 20 20 20 20 20 6e 65 65 64 2e 0d 0a # need... 4940: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 4950: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 4960: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 4970: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f le join$directo
4980: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry \..
4990: 24 70 6c 61 74 66 6f 72 6d 20 73 71 6c 69 74 65  $platform sqlite 49a0: 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 3.dll]].... 49b0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 49c0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
49d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
49e0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
49f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20   }....      set
4a00: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
4a10: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
4a20: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20  join $directory 4a30: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c \.. sql 4a40: 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 ite3.dll]].... 4a50: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 4a60: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
4a70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4a80: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
4a90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
4aa0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
4ab0: 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74 69  One or more nati
4ac0: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65  ve components ne
4ad0: 65 64 65 64 20 62 79 20 53 79 73 74 65 6d 2e 44  eded by System.D
4ae0: 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20  ata.SQLite..
4af0: 20 20 23 20 20 20 20 20 20 20 61 72 65 20 6d 69    #       are mi
4b00: 73 73 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d  ssing...      #.
4b10: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61  .      return fa
4b20: 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  lse..    }.....
4b30: 20 20 20 70 72 6f 63 20 69 73 52 65 6c 65 61 73     proc isReleas
4b40: 65 41 76 61 69 6c 61 62 6c 65 20 7b 20 64 69 72  eAvailable { dir
4b50: 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20  ectory {varName
4b60: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ""} } {..      i
4b70: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
4b80: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0} 4b90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4ba0: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
4bb0: 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20  e $varName.. 4bc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 4bd0: 75 72 6e 20 5b 69 73 42 75 69 6c 64 41 76 61 69 urn [isBuildAvai 4be0: 6c 61 62 6c 65 20 22 22 20 24 64 69 72 65 63 74 lable ""$direct
4bf0: 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20  ory $varName].. 4c00: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 4c10: 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 c joinBuildDirec 4c20: 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 20 70 61 tory { native pa 4c30: 74 68 20 79 65 61 72 20 70 6c 61 74 66 6f 72 6d th year platform 4c40: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7d configuration } 4c50: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 4c60: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 # NOTE: Figur 4c70: 65 20 6f 75 74 20 61 6e 64 20 74 68 65 6e 20 72 e out and then r 4c80: 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 79 20 eturn the fully 4c90: 71 75 61 6c 69 66 69 65 64 20 70 61 74 68 20 74 qualified path t 4ca0: 6f 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 o the build.. 4cb0: 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 # direc 4cc0: 74 6f 72 79 20 62 61 73 65 64 20 6f 6e 20 61 6c tory based on al 4cd0: 6c 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 l the arguments 4ce0: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 provided by our 4cf0: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 caller... # 4d00: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 .. if {$nat
4d10: 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ive} then {..
4d20: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
4d30: 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e  e join $path bin 4d40: 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d$year $platform 4d50: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d$configuration]
4d60: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
4d70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4d80: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74   [file join $pat 4d90: 68 20 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e h bin$year $con 4da0: 66 69 67 75 72 61 74 69 6f 6e 20 62 69 6e 5d 0d figuration bin]. 4db0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 4dc0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 4dd0: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b BuildDirectory { 4de0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4df0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 # NOTE: See 4e00: 69 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 if the "native" 4e10: 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 runtime option h 4e20: 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 as been set. If 4e30: 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 so, use the.. 4e40: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 4e50: 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 ctory for the mi 4e60: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 4e70: 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 y (a.k.a. the na 4e80: 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 tive interop.. 4e90: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 4ea0: 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c mbly). To enabl 4eb0: 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 e this option vi 4ec0: 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 a the command li 4ed0: 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 ne, enter a.. 4ee0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 # comma 4ef0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e nd similar to on 4f00: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 e of the followi 4f10: 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c ng (all on one l 4f20: 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a ine):.. #.. 4f30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 4f40: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e gleShell.exe -in 4f50: 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d itialize -runtim 4f60: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a eOption native.. 4f70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 4f80: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 4f90: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 4fa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 4fb0: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 To enable this 4fc0: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 option via the 4fd0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 command line pri 4fe0: 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 or to the "beta 4ff0: 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 16".. # 5000: 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 release of Ea 5010: 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 gle, the followi 5020: 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 ng command must 5030: 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d be used instead. 5040: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 . # ( 5050: 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 also all on one 5060: 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d line):.. #. 5070: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 5080: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 agleShell.exe -i 5090: 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 nitialize -postI 50a0: 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 nitialize.. 50b0: 20 23 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 # "obje 50c0: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 50d0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 50e0: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e AddRuntimeOption 50f0: 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 native".. 5100: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 5110: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 5120: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 5130: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 5140: 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 ists ::build_dir 5150: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 ectory] && \.. 5160: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 5170: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f length$::build_
5180: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
5190: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
51a0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
51b0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
51c0: 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  of the build dir
51d0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
51e0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
51f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
5200: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76  refore, use it v
5210: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...
5220: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
5230: 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72  urn $::build_dir 5240: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 5250: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 5260: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 5270: 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 E: If the "nativ 5280: 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f e" runtime optio 5290: 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20 6d 69 n is set, the mi 52a0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 52b0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 52c0: 20 20 20 69 73 20 62 65 69 6e 67 20 74 65 73 74 is being test 52d0: 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 ed. In that cas 52e0: 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 e, the path to t 52f0: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 5300: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ry.. # 5310: 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e will contain 5320: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 5330: 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 62 me and all the b 5340: 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 inaries under te 5350: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 5360: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 70 72 should be pr 5370: 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 69 esent in that di 5380: 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74 68 65 rectory. If the 5390: 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d "native" runtim 53a0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 53b0: 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 option is not 53c0: 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c 64 20 set, the build 53d0: 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62 directory will b 53e0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 e considered to 53f0: 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 be.. # 5400: 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 "platform-ne 5410: 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74 68 65 utral", with the 5420: 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69 notable excepti 5430: 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69 76 65 on of any native 5440: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5450: 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e 67 2e assembly (e.g. 5460: 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 "SQLite.Interop 5470: 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20 74 68 .dll") copied th 5480: 65 72 65 20 64 75 72 69 6e 67 20 74 68 65 0d 0a ere during the.. 5490: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 54a0: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 69 74 build process it 54b0: 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20 62 75 self. If the bu 54c0: 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f 6d 65 ild process some 54d0: 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 how does not.. 54e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 54f0: 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 61 73 py the native as 5500: 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69 73 20 sembly for this 5510: 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f platform, most o 5520: 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20 20 20 f the tests.. 5530: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 # in 5540: 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c 20 73 the suite will s 5550: 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70 65 64 imply be skipped 5560: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 . Generally spe 5570: 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20 20 aking, there.. 5580: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 # ar 5590: 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20 62 75 e two ways to bu 55a0: 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69 65 73 ild the binaries 55b0: 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 when preparing 55c0: 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20 20 20 to run the.. 55d0: 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 55e0: 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20 20 20 suite:.. 55f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 #.. # 5600: 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74 68 65 1. Build the 5610: 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61 67 65 separate manage 5620: 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61 73 73 d and native ass 5630: 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20 73 6f emblies using so 5640: 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 me.. # 5650: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 commands 5660: 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 similar to:.. 5670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5680: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 # build 5690: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 .bat${Configura
56a0: 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79  tion}ManagedOnly
56b0: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20   ${Platform}.. 56c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 56d0: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e build.bat${Con
56e0: 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 76  figuration}Nativ
56f0: 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d  eOnly ${Platform 5700: 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 }.. #.. 5710: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 5720: 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 Where${Configu
5730: 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65  ration} is eithe
5740: 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65  r "Debug" or "Re
5750: 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20  lease" and..
5760: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24      #          $5770: 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 {Platform} is ei 5780: 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 ther "Win32" or 5790: 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 "x64"... 57a0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 #.. # 57b0: 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68 65 20 2. Build the 57c0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 57d0: 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d bly using a comm 57e0: 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d and similar to:. 57f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5800: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 5810: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
5820: 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 74  guration} ${Plat 5830: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 form}.. # 5840: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5850: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e Where${Con
5860: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65  figuration} is e
5870: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
5880: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a   "Release" and..
5890: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
58a0: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69     ${Platform} i 58b0: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 s either "Win32" 58c0: 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66 20 74 or "x64". If t 58d0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a his command is.. 58e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 58f0: 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f 75 73 used, various 5900: 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71 75 tests that requ 5910: 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 ire supplementar 5920: 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 y managed.. 5930: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61 73 # as 5940: 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20 4c semblies (e.g. L 5950: 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b 69 70 INQ) may be skip 5960: 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f 73 65 ped unless those 5970: 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20 20 20 binaries.. 5980: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61 72 # ar 5990: 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 63 e subsequently c 59a0: 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65 20 63 opied into the c 59b0: 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f 72 79 orrect directory 59c0: 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20 20 (i.e. by.. 59d0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 22 74 # "t 59e0: 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a est_all.bat")... 59f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5a00: 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74 65 20 # Note 5a10: 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 that all of the 5a20: 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20 61 build commands a 5a30: 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61 75 6c bove will defaul 5a40: 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20 20 t to using.. 5a50: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 5a60: 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f latest version o 5a70: 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69 6c 61 f MSBuild availa 5a80: 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74 65 73 ble and the "tes 5a90: 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20 20 20 t_year" may.. 5aa0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 # nee 5ab0: 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74 65 64 d to be adjusted 5ac0: 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f 20 accordingly to 5ad0: 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74 68 65 actually run the 5ae0: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 5af0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 52 65 # Re 5b00: 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d 65 fer to the comme 5b10: 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69 6c 64 nts in [getBuild 5b20: 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20 69 Year] for more i 5b30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 nformation on.. 5b40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 68 # h 5b50: 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73 20 76 ow to set this v 5b60: 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 ariable... 5b70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 5b80: 20 6e 61 74 69 76 65 20 5b 68 61 73 52 75 6e 74 native [hasRunt 5b90: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 5ba0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 ].... ret 5bb0: 75 72 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 urn [joinBuildDi 5bc0: 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 rectory$native
5bd0: 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72  [getBuildBaseDir
5be0: 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20  ectory] \..
5bf0: 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64         [getBuild
5c00: 59 65 61 72 5d 20 5b 67 65 74 42 75 69 6c 64 50  Year] [getBuildP
5c10: 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d  latform $native] 5c20: 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 [getBuildConfig 5c30: 75 72 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 uration]].. 5c40: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 5c50: 20 20 70 72 6f 63 20 67 65 74 52 65 6c 65 61 73 proc getReleas 5c60: 65 56 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 eVersion {} {.. 5c70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 5c80: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 NOTE: Figure out 5c90: 20 74 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 the release ver 5ca0: 73 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69 74 sion for use wit 5cb0: 68 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 h the build dire 5cc0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 ctory.. # 5cd0: 20 20 20 20 20 77 68 65 6e 20 63 68 65 63 6b 69 when checki 5ce0: 6e 67 20 66 6f 72 20 61 76 61 69 6c 61 62 6c 65 ng for available 5cf0: 20 72 65 6c 65 61 73 65 73 2e 0d 0a 20 20 20 20 releases... 5d00: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 5d10: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 72 65 info exists ::re 5d20: 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 26 lease_version] & 5d30: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 5d40: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
5d50: 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e  :release_version
5d60: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
5d70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
5d80: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 72 65    # NOTE: The re
5d90: 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 68 61  lease version ha
5da0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
5db0: 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73  n; therefore, us
5dc0: 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 23 20  e it..        #
5dd0: 20 20 20 20 20 20 76 65 72 62 61 74 69 6d 2e 0d        verbatim..
5de0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5df0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 72 65      return $::re 5e00: 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 lease_version.. 5e10: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 5e20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5e30: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c # NOTE: No rel 5e40: 65 61 73 65 20 76 65 72 73 69 6f 6e 20 69 73 20 ease version is 5e50: 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 available, retur 5e60: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 5e70: 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 g... # 5e80: 20 20 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 It is import 5e90: 61 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e ant to return an 5ea0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 empty string he 5eb0: 72 65 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a re because the.. 5ec0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5ed0: 72 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 result of this p 5ee0: 72 6f 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 rocedure may be 5ef0: 75 73 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 used with [file 5f00: 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 join]... 5f10: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 5f20: 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 n "".. }.. 5f30: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 5f40: 63 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 c getBuildFileNa 5f50: 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 me { fileName {p 5f60: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d latform ""} } {. 5f70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5f80: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 # NOTE: Returns 5f90: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 the specified fi 5fa0: 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74 le name as if it 5fb0: 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e were located in 5fc0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 5fd0: 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 63 74 build direct 5fe0: 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 ory, discarding 5ff0: 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e any directory in 6000: 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e formation presen 6010: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 t.. # 6020: 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d in the file nam 6030: 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 e as provided by 6040: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 our caller... 6050: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 6060: 20 72 65 73 75 6c 74 20 5b 66 69 6c 65 20 6e 61 result [file na 6070: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 tivename \.. 6080: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join 6090: 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 [getBuildDirect 60a0: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b ory]$platform [
60b0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 60c0: 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ame]]].... 60d0: 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b 3a #.. # HACK: 60e0: 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e When running on 60f0: 20 57 6f 57 36 34 2c 20 61 73 73 75 6d 65 20 74 WoW64, assume t 6100: 68 65 20 74 65 73 74 20 65 78 65 63 75 74 61 62 he test executab 6110: 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e 74 0d les are present. 6120: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 . # w 6130: 69 74 68 20 74 68 65 20 22 33 32 22 20 73 75 66 ith the "32" suf 6140: 66 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 fix on them... 6150: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 6160: 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 {[isRunningWoW64 6170: 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 74 65 6e ] && [file exten 6180: 73 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20 65 71 sion$result] eq
6190: 20 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 7b 0d   ".exe"} then {.
61a0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 65 73  .        set res
61b0: 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ult [appendArgs
61c0: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24  [file rootname $61d0: 72 65 73 75 6c 74 5d 20 33 32 2e 65 78 65 5d 0d result] 32.exe]. 61e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 61f0: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
6200: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
6210: 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c  proc getExternal
6220: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
6230: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
6240: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
6250: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68  edure returns th
6260: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72  e directory wher
6270: 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62  e the external b
6280: 69 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  inary..      #
6290: 20 20 20 20 20 66 69 6c 65 73 20 61 72 65 20 6c       files are l
62a0: 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 23  ocated...      #
62b0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
62c0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
62d0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66  [file dirname [f
62e0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66  ile dirname [inf
62f0: 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 20  o binary]]]]..
6300: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
6310: 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74   getBinaryDirect
6320: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
6330: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6340: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
6350: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
6360: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
6370: 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  test application
6380: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6390: 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65  itself (i.e. the
63a0: 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73   Eagle shell) is
63b0: 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20   located.  This
63c0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d  will be used as.
63d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
63e0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66  he destination f
63f0: 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 53 79  or the copied Sy
6400: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
6410: 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20   native and..
6420: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67     #       manag
6430: 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69  ed assemblies (i
6440: 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 69 73  .e. because this
6450: 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   is one of the f
6460: 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20  ew places..
6470: 20 23 20 20 20 20 20 20 20 77 68 65 72 65 20 74   #       where t
6480: 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75  he CLR will actu
6490: 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f  ally find and lo
64a0: 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79  ad them properly
64b0: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
64c0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
64d0: 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72  sts ::binary_dir
64e0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
64f0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
6500: 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79  length $::binary 6510: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 6520: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 6530: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6540: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 6550: 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 of the binary d 6560: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 6570: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 6580: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 6590: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 65a0: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 65b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 65c0: 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f eturn$::binary_
65d0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
65e0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
65f0: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20     return [info
6600: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d  binary]..      }
6610: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
6620: 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c  proc getExternal
6630: 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e  FileName { fileN
6640: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ame } {..      #
6650: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
6660: 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63  Returns the spec
6670: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20  ified file name
6680: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f  as if it were lo
6690: 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20  cated in the..
66a0: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65      #       dire
66b0: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
66c0: 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69   the external bi
66d0: 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 23  naries...      #
66e0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
66f0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
6700: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 45  [file join [getE
6710: 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 79  xternalDirectory
6720: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20  ] $fileName]].. 6730: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 6740: 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e c getBinaryFileN 6750: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b ame { fileName { 6760: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b platform ""} } { 6770: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6780: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 # NOTE: Returns 6790: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 the specified f 67a0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 ile name as if i 67b0: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 t were located i 67c0: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 67d0: 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 65 binary dire 67e0: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e ctory, discardin 67f0: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 g any directory 6800: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 information pres 6810: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 6820: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e in the file n 6830: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 ame as provided 6840: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 6850: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 6860: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 eturn [file nati 6870: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 6880: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b [file join [ 6890: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f getBinaryDirecto 68a0: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 66 ry]$platform [f
68b0: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 68c0: 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d me]]].. }.... 68d0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 72 . proc getCor 68e0: 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 eBinaryFileName 68f0: 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 { {platform ""} 6900: 7b 73 74 61 6e 64 61 72 64 20 66 61 6c 73 65 7d {standard false} 6910: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 6920: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 6930: 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70 61 urns the full pa 6940: 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 th for the file 6950: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 containing the S 6960: 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 QLite core.. 6970: 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 # native 6980: 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66 6f library code fo 6990: 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e r this platform. 69a0: 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 61 First, check a 69b0: 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20 20 nd see if.. 69c0: 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c # the SQL 69d0: 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 ite core native 69e0: 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 library has alre 69f0: 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 2e ady been loaded. 6a00: 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 Next,.. # 6a10: 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b 20 fallback 6a20: 74 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c 6c to what the full 6a30: 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65 2c path should be, 6a40: 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 based on whethe 6a50: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 r the.. # 6a60: 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 mixed-mode 6a70: 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69 6e assembly is bein 6a80: 67 20 75 73 65 64 20 61 6e 64 20 74 68 65 20 6e g used and the n 6a90: 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 ame of the curre 6aa0: 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 nt.. # 6ab0: 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 platform... 6ac0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 6ad0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 6ae0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 6af0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 6b00: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 6b10: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 6b20: 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 ite.UnsafeNative 6b30: 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65 4e Methods _SQLiteN 6b40: 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65 4e ativeModuleFileN 6b50: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69 6c ame.. } fil 6b60: 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20 5b eName] == 0 && [ 6b70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
6b80: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
6b90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
6ba0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
6bb0: 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   The SQLite core
6bc0: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20   native library
6bd0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
6be0: 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 20   loaded via..
6bf0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
6c00: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20   native library
6c10: 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 74  pre-loader.  Ret
6c20: 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e 61  urn that file na
6c30: 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  me now...
6c40: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
6c50: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  rn $fileName.. 6c60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 6c70: 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 f {[hasRuntimeOp 6c80: 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 tion native]} th 6c90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 6ca0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 6cb0: 20 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65 Return the mixe 6cc0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 6cd0: 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 file name... 6ce0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6cf0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 eturn [file nati 6d00: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 6d10: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join 6d20: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 [getBinaryDirec 6d30: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 tory]$platform
6d40: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
6d50: 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20  te.dll]]..
6d60: 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 6e 64  } elseif {$stand 6d70: 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ard} then {.. 6d80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6d90: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 # NOTE: Return t 6da0: 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 he native-only s 6db0: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c tandard SQLite l 6dc0: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 ibrary file name 6dd0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 6de0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 6df0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d le nativename \. 6e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 6e10: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 le join [getBina 6e20: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c ryDirectory]$pl
6e30: 61 74 66 6f 72 6d 20 73 71 6c 69 74 65 33 2e 64  atform sqlite3.d
6e40: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ll]]..      } el
6e50: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
6e60: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
6e70: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 69   Return the nati
6e80: 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20  ve-only interop
6e90: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61  assembly file na
6ea0: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  me...        #..
6eb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
6ec0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
6ed0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
6ee0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69  file join [getBi
6ef0: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24  naryDirectory] $6f00: 70 6c 61 74 66 6f 72 6d 20 53 51 4c 69 74 65 2e platform SQLite. 6f10: 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 20 Interop.dll]].. 6f20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 6f30: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f .. proc getCo 6f40: 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b 7d mmonDirectory {} 6f50: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 6f60: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 6f70: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e procedure return 6f80: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 s the directory 6f90: 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 73 where the test s 6fa0: 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23 20 cripts.. # 6fb0: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 should be 6fc0: 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 located. By def 6fd0: 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 ault, this just 6fe0: 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 67 6c returns the Eagl 6ff0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 7000: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 binary director 7010: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. 7020: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 7030: 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 sts ::common_dir 7040: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 ectory] && \.. 7050: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 7060: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e length$::common
7070: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
7080: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
7090: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
70a0: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
70b0: 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 64   of the common d
70c0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
70d0: 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20  n set;..
70e0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
70f0: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
7100: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
7110: 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f  eturn $::common_ 7120: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 7130: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 7140: 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f 72 exists ::vendor 7150: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 7160: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 7170: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76 65 ing length$::ve
7180: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20  ndor_directory]
7190: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
71a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
71b0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
71c0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e 64  tion of the vend
71d0: 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  or directory has
71e0: 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20   been set;..
71f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
7200: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
7210: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7220: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 6e     return $::ven 7230: 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 dor_directory.. 7240: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 7250: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc 7260: 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c 0d l_library] && \. 7270: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 7280: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63 6c ng length$::tcl
7290: 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 26  _library] > 0 &&
72a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66   \..          [f
72b0: 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20  ile isdirectory
72c0: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 7d  $::tcl_library]} 72d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 72e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 72f0: 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c 65 TE: The variable 7300: 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74 69 with the locati 7310: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70 74 on of the script 7320: 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20 20 library is.. 7330: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 # set 7340: 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f 20 and appears to 7350: 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 63 74 be a real direct 7360: 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65 6d ory (i.e. not em 7370: 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20 20 bedded.. 7380: 23 20 20 20 20 20 20 20 77 69 74 68 69 6e 20 61 # within a 7390: 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f 72 file); therefor 73a0: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 e, use it... 73b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 73c0: 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69 62 eturn$::tcl_lib
73d0: 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  rary..      } el
73e0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
73f0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
7400: 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65   Fallback to the
7410: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
7420: 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 74  ining the execut
7430: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  able...        #
7440: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
7450: 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a   [info binary]..
7460: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
7470: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44  ...    proc getD
7480: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
7490: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
74a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
74b0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
74c0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f  urns the directo
74d0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73  ry where the tes
74e0: 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 20  t databases..
74f0: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c     #       shoul
7500: 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42  d be located.  B
7510: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20  y default, this
7520: 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65  just uses the te
7530: 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23  mporary..      #
7540: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
7550: 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20   configured for
7560: 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20  this system...
7570: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
7580: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
7590: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f  database_directo
75a0: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
75b0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
75c0: 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64  th $::database_d 75d0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 75e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 75f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 7600: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 7610: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64 f the database d 7620: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 7630: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 7640: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 7650: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 7660: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 7670: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
7680: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f  database_directo
7690: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
76a0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
76b0: 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63   ::scratch_direc
76c0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
76d0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
76e0: 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f  ngth $::scratch_ 76f0: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 directory] > 0} 7700: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7710: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7720: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 E: The location 7730: 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20 64 of the scratch d 7740: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 7750: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 7760: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 7770: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 7780: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 7790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
77a0: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72  scratch_director
77b0: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  y..      } else
77c0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
77d0: 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50  n [getTemporaryP
77e0: 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ath]..      }..
77f0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
7800: 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69  c getTemporaryDi
7810: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
7820: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
7830: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
7840: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
7850: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
7860: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  the temporary fi
7870: 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  les..      #
7880: 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63     should be loc
7890: 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c  ated.  By defaul
78a0: 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65  t, this just use
78b0: 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d  s the temporary.
78c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
78d0: 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75  irectory configu
78e0: 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73  red for this sys
78f0: 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  tem...      #..
7900: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
7910: 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 72  xists ::temporar
7920: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  y_directory] &&
7930: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
7940: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74  ring length $::t 7950: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f emporary_directo 7960: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ry] > 0} then {. 7970: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 7980: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 7990: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 79a0: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 79b0: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 ory has been ove 79c0: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 rridden;.. 79d0: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 79e0: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 79f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7a00: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70 6f return$::tempo
7a10: 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a  rary_directory..
7a20: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
7a30: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73  [info exists ::s
7a40: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
7a50: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
7a60: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
7a70: 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65   $::scratch_dire 7a80: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 7a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 7aa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 7ab0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 7ac0: 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65 63 he scratch direc 7ad0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 tory has been ov 7ae0: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 erridden;.. 7af0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 # there 7b00: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 fore, use it... 7b10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7b20: 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 return$::scra
7b30: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  tch_directory..
7b40: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
7b50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67         return [g
7b60: 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d  etTemporaryPath]
7b70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
7b80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
7b90: 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20  tExecuteOnSetup
7ba0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b  {} {..      if {
7bb0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65  [info exists ::e
7bc0: 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d  xecute_on_setup]
7bd0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
7be0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
7bf0: 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65  $::execute_on_se 7c00: 74 75 70 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b tup] > 0} then { 7c10: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 7c20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 7c30: 75 72 6e 20 74 68 65 20 63 6f 6e 66 69 67 75 72 urn the configur 7c40: 65 64 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74 ed SQL to execut 7c50: 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e e during the con 7c60: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 nection.. 7c70: 20 23 20 20 20 20 20 20 20 73 65 74 75 70 20 70 # setup p 7c80: 72 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66 rocedure (i.e. f 7c90: 6f 72 20 65 76 65 72 79 20 74 65 73 74 20 64 61 or every test da 7ca0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio 7cb0: 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n)... #.. 7cc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
7cd0: 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74  ::execute_on_set
7ce0: 75 70 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  up..      } else
7cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
7d00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
7d10: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 72 65  y default, there
7d20: 20 69 73 20 6e 6f 20 53 51 4c 20 74 6f 20 65 78   is no SQL to ex
7d30: 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 65  ecute during the
7d40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..
7d50: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74       #       set
7d60: 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 2e  up procedure (i.
7d70: 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 73  e. for every tes
7d80: 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  t database conne
7d90: 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20  ction)...
7da0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
7db0: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn ""..      }..
7dc0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
7dd0: 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 72 69  oc getTestOverri
7de0: 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65  desPreamble { {e
7df0: 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d  xtraVarNames ""}
7e00: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
7e10: 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d  varNames [list].
7e20: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7e30: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61    # NOTE: If ava
7e40: 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69  ilable, start wi
7e50: 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69  th the master li
7e60: 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72  st of test overr
7e70: 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ide..      #
7e80: 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20     variables...
7e90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
7ea0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
7eb0: 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d  :test_overrides]
7ec0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
7ed0: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73   [llength $::tes 7ee0: 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30 t_overrides] > 0 7ef0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7f00: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 eval lappend v 7f10: 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f arNames$::test_
7f20: 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20  overrides..
7f30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
7f40: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
7f50: 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72  requested by our
7f60: 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79   caller, add any
7f70: 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69   additional vari
7f80: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20  able..      #
7f90: 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70      names to cop
7fa0: 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  y now...      #.
7fb0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e  .      if {[llen
7fc0: 67 74 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d  gth $extraVarNam 7fd0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d es] > 0} then {. 7fe0: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 . eval la 7ff0: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 ppend varNames$
8000: 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20  extraVarNames..
8010: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
8020: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
8030: 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 69 70   Build the scrip
8040: 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65  t fragment to be
8050: 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f   returned by pro
8060: 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20  cessing each..
8070: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69      #       vari
8080: 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64  able name and ad
8090: 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73  ding the nececes
80a0: 73 61 72 79 20 73 63 72 69 70 74 20 66 72 61 67  sary script frag
80b0: 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20  ments for..
80c0: 20 23 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e   #       each on
80d0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
80e0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22     set result ""
80f0: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  ....      foreac
8100: 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61  h varName $varNa 8110: 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 mes {.. # 8120: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 8130: 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c : Build the qual 8140: 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 ified global var 8150: 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 iable name... 8160: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8170: 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20 set fullVarName 8180: 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24 [appendArgs ::$
8190: 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  varName]....
81a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
81b0: 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20   NOTE: Does the
81c0: 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 20 69  variable exist i
81d0: 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74  n this interpret
81e0: 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20  er context?..
81f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8200: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
8210: 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20   $fullVarName]} 8220: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8230: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 8240: 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20 NOTE: Append a 8250: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment 8260: 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 to the result th 8270: 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c at will correctl 8280: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 y.. # 8290: 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f copy any co 82a0: 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f ntained value to 82b0: 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72 another interpr 82c0: 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 eter context... 82d0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 82e0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 append res 82f0: 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66 ult \n "set "$f
8300: 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22  ullVarName " \{"
8310: 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e 61   [set $fullVarNa 8320: 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20 20 me] \}.. 8330: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 8340: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 8350: 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65 73 75 OTE: If the resu 8360: 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 lt contains one 8370: 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20 66 or more script f 8380: 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e 64 ragments, append 8390: 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 a.. # 83a0: 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20 20 newline... 83b0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 83c0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 string length$r
83d0: 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 6e  esult] > 0} then
83e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
83f0: 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 20  nd result \n..
8400: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
8410: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20  eturn $result.. 8420: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 8430: 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72 c getAppDomainPr 8440: 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78 eamble { {prefix 8450: 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d ""} {suffix ""} 8460: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 8470: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 8480: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 8490: 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70 rns a test setup 84a0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment 84b0: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20 suitable for.. 84c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61 # eva 84d0: 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e luation by an in 84e0: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65 terpreter create 84f0: 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64 d in an isolated 8500: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 application.. 8510: 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61 # doma 8520: 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 20 in. The script 8530: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 fragment being r 8540: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 eturned will be 8550: 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20 surrounded by.. 8560: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 8570: 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 66 prefix and suff 8580: 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d ix "script fragm 8590: 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20 ents" specified 85a0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a by our caller,.. 85b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66 # if 85c0: 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72 any. The entir 85d0: 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72 e script being r 85e0: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 eturned will be 85f0: 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 0d substituted via. 8600: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ 8610: 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63 subst], in the c 8620: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 ontext of our ca 8630: 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69 ller, before bei 8640: 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 ng returned... 8650: 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73 # This 8660: 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 61 step is necessa 8670: 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 ry so that some 8680: 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20 limited context 8690: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 information,.. 86a0: 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69 6d # prim 86b0: 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f arily related to 86c0: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 the testing dir 86d0: 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65 ectories, can be 86e0: 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20 transferred.. 86f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 # to t 8700: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 he interpreter i 8710: 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61 n the isolated a 8720: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 pplication domai 8730: 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20 n, making it.. 8740: 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c 65 # able 8750: 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 to successfully 8760: 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 20 run tests that 8770: 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d require one or m 8780: 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 ore of the.. 8790: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 # files 87a0: 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65 in one of the te 87b0: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 sting directorie 87c0: 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75 s. Callers shou 87d0: 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20 ld keep in.. 87e0: 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74 # mind t 87f0: 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63 72 hat the test scr 8800: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 ipt fragment bei 8810: 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e ng returned cann 8820: 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 ot rely on.. 8830: 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 63 # any sc 8840: 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f ript library pro 8850: 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72 65 cedures that are 8860: 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79 not provided by 8870: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 the Eagle.. 8880: 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 # librar 8890: 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20 y package (i.e. 88a0: 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69 "init.eagle"), i 88b0: 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70 ncluding those p 88c0: 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20 rovided by.. 88d0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45 61 # the Ea 88e0: 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 gle test package 88f0: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c , unless the fil 8900: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 e containing the 8910: 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 m is loaded.. 8920: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 # manua 8930: 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68 lly via some oth 8940: 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e er mechanism (e. 8950: 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20 g. by including 8960: 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 appropriate.. 8970: 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b # [pack 8980: 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20 age require] or 8990: 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 [source] command 89a0: 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 20 s in the prefix 89b0: 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20 or suffix.. 89c0: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 # script 89d0: 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73 fragments). Als 89e0: 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20 o, all variable 89f0: 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61 references and a 8a00: 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20 ll nested.. 8a10: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 # command 8a20: 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e s (i.e. those in 8a30: 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 square brackets 8a40: 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 ) contained in t 8a50: 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20 he final.. 8a60: 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66 # script f 8a70: 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64 ragment will end 8a80: 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 up being evalua 8a90: 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 ted in the conte 8aa0: 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 xt of the.. 8ab0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67 # calling 8ac0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64 interpreter and 8ad0: 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 20 not the target 8ae0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 interpreter crea 8af0: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 ted in the.. 8b00: 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74 # isolat 8b10: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 ed application d 8b20: 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65 omain unless the 8b30: 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e dollar signs an 8b40: 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20 d/or square.. 8b50: 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63 6b # brack 8b60: 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c ets are speciall 8b70: 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 61 y quoted with ba 8b80: 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20 ckslashes... 8b90: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur 8ba0: 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 n [uplevel 1 [li 8bb0: 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64 st subst [append 8bc0: 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a Args$prefix {..
8bd0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
8be0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61  RuntimeOption na
8bf0: 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tive]} then {..
8c00: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
8c10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
8c20: 65 20 5c 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d  e $object$ com
8c30: 6d 61 6e 64 20 6d 61 79 20 62 65 20 6d 69 73 73  mand may be miss
8c40: 69 6e 67 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c  ing in some Eagl
8c50: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20  e core..
8c60: 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72    #       librar
8c70: 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  y configurations
8c80: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
8c90: 20 77 65 20 63 61 6e 6e 6f 74 20 63 6f 70 79 20   we cannot copy
8ca0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  the..          #
8cb0: 20 20 20 20 20 20 20 22 6e 61 74 69 76 65 22 20         "native"
8cc0: 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0d  runtime option..
8cd0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
8ce0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
8cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
8d00: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
8d10: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
8d20: 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f   AddRuntimeOptio
8d30: 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  n native..
8d40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
8d50: 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 54 65  ..      } [getTe
8d60: 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d  stOverridesPream
8d70: 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 20 74  ble [list path t
8d80: 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 73  est_channel]] $s 8d90: 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d uffix]]].. }. 8da0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try 8db0: 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 CopyExternalFile 8dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 8dd0: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f fileName {platfo 8de0: 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e rm ""} {newFileN 8df0: 61 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 ame ""} {verbose 8e00: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 8e10: 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c set sourceFil 8e20: 65 4e 61 6d 65 20 5b 67 65 74 45 78 74 65 72 6e eName [getExtern 8e30: 61 6c 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 alFileName$file
8e40: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  Name]....      i
8e50: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
8e60: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 8e70: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 8e80: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
8e90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8ea0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 8eb0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 8ec0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 8ed0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip 8ee0: 70 65 64 20 63 6f 70 79 69 6e 67 20 65 78 74 65 ped copying exte 8ef0: 72 6e 61 6c 20 66 69 6c 65 20 5c 22 22 20 24 73 rnal file \""$s
8f00: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
8f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
8f20: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
8f30: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
8f40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
8f50: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  turn..      }...
8f60: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
8f70: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69  ng length $newFi 8f80: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 leName] > 0} the 8f90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 8fa0: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 targetFileName 8fb0: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 8fc0: 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 me$newFileName
8fd0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20  $platform].. 8fe0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 8ff0: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 set targetFi 9000: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 leName [getBinar 9010: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
9020: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. 9030: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 9040: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 set targetDirec 9050: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 tory [file dirna 9060: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 me$targetFileNa
9070: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me]....      if
9080: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
9090: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
90a0: 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65  ists $targetDire 90b0: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 90c0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d file m 90d0: 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 kdir$targetDire
90e0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d  ctory..        }
90f0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63  ..        file c
9100: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72  opy -force $sour 9110: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 ceFileName$targ
9120: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  etFileName..
9130: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20    }] == 0} then
9140: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
9150: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 9160: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 9170: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 9180: 2d 20 63 6f 70 69 65 64 20 65 78 74 65 72 6e 61 - copied externa 9190: 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 l file from \"" 91a0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
91b0: 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20  "\" to \"" \..
91c0: 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65            $targe 91d0: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d tFileName \"\n]. 91e0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 91f0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
9200: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
9210: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
9220: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
9230: 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 65  failed to copy e
9240: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f  xternal file fro
9250: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil 9260: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 9270: 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 "\" to \"" 9280: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
9290: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  \"\n]..      }..
92a0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
92b0: 6f 63 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79  oc tryCopyBinary
92c0: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  File {..
92d0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c      fileName {pl
92e0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46  atform ""} {newF
92f0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72  ileName ""} {ver
9300: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  bose false} } {.
9310: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
9320: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69  eFileName [getBi
9330: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 9340: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
9350: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  ]....      if {!
9360: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f  [file exists $so 9370: 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 urceFileName]} t 9380: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 9390: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
93a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
93b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 93c0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 93d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 93e0: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped 93f0: 63 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66 copying binary f 9400: 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 ile \""$sourceF
9410: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
9420: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
9430: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
9440: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
9450: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
9460: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
9470: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
9480: 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  gth $newFileName 9490: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 94a0: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 set targe 94b0: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 tFileName [getBu 94c0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 ildFileName$new
94d0: 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  FileName $platfo 94e0: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 rm].. } els 94f0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set 9500: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 targetFileName 9510: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 9520: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 e$fileName $pla 9530: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d tform].. }. 9540: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 ... set tar 9550: 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 getDirectory [fi 9560: 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 le dirname$targ
9570: 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20  etFileName]....
9580: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
9590: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
95a0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 61  [file exists $ta 95b0: 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 rgetDirectory]} 95c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 95d0: 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 file mkdir$ta
95e0: 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20  rgetDirectory..
95f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9600: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72    file copy -for
9610: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  ce $sourceFileNa 9620: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 me$targetFileNa
9630: 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20  me..      }] ==
9640: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9650: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 9660: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 9670: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 9680: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 "---- copied 9690: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f binary file fro 96a0: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c m \""$sourceFil
96b0: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22  eName "\" to \""
96c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
96d0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20  $targetFileName 96e0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e 96f0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 9700: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
9710: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
9720: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9730: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to
9740: 63 6f 70 79 20 62 69 6e 61 72 79 20 66 69 6c 65  copy binary file
9750: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63   from \"" $sourc 9760: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 eFileName \.. 9770: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 "\" to 9780: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e \""$targetFileN
9790: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
97a0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
97b0: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 75    proc tryCopyBu
97c0: 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20  ildFile {..
97d0: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20         fileName
97e0: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e  {platform ""} {n
97f0: 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b  ewFileName ""} {
9800: 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d  verbose false} }
9810: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f   {..      set so
9820: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65  urceFileName [ge
9830: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $9840: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
9850: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
9860: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $9870: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d sourceFileName]} 9880: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9890: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
98a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
98b0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 98c0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 98d0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 98e0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 "---- skippe 98f0: 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 20 d copying build 9900: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 file \""$source
9910: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
9920: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
9930: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
9940: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
9950: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
9960: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
9970: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
9980: 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d  ngth $newFileNam 9990: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 99a0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 set targ 99b0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 etFileName [getB 99c0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e inaryFileName$n
99d0: 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74  ewFileName $plat 99e0: 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 form].. } e 99f0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 lse {.. s 9a00: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d et targetFileNam 9a10: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 e [getBinaryFile 9a20: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 Name$fileName $9a30: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 platform].. 9a40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set 9a50: 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 targetDirectory 9a60: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 [file dirname$t
9a70: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a  argetFileName]..
9a80: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
9a90: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  ch {..        if
9aa0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
9ab0: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79  $targetDirectory 9ac0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 9ad0: 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 file mkdir 9ae0: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79$targetDirectory
9af0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
9b00: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d       file copy -
9b10: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c  force $sourceFil 9b20: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c eName$targetFil
9b30: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20  eName..      }]
9b40: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
9b50: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 9b60: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 9b70: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 9b80: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 "---- cop 9b90: 69 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 66 ied build file f 9ba0: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 rom \""$sourceF
9bb0: 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c  ileName "\" to \
9bc0: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
9bd0: 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d    $targetFileNam 9be0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } 9bf0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 9c00: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
9c10: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
9c20: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
9c30: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74    "---- failed t
9c40: 6f 20 63 6f 70 79 20 62 75 69 6c 64 20 66 69 6c  o copy build fil
9c50: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72  e from \"" $sour 9c60: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. 9c70: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f "\" to 9c80: 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 \""$targetFile
9c90: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
9ca0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
9cb0: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74     proc tryDelet
9cc0: 65 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69  eBinaryFile { fi
9cd0: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d  leName {platform
9ce0: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61   ""} {verbose fa
9cf0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
9d00: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65  set fileName [ge
9d10: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
9d20: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
9d30: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
9d40: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
9d50: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 9d60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 9d70: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
9d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
9d90: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 9da0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 9db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 9dc0: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c ---- skipped del 9dd0: 65 74 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c eting binary fil 9de0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
9df0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9e00: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
9e10: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
9e20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
9e30: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
9e40: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
9e50: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
9e60: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20   $fileName}] == 9e70: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 9e80: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
9e90: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
9ea0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
9eb0: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65      "---- delete
9ec0: 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22  d binary file \"
9ed0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n 9ee0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 9ef0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 9f00: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
9f10: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
9f30: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  - failed to dele
9f40: 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  te binary file \
9f50: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ 9f60: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 9f70: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 9f80: 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 9f90: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 le { fileName {p 9fa0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 latform ""} {ver 9fb0: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d bose false} } {. 9fc0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 9fd0: 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ame [getBuildFil 9fe0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
9ff0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20  $platform].... a000: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e a010: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
a020: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a030: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20    if {$verbose} a040: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a050: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
a060: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
a070: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
a080: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
a090: 65 64 20 64 65 6c 65 74 69 6e 67 20 62 75 69 6c  ed deleting buil
a0a0: 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  d file \"" $file a0b0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. a0c0: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do a0d0: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] a0e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. a0f0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 return.. a100: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if a110: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d a120: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
a130: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
a140: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: a150: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a a160: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. a170: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d a180: 65 6c 65 74 65 64 20 62 75 69 6c 64 20 66 69 6c eleted build fil a190: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
a1a0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
a1b0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
a1c0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha a1d0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs a1e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a1f0: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to a200: 64 65 6c 65 74 65 20 62 75 69 6c 64 20 66 69 6c delete build fil a210: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
a220: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  \"\n]..      }..
a230: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
a240: 6f 63 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62  oc tryCopyAssemb
a250: 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ly {..
a260: 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74    fileName {plat
a270: 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72  form ""} {pdb tr
a280: 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c  ue} {verbose fal
a290: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  se} } {..      t
a2a0: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
a2b0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
a2c0: 6f 72 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d  orm "" $verbose. a2d0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 ... if {$pd
a2e0: 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  b} then {..
a2f0: 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46     tryCopyBuildF
a300: 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ile [appendArgs
a310: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
a320: 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66  file rootname $f a330: 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 ileName] .pdb]$
a340: 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72  platform "" $ver a350: 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 bose.. }.. a360: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro a370: 63 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d c tryDeleteAssem a380: 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 bly {.. a390: 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 fileName {pla a3a0: 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 tform ""} {pdb t a3b0: 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 rue} {verbose fa a3c0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. a3d0: 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 tryDeleteBinaryF a3e0: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ile$fileName $p a3f0: 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 latform$verbose
a400: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70  ....      if {$p a410: 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 db} then {.. a420: 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e tryDeleteBin a430: 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 aryFile [appendA a440: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. a450: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d [file rootnam a460: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 e$fileName] .pd
a470: 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65  b] $platform$ve
a480: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  rbose..      }..
a490: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
a4a0: 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62  oc tryLoadAssemb
a4b0: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70  ly { fileName {p
a4c0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d  latform ""} } {.
a4d0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
a4e0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
a4f0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName a500: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
a510: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
a520: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61  {..        set a
a530: 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 20  ssembly [object
a540: 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 46  load -loadtype F
a550: 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c 65  ile -alias $file a560: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 20 Name].. }] a570: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. a580: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. a590: 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 # NOTE: Now, ad a5a0: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 d the necessary a5b0: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e test constraint. a5c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a5d0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai a5e0: 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d nt [file rootnam a5f0: 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 e [file tail$fi
a600: 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20  leName]]....
a610: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
a620: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the
a630: 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
a640: 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61  rsion from the a
a650: 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 0d  ssembly because.
a660: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
a670: 20 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 72   several tests r
a680: 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e 67  ely on it having
a690: 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 65   a certain value
a6a0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
a6b0: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
a6c0: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
a6d0: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65  [file tail $file a6e0: 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 Name] _ \.. a6f0: 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62 6c [$assembl
a700: 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  y ImageRuntimeVe
a710: 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20  rsion]]....
a720: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
a730: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
a740: 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 68   full path of th
a750: 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a  e loaded file...
a760: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a770: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e     return $fileN a780: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a ame.. }.... a790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". a7a0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p a7b0: 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61 64 roc isSQLiteRead a7c0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. a7d0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T a7e0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 75 his procedure mu a7f0: 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 st return non-ze a800: 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 ro only if the S a810: 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 QLite native.. a820: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 # libr a830: 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 73 74 ary and the Syst a840: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d em.Data.SQLite m a850: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 anaged assembly a860: 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 are loaded.. a870: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 # and re a880: 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 ady for use by t a890: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 20 20 he test suite. a8a0: 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 Currently, this a8b0: 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20 procedure.. a8c0: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 # should a8d0: 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 be called only a a8e0: 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 fter the [tryLoa a8f0: 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 dAssembly] proce a900: 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20 20 dure has.. a910: 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 61 6c # been cal a920: 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 led to probe for a930: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 the System.Data a940: 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 .SQLite managed a950: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 assembly.. a960: 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 # and the a970: 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d [checkForSQLite] a980: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 62 procedure has b a990: 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 een called to pr a9a0: 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 obe for.. # a9b0: 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 the SQLit a9c0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library a9d0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69 ; otherwise, thi a9e0: 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c 6c s procedure will a9f0: 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 simply.. # aa00: 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 72 65 always re aa10: 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 turn zero... aa20: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur aa30: 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 n [expr {.. aa40: 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 [haveConstrai aa50: 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt System.Data.S aa60: 51 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65 43 QLite] && [haveC aa70: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 onstraint SQLite aa80: 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 ].. }].. aa90: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc aaa0: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 7b 20 70 matchMachine { p aab0: 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20 latform } {.. aac0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO aad0: 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 TE: An empty str aae0: 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c 61 74 ing for the plat aaf0: 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61 74 20 form means that ab00: 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e 6f 74 the build is not ab10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # ab20: 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e 61 [primarily] a na ab30: 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68 65 72 tive build; ther ab40: 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61 79 73 efore, it always ab50: 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20 20 20 matches... ab60: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s ab70: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c tring length$pl
ab80: 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68  atform] == 0} th
ab90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
aba0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
abb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
abc0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65       # NOTE: Doe
abd0: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified
abe0: 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 75  platform match u
abf0: 70 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  p to the current
ac00: 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 20   process?..
ac10: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70   #..      if {$p ac20: 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63 68 latform eq [mach ac30: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a ineToPlatform$:
ac40: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61  :tcl_platform(ma
ac50: 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  chine)]} then {.
ac60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
ac70: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
ac80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
ac90: 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 63  # NOTE: The spec
aca0: 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 64  ified platform d
acb0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 70  oes not match up
acc0: 20 77 69 74 68 20 74 68 65 20 70 6c 61 74 66 6f   with the platfo
acd0: 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  rm..      #
ace0: 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e    for the curren
acf0: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...
ad00: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
ad10: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
ad20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65  ...    proc have
ad30: 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
ad40: 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  and {} {..
ad50: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
ad60: 20 49 73 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d   Is the [object]
ad70: 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72 65 6e 74   command current
ad80: 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20  ly available?..
ad90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
ada0: 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c 65  turn [expr {[lle
adb0: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61  ngth [info comma
adc0: 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30  nds object]] > 0
add0: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  }]..    }.....
ade0: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
adf0: 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
ae00: 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b  nd { channel } {
ae10: 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63  ..      tputs $c ae20: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 hannel "---- che ae30: 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f 62 6a 65 cking for \"obje ae40: 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 75 73 61 ct\" command usa ae50: 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 ge... ".... ae60: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis ae70: 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 4f 62 ts ::no(sqliteOb ae80: 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d 20 26 26 jectCommand)] && ae90: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 \.. [h aea0: 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC aeb0: 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d ommand]} then {. aec0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
aed0: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20  channel yes\n..
aee0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
aef0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
af00: 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 73 73    # NOTE: Unless
af10: 20 77 65 20 61 72 65 20 66 6f 72 62 69 64 64 65   we are forbidde
af20: 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20 73 6f 2c  n from doing so,
af30: 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e 73 74 72   add some constr
af40: 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 23  aints..        #
af50: 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c         that will
af60: 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 20 74   allow most of t
af70: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 74 6f  he test suite to
af80: 20 72 75 6e 20 28 69 2e 65 2e 20 74 68 6f 73 65   run (i.e. those
af90: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
afa0: 20 20 74 65 73 74 73 20 74 68 61 74 20 64 6f 20    tests that do
afb0: 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 72 65 6c  not directly rel
afc0: 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f 62 6a 65  y upon the [obje
afd0: 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20  ct] command)...
afe0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
aff0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
b000: 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c  sts ::no(shimSQL
b010: 69 74 65 41 73 73 65 6d 62 6c 79 43 6f 6e 73 74  iteAssemblyConst
b020: 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b  raints)]} then {
b030: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
b040: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65  onstraint SQLite
b050: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
b060: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65  onstraint SQLite
b070: 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20  Interop..
b080: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
b090: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
b0a0: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61  ite..          a
b0b0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73  ddConstraint Sys
b0c0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
b0d0: 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20  Encryption..
b0e0: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
b0f0: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
b100: 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d 0a 20  SQLite.Linq....
b110: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73           addCons
b120: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
b130: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
b140: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
b150: 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b 67 65  SQLite.dll_v [ge
b160: 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e  tBuildClrVersion
b170: 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ]]..        }...
b180: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
b190: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
b1a0: 73 68 69 6d 53 51 4c 69 74 65 44 65 66 69 6e 65  shimSQLiteDefine
b1b0: 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74 72 61 69  ConstantConstrai
b1c0: 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  nts)]} then {..
b1d0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
b1e0: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20   defineConstant
b1f0: 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
b200: 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45         INTEROP_E
b210: 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f  XTENSION_FUNCTIO
b220: 4e 53 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f  NS INTEROP_TEST_
b230: 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20  EXTENSION \..
b240: 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52             INTER
b250: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
b260: 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c   USE_INTEROP_DLL
b270: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..
b280: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
b290: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
b2b0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
b2c0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
b2d0: 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74   $defineConstant b2e0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. b2f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... b300: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info b310: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d exists ::no(shim b320: 53 51 4c 69 74 65 56 69 73 75 61 6c 53 74 75 64 SQLiteVisualStud b330: 69 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d ioConstraints)]} b340: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b350: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint b360: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 76 69 73 [appendArgs vis b370: 75 61 6c 53 74 75 64 69 6f 20 5b 67 65 74 42 75 ualStudio [getBu b380: 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20 20 ildYear]].. b390: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... b3a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
b3b0: 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  o\n..      }..
b3c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
b3d0: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42   checkForSQLiteB
b3e0: 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20  uilds { channel
b3f0: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d  {select false} }
b400: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
b410: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
b420: 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69   for every possi
b430: 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e  ble valid combin
b440: 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20  ation of values
b450: 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20  used when..
b460: 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e   #       locatin
b470: 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20  g out the build
b480: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79  output directory
b490: 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61  , showing each a
b4a0: 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..
b4b0: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61  #       build va
b4c0: 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68  riation along th
b4d0: 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d  e way...      #.
b4e0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e  .      foreach n
b4f0: 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73  ative [list fals
b500: 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20  e true] {..
b510: 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20     foreach year
b520: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20  [getBuildYears]
b530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  {..          for
b540: 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69  each configurati
b550: 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66  on [getBuildConf
b560: 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20  igurations] {..
b570: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
b580: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
b590: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65  : Figure out the
b5a0: 20 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64   effective build
b5b0: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73   platform.  This
b5c0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..
b5d0: 20 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f   #       based o
b5e0: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
b5f0: 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e   a [primarily] n
b600: 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20  ative build..
b610: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
b620: 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20   is being used.
b630: 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d   For [primarily]
b640: 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c   non-native buil
b650: 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ds,..
b660: 20 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69   #       this wi
b670: 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73  ll be an empty s
b680: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  tring...
b690: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
b6a0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
b6b0: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  [getBuildPlatfor
b6c0: 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20  m $native].... b6d0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs b6e0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
b6f0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
b700: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
b710: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
b720: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
b730: 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d  ild \"" [expr \.
b740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
b750: 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74   {$native ? "nat b760: 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 ive/" : ""}] [ex b770: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng b780: 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 th \.. b790: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d$platform]
b7a0: 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72   > 0 ? [appendAr
b7b0: 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20  gs $platform /] b7c0: 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a : ""}]$year \..
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b7e0: 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  / $configuration b7f0: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 "\"... "].... b800: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. b810: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: b820: 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 Build the fully b830: 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 qualified direc b840: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e tory where the n b850: 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 ecessary.. b860: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co b870: 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 mponents for Sys b880: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite b890: 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e should be found. b8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. b8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set b8c0: 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e directory [join b8d0: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 BuildDirectory$
b8e0: 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20  native \..
b8f0: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
b900: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79  ildBaseDirectory
b910: 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72  ] $year$platfor
b920: 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  m $configuration b930: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... b940: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. b950: 23 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e # NOTE: Do the n b960: 65 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 ecessary files e b970: 78 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 xist? Currently b980: 2c 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 , no other steps b990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # b9a0: 20 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 are taken b9b0: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62 to verify this b b9c0: 75 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 uild is actually b9d0: 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 viable... b9e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. b9f0: 20 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c if {[isBuil ba00: 64 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 dAvailable$nati
ba10: 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20  ve $directory]} ba20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ba30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. ba40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W ba50: 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 hen in "select" ba60: 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 mode, automatica ba70: 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 lly select the f ba80: 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 irst.. ba90: 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 # avai baa0: 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 lable build of S bab0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit bac0: 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 e and then retur bad0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. bae0: 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 # immedia baf0: 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 tely... bb00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bb10: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 if {$selec
bb20: 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69  t && [matchMachi
bb30: 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74  ne $platform]} t bb40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. bb50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. bb60: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE bb70: 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 : Manually overr bb80: 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c ide all the buil bb90: 64 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 d directory sele bba0: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 ction.. bbb0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r bbc0: 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 elated test sett bbd0: 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f ings in order to bbe0: 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c force this buil bbf0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d.. bc00: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 # of Sy bc10: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite bc20: 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 to be used... bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. bc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . bc50: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 bc70: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 object invoke I bc80: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 nterpreter.GetAc bc90: 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 tive [expr {$nat
bca0: 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20  ive ? \..
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
bcc0: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  AddRuntimeOption
bcd0: 22 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69  " : "RemoveRunti
bce0: 6d 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69  meOption"}] nati
bcf0: 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ve..
bd00: 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68      } error]} th
bd10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
bd20: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c bd30: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr bd40: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. bd50: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 2c "no, bd60: 20 66 61 69 6c 65 64 20 74 6f 20 22 20 5b 65 78 failed to " [ex bd70: 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 pr {$native ? "a
bd80: 64 64 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d  dd" : "remove"}]
bd90: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
bda0: 20 20 20 20 20 20 20 20 20 20 22 20 74 68 65 20            " the
bdb0: 5c 22 6e 61 74 69 76 65 5c 22 20 72 75 6e 74 69  \"native\" runti
bdc0: 6d 65 20 6f 70 74 69 6f 6e 2c 20 65 72 72 6f 72  me option, error
bdd0: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error bde0: 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n].... bdf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return be00: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 false.. be10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... be20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set be30: 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 79 65 61 ::test_year$yea
be40: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..
be50: 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 70 6c     set ::test_pl
be60: 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d  atform $platform be70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. be80: 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e set ::test_con be90: 66 69 67 75 72 61 74 69 6f 6e 20 24 63 6f 6e 66 figuration$conf
bea0: 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20  iguration....
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
bec0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app bed0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " bef0: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 yes, selected (" bf00: 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 [expr {$native
bf10: 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22  ? "native/" : ""
bf20: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  }] \..
bf30: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
bf40: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
bf50: 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f  $platform] > 0 ? bf60: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 bf80: 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d$platform /]
bf90: 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 2f 20   : ""}] $year / bfa0: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22$configuration "
bfb0: 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  )\n"]....
bfc0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
bfd0: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  true..
bfe0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
c000: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes c010: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \n.. c020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. c030: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. c040: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
c050: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20  channel no\n..
c060: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
c070: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
c080: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
c090: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
c0a0: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  se..    }.....
c0b0: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
c0c0: 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 7b 20  QLiteReleases {
c0d0: 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20  channel {select
c0e0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
c0f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
c100: 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 70 61 73  E: Check for pas
c110: 74 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53 79  t releases of Sy
c120: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
c130: 20 69 6e 20 74 68 65 20 64 69 72 65 63 74 6f 72   in the director
c140: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
c150: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
c160: 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  e "System.Data.S
c170: 51 4c 69 74 65 22 20 65 6e 76 69 72 6f 6e 6d 65  QLite" environme
c180: 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 69 66 0d  nt variable, if.
c190: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
c1a0: 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23  resent...      #
c1b0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
c1c0: 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 53  o exists ::env(S
c1d0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c1e0: 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  e)] && \..
c1f0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
c200: 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d  th $::env(System c210: 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 3e .Data.SQLite)] > c220: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. c230: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # c240: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the c250: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified c260: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where c270: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a the necessary.. c280: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # c290: 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 components for S c2a0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit c2b0: 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e e should be foun c2c0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. c2d0: 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 set direc c2e0: 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61 74 69 76 tory [file nativ c2f0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join c300: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c310: 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61$::env(System.Da
c320: 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 65 74 52  ta.SQLite) [getR
c330: 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 5d 5d 5d  eleaseVersion]]]
c340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ....        tput
c350: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe c360: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. c370: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec c380: 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. c390: 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 Data.SQLite rele c3a0: 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ase \"" \.. c3b0: 20 20 20 20 20 20 20 24 64 69 72 65 63 74 6f 72$director
c3c0: 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20  y "\"... "]....
c3d0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65         if {[isRe
c3e0: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24  leaseAvailable $c3f0: 64 69 72 65 63 74 6f 72 79 20 70 6c 61 74 66 6f directory platfo c400: 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 rm]} then {.. c410: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri c420: 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
c430: 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  orm] == 0} then
c440: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
c450: 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e  et platform unkn
c460: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  own..          }
c470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
c480: 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61   {$select && [ma c490: 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c 61 74 tchMachine$plat
c4a0: 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  form]} then {..
c4b0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
c4c0: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79  :build_directory
c4d0: 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20   $directory.... c4e0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs c4f0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
c500: 64 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65  dArgs "yes, sele
c510: 63 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72  cted (" $platfor c520: 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 m ")\n"].... c530: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t c540: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d rue.. } c550: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. c560: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
c570: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
c580: 22 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72  "yes (" $platfor c590: 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 m ")\n"].. c5a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } c5b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. c5c0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
c5d0: 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20  l no\n....
c5e0: 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 68      foreach path
c5f0: 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61 73   [lsort -decreas
c600: 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20 24  ing [file list $c610: 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d directory *]] {. c620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if c630: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 70 {[file exists$p
c640: 61 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69 73  ath] && [file is
c650: 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 5d  directory $path] c660: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c670: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
c680: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
c690: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
c6a0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
c6b0: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
c6c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65  m.Data.SQLite re
c6d0: 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20  lease \"" \..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $c6f0: 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a path "\"... "].. c700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c710: 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 if {[isReleaseAv c720: 61 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70 6c ailable$path pl
c730: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
c740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
c750: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
c760: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d  gth $platform] = c770: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s c790: 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e et platform unkn c7a0: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 own.. c7b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... c7c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 if {$s
c7d0: 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 4d  elect && [matchM
c7e0: 61 63 68 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d  achine $platform c7f0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set c810: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f ::build_directo c820: 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20 20 20 ry$path....
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
c840: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap c850: 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 pendArgs "yes, s c860: 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 elected ("$plat
c870: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20  form ")\n"]....
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c890: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                }
c8b0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
c8c0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c8d0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append c8e0: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c Args "yes ("$pl
c8f0: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20  atform ")\n"]..
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
c910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c920: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
c930: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c940: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. c960: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. c970: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. c980: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e c990: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t c9a0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
c9b0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c9c0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65           "---- e
c9d0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
c9e0: 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 61 74  ble \"System.Dat
c9f0: 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 6e 6f  a.SQLite\" is no
ca00: 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
ca10: 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70 69 6e     "set, skippin
ca20: 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 6c 65  g check for rele
ca30: 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 20  ases...\n"]..
ca40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
ca50: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
ca60: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
ca70: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62  heckForSQLiteLib
ca80: 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  rary { channel }
ca90: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
caa0: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c cab0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 hecking for SQLi cac0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e te core library. cad0: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 .. ".... if cae0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. caf0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok cb00: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub cb10: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. cb20: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S cb30: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 QLite.SQLite3 SQ cb40: 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 LiteVersion.. cb50: 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d } version] == cb60: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. cb70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # cb80: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if cb90: 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 the returned ver cba0: 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 sion was null. cbb0: 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 If so, make it e cbc0: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 asy.. # cbd0: 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 to spot... cbe0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. cbf0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le cc00: 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d ngth$version] =
cc10: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
cc20: 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69         set versi
cc30: 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  on null..
cc40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
cc50: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
cc60: 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72   Attempt to quer
cc70: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75  y the Fossil sou
cc80: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66  rce identifier f
cc90: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20  or the SQLite..
cca0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
ccb0: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...
ccc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ccd0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
cce0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
ccf0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
cd00: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
cd10: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
cd20: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
cd30: 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75 72 63  ite3 SQLiteSourc
cd40: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 73  eId..        } s
cd50: 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b  ourceId]} then {
cd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
cd70: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
cd80: 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75   We failed to qu
cd90: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
cda0: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
cdb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
cdc0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
cdd0: 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a  urceId unknown..
cde0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
cdf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ce00: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
ce10: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f   the returned Fo
ce20: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
ce30: 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e  tifier was null.
ce40: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20    If..        #
ce50: 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69        so, make i
ce60: 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d  t easy to spot..
ce70: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ce80: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
ce90: 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64  length $sourceId cea0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. ceb0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f set so cec0: 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 urceId null.. ced0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... cee0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N cef0: 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ cf00: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar cf10: 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 y appears to be cf20: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... cf30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 #.. a cf40: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c ddConstraint SQL cf50: 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 ite.... t cf60: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
cf70: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28  ppendArgs "yes (
cf80: 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24  " $version " "$
cf90: 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d  sourceId ")\n"].
cfa0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
cfb0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $cfc0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. cfd0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... cfe0: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF cff0: 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 orSQLiteInterop d000: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 { channel } {.. d010: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
d020: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  nel "---- checki
d030: 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e  ng for SQLite in
d040: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e  terop assembly..
d050: 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  . "....      if
d060: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
d070: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
d080: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
d090: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
d0a0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
d0b0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
d0c0: 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20  eropVersion..
d0d0: 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d     } version] ==
d0e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
d0f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
d100: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
d110: 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72  the returned ver
d120: 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20  sion was null.
d130: 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65  If so, make it e
d140: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  asy..        #
d150: 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20       to spot...
d160: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
d170: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
d180: 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d  ngth $version] = d190: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. d1a0: 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 set versi d1b0: 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 on null.. d1c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. d1d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: d1e0: 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 Attempt to quer d1f0: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou d200: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 rce identifier f d210: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 or the SQLite.. d220: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c d230: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 ore library... d240: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d250: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. d260: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object d270: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N d280: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. d290: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System d2a0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL d2b0: 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f 75 72 ite3 InteropSour d2c0: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ceId.. } d2d0: 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 sourceId]} then d2e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. d2f0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE d300: 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 : We failed to q d310: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil d320: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie d330: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. d340: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s d350: 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d ourceId unknown. d360: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... d370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d380: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i d390: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 f the returned F d3a0: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide d3b0: 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c ntifier was null d3c0: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 . If.. # d3d0: 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 so, make d3e0: 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e it easy to spot. d3f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. d400: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string d410: 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
d420: 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
d430: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
d440: 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20  ourceId null..
d450: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
d460: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
d470: 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53  NOTE: Yes, the S
d480: 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73  QLite interop as
d490: 73 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74  sembly appears t
d4a0: 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d  o be available..
d4b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
d4c0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
d4d0: 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d  t SQLiteInterop.
d4e0: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
d4f0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen d500: 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 76 dArgs "yes ("$v
d510: 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f 75 72  ersion " " $sour d520: 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 ceId ")\n"].. d530: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. d540: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
d550: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20  nel no\n..
d560: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
d570: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51   proc checkForSQ
d580: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
d590: 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d  nt { channel nam
d5a0: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  e } {..      tpu
d5b0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app d5c0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. d5d0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check d5e0: 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D d5f0: 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 69 6e ata.SQLite defin d600: 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24 e constant \""$
d610: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
d620: 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20    "\"... "]....
d630: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
d640: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
d650: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
d660: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
d670: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
d680: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
d690: 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74  ite3 DefineConst
d6a0: 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 64 65  ants..      } de
d6b0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d  fineConstants] =
d6c0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
d6d0: 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63       if {[lsearc
d6e0: 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65  h -exact -nocase
d6f0: 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74   $defineConstant d700: 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 s$name] != -1}
d710: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d720: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
d730: 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73   NOTE: Yes, this
d740: 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
d750: 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77 68 65   was enabled whe
d760: 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20  n the managed..
d770: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
d780: 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 63 6f   assembly was co
d790: 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20  mpiled...
d7a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
d7b0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  addConstraint [a
d7c0: 70 70 65 6e 64 41 72 67 73 20 64 65 66 69 6e 65  ppendArgs define
d7d0: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
d7e0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61  Data.SQLite. $na d7f0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 me].... d800: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
d810: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d  yes\n..        }
d820: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
d830: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe d840: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 l no\n.. d850: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else d860: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs d870: 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c$channel error\
d880: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..
d890: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
d8a0: 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  etDateTimeFormat
d8b0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
d8c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
d8d0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 69 6d  is procedure sim
d8e0: 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 20  ply returns the
d8f0: 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 54 69  "default" DateTi
d900: 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a  me format used..
d910: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79        #       by
d920: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
d930: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d940: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
d950: 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72  s ::datetime_for
d960: 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  mat] && \..
d970: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
d980: 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f  gth $::datetime_ d990: 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 format] > 0} the d9a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. d9b0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: d9c0: 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75 61 Return the manua d9d0: 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20 76 lly overridden v d9e0: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61 74 alue for the Dat d9f0: 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 eTime format... da00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. da10: 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 65 return$::date
da20: 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20  time_format..
da30: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
da40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
da50: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 61  # NOTE: Return a
da60: 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 69  n ISO8601 DateTi
da70: 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74  me format compat
da80: 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74 65  ible with SQLite
da90: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
daa0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
dab0: 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74 61  QLite, and suita
dac0: 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72  ble for round-tr
dad0: 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 65 0d  ipping with the.
dae0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
daf0: 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73 20   DateTime class
db00: 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
db10: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
db20: 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20   is changed,..
db30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
db40: 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79 20  rious tests may
db50: 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23  fail...        #
db60: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
db70: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a   "yyyy-MM-dd HH:
db80: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 0d  mm:ss.FFFFFFFK".
db90: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
dba0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 75  ....    proc enu
dbb0: 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20  merableToList {
dbc0: 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a  enumerable } {..
dbd0: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
dbe0: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
dbf0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
dc00: 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d  gth $enumerable] dc10: 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72 == 0 ||$enumer
dc20: 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20  able eq "null"}
dc30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
dc40: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result.. dc50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... dc60: 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 object foreach dc70: 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e 75 -alias item$enu
dc80: 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20  merable {..
dc90: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
dca0: 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 30  ength $item] > 0 dcb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. dcc0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu dcd0: 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 69 lt [$item ToStri
dce0: 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng]..        }..
dcf0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
dd00: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result. dd10: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p dd20: 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 75 roc catchAndRetu dd30: 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 61 rn { script {sta dd40: 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 7b ckTrace false} { dd50: 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 7b strict true} } { dd60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. dd70: 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 # NOTE: Evaluat dd80: 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f e the script pro dd90: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal dda0: 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e ler in their con ddb0: 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 text,.. # ddc0: 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 62 capturing b ddd0: 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 61 oth the result a dde0: 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f nd the return co ddf0: 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 de... #.. de00: 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61 set code [ca de10: 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 24 tch {uplevel 1$
de20: 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d  script} result].
de30: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
de40: 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74 68    # NOTE: Did th
de50: 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65  e script provide
de60: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20  d by our caller
de70: 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72 72  NOT raise an err
de80: 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  or?..      #..
de90: 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74 20      if {$strict dea0: 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c &&$code == 0 ||
deb0: 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63 6f   !$strict &&$co
dec0: 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d  de != 1} then {.
ded0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
dee0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63      # NOTE: Succ
def0: 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20 6c  ess.  Return a l
df00: 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74  ist with the ret
df10: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65  urn code and the
df20: 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20   result...
df30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
df40: 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20  urn [list $code df50: 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20$result]..
df60: 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63 6b  } elseif {$stack df70: 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 Trace} then {.. df80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. df90: 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 # NOTE: Failur dfa0: 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 77 e. Our caller w dfb0: 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 63 ants a full stac dfc0: 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70 6c k trace (if appl dfd0: 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 icable),.. dfe0: 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e # return dff0: 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 a list with the e000: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 return code and e010: 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 62 the result verb e020: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 atim... # e030: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return e040: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 [list$code $re e050: 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 sult].. } e e060: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # e070: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE e080: 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 : Failure. Our e090: 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20 caller does not e0a0: 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 63 want a full stac e0b0: 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 20 k trace (if.. e0c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 # app e0d0: 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 6e licable), return e0e0: 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 a list with the e0f0: 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 68 return code, th e100: 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 e error.. e110: 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 6f # code fo e120: 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 r the interprete e130: 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 r, and the error e140: 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 74 message up to t e150: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # e160: 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 20 point where e170: 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20 the stack trace e180: 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20 should start... e190: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. e1a0: 20 20 73 65 74 20 69 6e 64 65 78 20 5b 73 74 72 set index [str e1b0: 69 6e 67 20 66 69 72 73 74 20 22 20 20 20 61 74 ing first " at e1c0: 20 22 20 24 72 65 73 75 6c 74 5d 3b 20 23 20 48 "$result]; # H
e1d0: 41 43 4b 3a 20 52 65 6c 69 61 62 6c 65 3f 0d 0a  ACK: Reliable?..
e1e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
e1f0: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 3a 3a   [list $code$::
e200: 65 72 72 6f 72 43 6f 64 65 20 5b 65 78 70 72 20  errorCode [expr
e210: 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 20 3f 20  {$index != -1 ? e220: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ e230: 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 string trim [str e240: 69 6e 67 20 72 61 6e 67 65 20 24 72 65 73 75 6c ing range$resul
e250: 74 20 30 20 24 69 6e 64 65 78 5d 5d 20 3a 20 24  t 0 $index]] :$
e260: 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20  result}]]..
e270: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
e280: 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53    proc compileCS
e290: 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 20 20  harpWith {..
e2a0: 20 20 20 20 20 20 20 20 74 65 78 74 20 6d 65 6d          text mem
e2b0: 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 72 69  ory symbols stri
e2c0: 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e 61 6d  ct resultsVarNam
e2d0: 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20  e errorsVarName
e2e0: 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20  fileNames..
e2f0: 20 20 20 20 20 20 20 61 72 67 73 20 7d 20 7b 0d         args } {.
e300: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
e310: 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 77 65  # NOTE: Since we
e320: 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 75 73   are going to us
e330: 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 6e 61  e this method na
e340: 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e  me a lot, assign
e350: 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 20 20   it to a..
e360: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65  #       variable
e370: 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 23   first...      #
e380: 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64 64 20  ..      set add
e390: 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62  ReferencedAssemb
e3a0: 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20  lies.Add....
e3b0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e3c0: 45 3a 20 43 72 65 61 74 65 20 74 68 65 20 62 61  E: Create the ba
e3d0: 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76  se command to ev
e3e0: 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64 20 74  aluate and add t
e3f0: 68 65 20 70 72 6f 70 65 72 74 79 20 73 65 74 74  he property sett
e400: 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20  ings..      #
e410: 20 20 20 20 74 68 61 74 20 61 72 65 20 61 6c 6d      that are alm
e420: 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65  ost always neede
e430: 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65  d by our unit te
e440: 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20 53 79  sts (i.e. the Sy
e450: 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 20 20  stem..      #
e460: 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d 2e 44      and System.D
e470: 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 65 66  ata assembly ref
e480: 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20  erences)...
e490: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f   #..      set co
e4a0: 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20  mmand [list \..
e4b0: 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65           compile
e4c0: 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65  CSharp $text$me
e4d0: 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73  mory $symbols$s
e4e0: 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 65 72  trict results er
e4f0: 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  rors \..
e500: 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c    $add System.dl e510: 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 l$add System.Da
e520: 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74  ta.dll $add Syst e530: 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e em.Transactions. e540: 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 dll \.. e550: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c$add System.Xml
e560: 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  .dll]....      #
e570: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
e580: 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76  Add all the prov
e590: 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20  ided file names
e5a0: 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65  as assembly refe
e5b0: 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23  rences...      #
e5c0: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
e5d0: 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  fileName $fileNa e5e0: 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c mes {.. l e5f0: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 append command$
e600: 61 64 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69  add [getBinaryFi
e610: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName e620: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... e630: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N e640: 4f 54 45 3a 20 41 64 64 20 74 68 65 20 65 78 74 OTE: Add the ext e650: 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 ra arguments, if e660: 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d any, to the com e670: 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 mand to evaluate e680: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e690: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 eval lappend c e6a0: 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a ommand$args....
e6b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
e6c0: 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65   NOTE: Alias the
e6d0: 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20   compiler local
e6e0: 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f  results and erro
e6f0: 72 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20  rs variables to
e700: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
e710: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65     variable name
e720: 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75  s provided by ou
e730: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20  r caller...
e740: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
e750: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65  tring length $re e760: 73 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20 3e 20 sultsVarName] > e770: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. e780: 20 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75 upvar 1$resu
e790: 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c  ltsVarName resul
e7a0: 74 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ts..      }....
e7b0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
e7c0: 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 73 56   length $errorsV e7d0: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 arName] > 0} the e7e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv e7f0: 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e ar 1$errorsVarN
e800: 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20 20 20  ame errors..
e810: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
e820: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76        # NOTE: Ev
e830: 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74  aluate the const
e840: 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43  ructed [compileC
e850: 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61  Sharp] command a
e860: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20  nd return the..
e870: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73       #       res
e880: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ult...      #..
e890: 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61       eval $comma e8a0: 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 nd.. }..... e8b0: 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 proc isMemoryD e8c0: 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b b { fileName } { e8d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. e8e0: 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 # NOTE: Is the e8f0: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 specified databa e900: 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 se file name rea e910: 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 lly an in-memory e920: 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 database?.. e930: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur e940: 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 n [expr {$fileNa
e950: 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22  me eq ":memory:"
e960: 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
e970: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [string range $e980: 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 fileName 0 12] e e990: 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a q "file::memory: e9a0: 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "}].. }..... e9b0: 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 proc isTableI e9c0: 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e nDb { name {varN e9d0: 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 ame db} } {.. e9e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO e9f0: 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the ea00: 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia ea10: 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") ea20: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o ea30: 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # ea40: 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 caller. It ea50: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 contains the da ea60: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio ea70: 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 n handle that wi ea80: 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 ll be.. # ea90: 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 used to exe eaa0: 63 75 74 65 20 74 68 65 20 71 75 65 72 79 20 75 cute the query u eab0: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 sed to determine eac0: 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 if the named ta ead0: 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 ble is.. # eae0: 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e present in eaf0: 20 74 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d that database.. eb00: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. eb10: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
eb20: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
eb30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
eb40: 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  e the sqlite_mas
eb50: 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64 65 74  ter table to det
eb60: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61  ermine if the na
eb70: 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20  med table is..
eb80: 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73      #       pres
eb90: 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
eba0: 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ase...      #..
ebb0: 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b 0d 0a       set sql {..
ebc0: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 43          SELECT C
ebd0: 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c  OUNT(*) FROM sql
ebe0: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
ebf0: 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20   type = 'table'
ec00: 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d 0a 20  AND name = ?;..
ec10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
ec20: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
ec30: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
ec40: 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   if the named ta
ec50: 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74 2e 0d  ble is present..
ec60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
ec70: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a  return [expr {..
ec80: 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65          [sql exe
ec90: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
eca0: 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20 5b 6c  alar $db$sql [l
ecb0: 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 69 6e  ist param1 Strin
ecc0: 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d 0a 20  g $name]] > 0.. ecd0: 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a }].. }.. ece0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 69 6d ... proc trim ecf0: 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a 20 Sql { sql } {.. ed00: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 65 67 return [reg ed10: 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 2b sub -all -- {\s+ ed20: 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 } [string trim$
ed30: 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20 20 7d  sql] " "]..    }
ed40: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78  .....    proc ex
ed50: 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c 20 7b  ecuteSql { sql {
ed60: 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 7b 66  execute none} {f
ed70: 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 69 6c  ormat none} {fil
ed80: 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  eName ""} } {..
ed90: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
eda0: 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d   length $fileNam edb0: 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73 e] == 0} then {s edc0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d et fileName :mem edd0: 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74 ory:}.. set ede0: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 upDb$fileName "
edf0: 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61  " "" "" "" "" fa
ee00: 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20  lse false false
ee10: 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d 0a 0d  false db true...
ee20: 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20  .      try {..
ee30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70        return [up
ee40: 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 5c 0d  level 1 [list \.
ee50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
ee60: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
ee70: 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f 72 6d  e $execute -form ee80: 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 20 24 at$format $db$
ee90: 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 66  sql]]..      } f
eea0: 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20  inally {..
eeb0: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil eec0: 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66 eName db false f eed0: 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 alse false.. eee0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... eef0: 20 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 6c 61 proc hasNoFla ef00: 67 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e 6f 6e gs { varName non ef10: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 e } {.. upv ef20: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 66 6c ar 1$varName fl
ef30: 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ags....      if
ef40: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66  {![info exists f
ef50: 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lags]} then {..
ef60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ef70: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ue..      }....
ef80: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
ef90: 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20   length $flags] efa0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. efb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru efc0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... efd0: 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 26 26 if {$none &&
efe0: 20 24 66 6c 61 67 73 20 65 71 20 22 4e 6f 6e 65   $flags eq "None eff0: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. f000: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. f010: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f020: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. f030: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro f040: 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 c getConnectionF f050: 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d 65 20 lags { fileName f060: 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66 61 6c flags {quiet fal f070: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 se} } {.. # f080: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: f090: 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 Figure out which f0a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n f0b0: 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f ame or connectio f0c0: 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65 0d 0a n string these.. f0d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co f0e0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 nnection flags w f0f0: 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 70 70 ill actually app f100: 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69 73 20 ly to. This is f110: 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 not necessary.. f120: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 # in f130: 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63 61 75 quiet mode becau f140: 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 se this informat f150: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 ion is only used f160: 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 for logging.. f170: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and f180: 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70 6f 73 reporting purpos f190: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. f1a0: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
f1b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f1c0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
f1d0: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e  gth $fileName] > f1e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. f1f0: 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 set databa f200: 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 se [appendArgs " f210: 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 24 66 file name \""$f
f220: 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20  ileName \"]..
f230: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
f240: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61  info exists ::da
f250: 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c 0d 0a  taSource] && \..
f260: 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 61 72              ![ar
f270: 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64 61 74  ray exists ::dat
f280: 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e 20 7b  aSource]} then {
f290: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
f2a0: 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64  database [append
f2b0: 41 72 67 73 20 22 64 61 74 61 20 73 6f 75 72 63  Args "data sourc
f2c0: 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53 6f 75  e \"" $::dataSou f2d0: 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 rce \"].. f2e0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. f2f0: 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 set databas f300: 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 e <unknown>.. f310: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. f320: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. f330: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 # NOTE: Show ( f340: 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63 and log) the loc f350: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c al connection fl f360: 61 67 73 20 61 6e 64 20 74 68 65 20 61 73 73 6f ags and the asso f370: 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 ciated.. # f380: 20 20 20 20 20 20 64 61 74 61 20 73 6f 75 72 63 data sourc f390: 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d e or file name.. f3a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. f3b0: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
f3c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
f3d0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
f3e0: 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61  :no(emitLocalFla
f3f0: 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  gs)] && \..
f400: 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65         (![info e
f410: 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c  xists ::no(emitL
f420: 6f 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29  ocalFlagsIfNone)
f430: 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
f440: 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67       ![hasNoFlag
f450: 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d  s flags false])}
f460: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f470: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test f480: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append f490: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. f4a0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 "---- loca f4b0: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 l connection fla f4c0: 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 gs for "$databa
f4d0: 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  se \..
f4e0: 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78      " are: " [ex
f4f0: 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73  pr {![hasNoFlags
f500: 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20   flags false] ?
f510: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
f520: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20   [appendArgs \"
f530: 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e  $flags \"] : "<n f540: 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 one>"}] \n].. f550: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. f560: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. f570: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 # NOTE: Show ( f580: 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73 68 61 and log) the sha f590: 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 red connection f f5a0: 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a lags... #.. f5b0: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
f5c0: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
f5d0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
f5f0: 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e  t invoke System.
f600: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
f610: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 68 61  teConnection Sha
f620: 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 20 20  redFlags..
f630: 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67 73 5d    } sharedFlags]
f640: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
f650: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
f660: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
f670: 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29  emitSharedFlags)
f680: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
f690: 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78        (![info ex
f6a0: 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68  ists ::no(emitSh
f6b0: 61 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29  aredFlagsIfNone)
f6c0: 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
f6d0: 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c         ![hasNoFl
f6e0: 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 20  ags sharedFlags
f6f0: 74 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a  true])} then {..
f700: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
f710: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe f720: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. f730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . f740: 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f "---- shared co f750: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 nnection flags f f760: 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c or "$database \
f770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f780: 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72    " are: " [expr
f790: 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73   {![hasNoFlags s
f7a0: 68 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d  haredFlags true]
f7b0: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
f7c0: 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
f7d0: 73 20 5c 22 20 24 73 68 61 72 65 64 46 6c 61 67  s \" $sharedFlag f7e0: 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 s \"] : "<none>" f7f0: 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 }] \n].. f800: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e f810: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. f820: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis f830: 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 ts ::no(emitShar f840: 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a edFlags)] && \.. f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b ![ f860: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no f870: 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 (emitSharedFlags f880: 49 66 55 6e 61 76 61 69 6c 61 62 6c 65 29 5d 7d IfUnavailable)]} f890: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f8a0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
f8b0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
f8c0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
f8d0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
f8e0: 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f  shared connectio
f8f0: 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64  n flags for " $d f900: 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 atabase \.. f910: 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 " are f920: 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e 5c : <unavailable>\ f930: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } f940: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. f950: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. f960: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S f970: 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 how (and log) th f980: 65 20 64 65 74 65 63 74 65 64 20 67 6c 6f 62 61 e detected globa f990: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 l connection fla f9a0: 67 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 gs, if any... f9b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { f9c0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
f9d0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
f9e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
f9f0: 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 29  emitGlobalFlags)
fa00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
fa10: 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73      (![info exis
fa20: 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62  ts ::no(emitGlob
fa30: 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20  alFlagsIfNone)]
fa40: 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
fa50: 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20     ![hasNoFlags
fa60: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
fa70: 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e  gs false])} then
fa80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
fa90: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan faa0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs fab0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. fac0: 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f "---- global co fad0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 nnection flags a fae0: 72 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 re: " \.. faf0: 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 21 5b [expr {![ fb00: 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e hasNoFlags ::con fb10: 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 nection_flags fa fb20: 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 lse] ? \.. fb30: 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA fb40: 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 rgs \"$::connec
fb50: 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20 3a  tion_flags \"] :
fb60: 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d   "<none>"}] \n].
fb70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
fb80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
fb90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
fba0: 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67   there are any g
fbb0: 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20  lobal (per test
fbc0: 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  run) connection
fbd0: 66 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d  flags currently.
fbe0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
fbf0: 65 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77  et, use them now
fc00: 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e   (i.e. by combin
fc10: 69 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68  ing them with th
fc20: 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d  e ones for this.
fc30: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
fc40: 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20  onnection)...
fc50: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
fc60: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
fc70: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d  onnection_flags]
fc80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
fc90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
fca0: 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64  OTE: Combine and
fcb0: 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20  /or replace the
fcc0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
fcd0: 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74   and then show t
fce0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
fcf0: 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a      new value...
fd00: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
fd10: 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f     set flags [co
fd20: 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67  mbineFlags $flag fd30: 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f s$::connection_
fd40: 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  flags]....
fd50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
fd60: 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c  OTE: Show (and l
fd70: 6f 67 29 20 74 68 65 20 6e 65 77 20 65 66 66 65  og) the new effe
fd80: 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ctive connection
fd90: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20   flags...
fda0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
fdb0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. fdc0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! fdd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n fde0: 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c o(emitCombinedFl fdf0: 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ags)] && \.. fe00: 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 (![inf fe10: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d o exists ::no(em fe20: 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 49 itCombinedFlagsI fe30: 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 fNone)] || \.. fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 ![h fe50: 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 asNoFlags flags fe60: 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d false])} then {. fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu fe80: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
fe90: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
fea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
feb0: 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64    "---- combined
fec0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
fed0: 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73  s for " $databas fee0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. fef0: 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 " are: " [e ff00: 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 xpr {![hasNoFlag ff10: 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f s flags false] ? ff20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. ff30: 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 [appendArgs ff40: 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 \"$flags \"] :
ff50: 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a  "<none>"}] \n]..
ff60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
ff70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
ff80: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
ff90: 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c  $flags.. }... ffa0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 46 6c .. proc getFl ffb0: 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20 7b 66 agsProperty { {f ffc0: 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20 lags ""} {quiet ffd0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. ffe0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT fff0: 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 61 E: Determine wha 10000 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 28 t the combined ( 10010 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61 6c global and local 10020 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 ) connection.. 10030 20 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 # flag 10040 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f 73 s should be, pos 10050 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d 0a sibly quietly... 10060 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 10070 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e et flags [getCon 10080 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 nectionFlags "" 10090 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a$flags $quiet].. 100a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 100b0 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20 67 # NOTE: If no g 100c0 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20 63 lobal or local c 100d0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 100e0 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 were specified, 100f0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 10100 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 default conne 10110 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f 75 ction flags shou 10120 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68 65 72 ld be used; ther 10130 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a 20 efore, return.. 10140 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 20 # an 10150 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 6e 20 empty string in 10160 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20 that case... 10170 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 10180 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
10190 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  lags] == 0} then
101a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
101b0 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn ""..      }..
101c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
101d0 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 65   # NOTE: In orde
101e0 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  r to check if th
101f0 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63  e default connec
10200 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 62  tion flags are b
10210 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 20  eing used..
10220 20 23 20 20 20 20 20 20 20 69 74 20 69 73 20 6e   #       it is n
10230 65 63 65 73 73 61 72 79 20 74 6f 20 61 74 74 65  ecessary to atte
10240 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e  mpt a conversion
10250 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 65   to the actual e
10260 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20  numerated..
10270 20 23 20 20 20 20 20 20 20 74 79 70 65 2e 20 20   #       type.
10280 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 68  Failing that, th
10290 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73 74 20  e check against
102a0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
102b0 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  e will be..
102c0 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64   #       skipped
102d0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
102e0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
102f0 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f          set erro
10300 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52 45  r null; # IGNORE
10310 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  D....        obj
10320 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 6c 69  ect invoke Utili
10330 74 79 20 54 72 79 50 61 72 73 65 46 6c 61 67 73  ty TryParseFlags
10340 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 20 20  Enum "" \..
10350 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
10360 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
10370 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags
10380 22 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74  "" $flags null t 10390 72 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rue \.. 103a0 20 20 20 74 72 75 65 20 65 72 72 6f 72 0d 0a 20 true error.. 103b0 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 7d 20 74 } value]} t 103c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 103d0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 103e0 3a 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 : Attempting to 103f0 70 61 72 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 parse the connec 10400 74 69 6f 6e 20 66 6c 61 67 73 20 63 61 75 73 65 tion flags cause 10410 64 20 61 20 73 63 72 69 70 74 0d 0a 20 20 20 20 d a script.. 10420 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f # erro 10430 72 2e 20 20 45 6d 69 74 20 61 20 77 61 72 6e 69 r. Emit a warni 10440 6e 67 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c ng to the test l 10450 6f 67 20 66 69 6c 65 20 61 6e 64 20 63 6f 6e 74 og file and cont 10460 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 23 20 inue.. # 10470 20 20 20 20 20 20 75 73 69 6e 67 20 61 6e 20 65 using an e 10480 6d 74 70 79 20 73 74 72 69 6e 67 20 69 6e 73 74 mtpy string inst 10490 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ead... #. 104a0 0a 20 20 20 20 20 20 20 20 74 6c 6f 67 20 5b 61 . tlog [a 104b0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 104c0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 104d0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 104e0 6f 20 70 61 72 73 65 20 63 6f 6e 6e 65 63 74 69 o parse connecti 104f0 6f 6e 20 66 6c 61 67 73 2c 20 65 72 72 6f 72 3a on flags, error: 10500 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 10510 20 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e \n\t$value \n
10520 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
10530 20 76 61 6c 75 65 20 22 22 0d 0a 20 20 20 20 20   value ""..
10540 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
10550 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
10560 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61  the combined fla
10570 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 20  gs string could
10580 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65 20  not actually be
10590 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 20  converted..
105a0 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20   #       to the
105b0 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 20  enumerated type
105c0 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  it is the defaul
105d0 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75  t value, then ju
105e0 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23 20  st use..      #
105f0 20 20 20 20 20 20 69 74 20 76 65 72 62 61 74 69        it verbati
10600 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75  m; otherwise, ju
10610 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  st return an emp
10620 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 74  ty string.  In t
10630 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hat..      #
10640 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 65 66     case, the def
10650 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ault connection
10660 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75 73  flags will be us
10670 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
10680 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
10690 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d  length $value] = 106a0 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65 = 0 ||$value ne
106b0 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65 6e   "Default"} then
106c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
106d0 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e 47         # WARNING
106e0 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74  : This returns t
106f0 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  he string value
10700 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20  of the combined
10710 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20  flags, not..
10720 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 74      #          t
10730 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76 61  he enumerated va
10740 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 62 79  lue.  This is by
10750 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f 75   design and shou
10760 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  ld not..
10770 23 20 20 20 20 20 20 20 20 20 20 62 65 20 63 68  #          be ch
10780 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63 61  anged without ca
10790 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 74  reful considerat
107a0 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f 75  ion (e.g. it wou
107b0 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ld..        #
107c0 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74         prevent t
107d0 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  he SQLiteConnect
107e0 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 61  ion class from a
107f0 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d  llowing invalid.
10800 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
10810 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20      ["magical"]
10820 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20  meta-flags)...
10830 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10840 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41   return [appendA
10850 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66 6c  rgs "Flags=" $fl 10860 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d ags \;].. } 10870 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 10880 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "".. }..... 10890 20 20 20 70 72 6f 63 20 65 6e 61 62 6c 65 53 68 proc enableSh 108a0 61 72 65 64 43 61 63 68 65 20 7b 20 63 68 61 6e aredCache { chan 108b0 6e 65 6c 20 65 6e 61 62 6c 65 20 7b 71 75 69 65 nel enable {quie 108c0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 108d0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 108e0 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object 108f0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 10900 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 10910 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 10920 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 10930 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 10940 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s 10950 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 qlite3_enable_sh 10960 61 72 65 64 5f 63 61 63 68 65 20 5b 65 78 70 72 ared_cache [expr 10970 20 69 6e 74 28 24 65 6e 61 62 6c 65 29 5d 0d 0a int($enable)]..
10980 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result]
10990 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
109a0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 109b0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 109c0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
109d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
109e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
109f0 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
10a00 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  te3_enable_share
10a10 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c  d_cache(" $enabl 10a20 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 10a30 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 ")... ok: "$
10a40 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
10a50 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
10a60 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  lse {..        i
10a70 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 10a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 10a90 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
10aa0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
10ab0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
10ac0 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61  call sqlite3_ena
10ad0 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
10ae0 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20  (" $enable \.. 10af0 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e ").. 10b00 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 10b10 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
10b20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
10b30 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
10b40 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20  roc setupDb {..
10b50 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
10b60 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64  ame {mode ""} {d
10b70 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22  ateTimeFormat ""
10b80 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20  } {dateTimeKind
10b90 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a  ""} {flags ""}..
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 74              {ext
10bb0 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20  ra ""} {qualify
10bc0 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72  true} {delete tr
10bd0 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d  ue} {uri false}.
10be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 65  .            {te
10bf0 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76  mporary true} {v
10c00 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 65  arName db} {quie
10c10 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
10c20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
10c30 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20  OTE: First, see
10c40 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61  if our caller ha
10c50 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69  s requested an i
10c60 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
10c70 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
10c80 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20     set isMemory
10c90 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c  [isMemoryDb $fil 10ca0 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 eName].... 10cb0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 10cc0 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 For now, all te 10cd0 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65 st databases use 10ce0 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 d by the test su 10cf0 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a ite are placed.. 10d00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 10d10 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 to the database 10d20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68 directory. Each 10d30 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65 database and re 10d40 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 lated files.. 10d50 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 # used 10d60 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64 by a test should 10d70 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 be cleaned up b 10d80 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e y that test usin 10d90 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 g the.. # 10da0 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22 "cleanupDb" 10db0 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f procedure, belo 10dc0 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. 10dd0 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 if {!$isMemor
10de0 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74  y && $qualify} t 10df0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s 10e00 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 10e10 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 e join [getDatab 10e20 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 aseDirectory] [f 10e30 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 ile tail$fileNa
10e40 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  me]]..      }...
10e50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
10e60 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75  # NOTE: By defau
10e70 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70  lt, delete any p
10e80 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61  re-existing data
10e90 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61  base with the sa
10ea0 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23  me file..      #
10eb0 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69         name if i
10ec0 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73  t currently exis
10ed0 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ts...      #..
10ee0 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f      if {!$isMemo 10ef0 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 ry &&$delete &&
10f00 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66   [file exists $f 10f10 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 10f20 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10f30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 10f40 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61 empt to delete a 10f50 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 ny pre-existing 10f60 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 database with th 10f70 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 e same file.. 10f80 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 10f90 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 10fa0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 10fb0 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 h {file delete$
10fc0 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d  fileName} error]
10fd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10fe0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
10ff0 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65   # NOTE: We some
11000 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65  how failed to de
11010 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72  lete the file, r
11020 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
11030 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11040 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 11050 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11060 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
11070 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
11080 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
11090 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
110a0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
110b0 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73  o delete databas
110c0 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  e file \"" $file 110d0 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 110e0 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri 110f0 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a ng setup, error: 11100 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
11110 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
11120 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
11130 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
11140 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
11150 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
11160 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
11170 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
11180 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
11190 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
111a0 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64  aller.  The hand
111b0 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64  le to the opened
111c0 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62   database will b
111d0 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d  e stored there..
111e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
111f0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 11200 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. 11210 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 # NOTE: St 11220 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 art building the 11230 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 11240 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 ng. The only re 11250 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a quired portion.. 11260 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 # of 11270 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 11280 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 string is the da 11290 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 ta source, which 112a0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 contains the.. 112b0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 # dat 112c0 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 abase file name 112d0 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 itself. If our 112e0 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 caller wants to 112f0 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 use a URI as.. 11300 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 11310 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 data source, use 11320 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e the FullUri con 11330 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 nection string p 11340 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 roperty to.. 11350 20 20 23 20 20 20 20 20 20 20 70 72 65 76 65 6e # preven 11360 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 t the data sourc 11370 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 e string from be 11380 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 ing mangled... 11390 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 113a0 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 {$uri} then {..
113b0 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65         set conne
113c0 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24  ction {FullUri=$113d0 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 {fileName}}.. 113e0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 113f0 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 set connect 11400 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 ion {Data Source 11410 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 =${fileName}}..
11420 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
11430 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
11440 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63   Since this proc
11450 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65  edure has no spe
11460 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f  cial knowledge o
11470 66 20 77 68 61 74 20 74 68 65 20 64 65 66 61 75  f what the defau
11480 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  lt..      #
11490 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72    setting is for
114a0 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20   the ToFullPath
114b0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
114c0 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79  g propery, alway
114d0 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
114e0 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 77   add the value w
114f0 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20  e know about to
11500 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
11510 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d  tring...      #.
11520 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f  .      append co
11530 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c  nnection {;ToFul
11540 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d  lPath=${qualify} 11550 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 11560 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f # NOTE: If o 11570 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 ur caller specif 11580 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f ied a journal mo 11590 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 de, add the nece 115a0 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 ssary portion.. 115b0 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 115c0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s 115d0 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 tring now... 115e0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 115f0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d string length$m
11600 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ode] > 0} then {
11610 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
11620 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f   connection {;Jo
11630 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64  urnal Mode=${mod 11640 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e}}.. }.... 11650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 11660 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 NOTE: If our ca 11670 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 ller specified a 11680 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 DateTime format 11690 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess 116a0 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ary.. # 116b0 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 portion of th 116c0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 116d0 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... 116e0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 116f0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 ring length$dat
11700 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30  eTimeFormat] > 0
11710 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11720 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
11730 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f  ion {;DateTimeFo
11740 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46  rmat=${dateTimeF 11750 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d ormat}}.. } 11760 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11770 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou 11780 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi 11790 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e ed a DateTimeKin 117a0 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 d, add the neces 117b0 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 sary portion.. 117c0 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 117d0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 117e0 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... 117f0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 11800 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 tring length$da
11810 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d  teTimeKind] > 0}
11820 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11830 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
11840 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e  on {;DateTimeKin
11850 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64  d=${dateTimeKind 11860 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... 11870 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 11880 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 NOTE: Figure out 11890 20 77 68 61 74 20 74 68 65 20 66 69 6e 61 6c 20 what the final 118a0 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20 63 flags for this c 118b0 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20 74 onnection need t 118c0 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a o be... #.. 118d0 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 set flags 118e0 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c [getConnectionFl 118f0 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 24 66 ags$fileName $f 11900 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a lags$quiet]....
11910 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11920 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61   NOTE: If our ca
11930 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 73  ller specified s
11940 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ome SQLiteConnec
11950 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74  tionFlags, add t
11960 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
11970 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74    necessary port
11980 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65  ion of the conne
11990 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
119a0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
119b0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
119c0 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30  ngth $flags] > 0 119d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 119e0 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect 119f0 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c ion {;Flags=${fl
11a00 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ags}}..      }..
11a10 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11a20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
11a30 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
11a40 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61   an extra payloa
11a50 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  d to the connect
11a60 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
11a70 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 6e     string, appen
11a80 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  d it now...
11a90 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
11aa0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78  tring length $ex 11ab0 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b tra] > 0} then { 11ac0 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append 11ad0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 connection \;$
11ae0 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a  extra..      }..
11af0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11b00 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68   # NOTE: Open th
11b10 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
11b20 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69  ction now, placi
11b30 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61  ng the opaque ha
11b40 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20  ndle value..
11b50 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74    #       into t
11b60 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63  he variable spec
11b70 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c  ified by our cal
11b80 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
11b90 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c       set db [sql
11ba0 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69   open -type SQLi
11bb0 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65  te [subst $conne 11bc0 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 ction]].... 11bd0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11be0 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 : Configure the 11bf0 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 11c00 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c ory for the newl 11c10 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 y opened databas 11c20 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 11c30 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 connection now 11c40 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 unless our calle 11c50 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 r forbids it... 11c60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 11c70 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 {$temporary &&
11c80 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
11c90 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44  no(setTemporaryD
11ca0 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e  irectory)]} then
11cb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql
11cc0 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app 11cd0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 11ce0 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 "PRAGMA t 11cf0 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 emp_store_direct 11d00 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 ory = \"" [getTe 11d10 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 11d20 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d ] \"\;].. } 11d30 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11d40 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72 66 6f # NOTE: Perfo 11d50 72 6d 20 61 6e 79 20 65 78 74 72 61 20 70 65 72 rm any extra per 11d60 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65 74 75 -connection setu 11d70 70 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 p for the newly 11d80 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 opened.. # 11d90 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6e database n 11da0 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 ow unless our ca 11db0 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e ller forbids it. 11dc0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11dd0 20 73 65 74 20 65 78 65 63 75 74 65 4f 6e 53 65 set executeOnSe 11de0 74 75 70 20 5b 67 65 74 45 78 65 63 75 74 65 4f tup [getExecuteO 11df0 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20 20 20 nSetup].... 11e00 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 11e10 67 74 68 20 24 65 78 65 63 75 74 65 4f 6e 53 65 gth$executeOnSe
11e20 74 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20  tup] > 0 && \..
11e30 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20           ![info
11e40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63  exists ::no(exec
11e50 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 74 68  uteOnSetup)]} th
11e60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
11e70 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
11e80 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d 61   This command ma
11e90 79 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72  y raise an error
11ea0 3b 20 69 66 20 73 6f 2c 20 74 68 61 74 20 69 73  ; if so, that is
11eb0 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 20 20   fine, as..
11ec0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 65     #       the e
11ed0 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 77 69  nclosing test wi
11ee0 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 20 54  ll then fail.  T
11ef0 68 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d 6d 61  he [subst] comma
11f00 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23  nd is..        #
11f10 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e 20 74         used on t
11f20 68 65 20 53 51 4c 20 69 6e 20 63 61 73 65 20 69  he SQL in case i
11f30 74 20 6e 65 65 64 73 20 74 6f 20 72 65 66 65 72  t needs to refer
11f40 20 74 6f 20 73 74 61 74 65 20 69 6e 20 6f 75 72   to state in our
11f50 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
11f60 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20    context...
11f70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
11f80 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [ 11f90 73 75 62 73 74 20 24 65 78 65 63 75 74 65 4f 6e subst$executeOn
11fa0 53 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 7d 0d  Setup]..      }.
11fb0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11fc0 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73    # NOTE: Always
11fd0 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e   return the conn
11fe0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70  ection handle up
11ff0 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20  on success...
12000 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
12010 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c  rn $db.. }... 12020 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 .. proc getDb 12030 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 Connection { {va 12040 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 12050 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 12060 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 12070 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 12080 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 12090 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 120a0 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 120b0 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. 120c0 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 The handle to th 120d0 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 e database previ 120e0 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 ously opened via 120f0 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 12100 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 [setupDb] pr 12110 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 ocedure should b 12120 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. 12130 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12140 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
12150 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
12160 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
12170 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 41  is returns the A
12180 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63  DO.NET IDbConnec
12190 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74  tion object inst
121a0 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 20  ance for the..
121b0 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65 63      #       spec
121c0 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68 61  ified databse ha
121d0 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 74  ndle.  Since get
121e0 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 74  ting this object
121f0 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20   relies upon..
12200 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
12210 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65  e internals, gre
12220 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62  at care should b
12230 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64  e taken to avoid
12240 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20   disposing of..
12250 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69       #       thi
12260 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 65  s object or othe
12270 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69 74  rwise putting it
12280 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64   into an invalid
12290 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 23   state...      #
122a0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
122b0 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68  o exists db]} th
122c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
122d0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
122e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
122f0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
12300 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61  ublic -objectfla
12310 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d 61  gs +NoDispose -a
12320 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
12330 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 74 65        Interprete
12340 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e  r.GetActive.conn
12350 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64 62  ections Item $db 12360 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 .. } resu 12370 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 12380 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 12390 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 123a0 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e Success, return 123b0 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 123c0 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 ct handle... 123d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 123e0 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
123f0 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  t..        } els
12400 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
12410 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
12420 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70  TE: Failure, rep
12430 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
12440 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
12450 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 12460 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12470 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12480 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 12490 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 124a0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand 124b0 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 le for database 124c0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 124d0 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72$db "\", er
124e0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73  ror: " \n\t $res 124f0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 12500 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 12510 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 12520 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 NOTE: Failure, r 12530 65 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f 75 73 eturn an obvious 12540 6c 79 20 69 6e 76 61 6c 69 64 20 6f 70 61 71 75 ly invalid opaqu 12550 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e e object handle. 12560 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12570 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 12580 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 }..... proc f 12590 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 reeDbConnection 125a0 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 { {varName conne 125b0 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 ction} } {.. 125c0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 125d0 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the 125e0 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab 125f0 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 le (e.g. "connec 12600 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 tion") in the.. 12610 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 12620 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c text of our call 12630 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20 er. The opaque 12640 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f object handle fo 12650 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 r an ADO.NET.. 12660 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e # conn 12670 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c ection previousl 12680 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 y returned by [g 12690 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 etDbConnection] 126a0 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 should be.. 126b0 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 64 20 # stored 126c0 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d there... #. 126d0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
126e0 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69  varName connecti
126f0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  on....      #..
12700 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
12710 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74  empt to remove t
12720 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  he opaque object
12730 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65   handle from the
12740 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20   interpreter..
12750 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e      #       now.
12760 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64    This [object d
12770 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c  ispose] call wil
12780 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64  l not actually d
12790 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20  ispose of the..
127a0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 64       #       und
127b0 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62  erlying object b
127c0 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69  ecause the +NoDi
127d0 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73  spose flag was s
127e0 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20  et on it..
127f0 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 63  #       during c
12800 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  reation of the o
12810 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
12820 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  dle...      #..
12830 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
12840 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e  xists connection
12850 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
12860 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74    [catch {object
12870 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63   dispose $connec 12880 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 tion} error]} th 12890 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 128a0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 128b0 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail 128c0 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 ed to remove the 128d0 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 handle, report 128e0 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d why... #. 128f0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
12900 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
12910 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
12920 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
12930 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
12940 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63  to remove connec
12950 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20  tion handle \""
12960 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20  $connection \.. 12970 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 12980 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
12990 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
129a0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
129b0 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65   proc addDbConne
129c0 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69  ction { connecti
129d0 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20  on {varName db}
129e0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
129f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
12a00 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
12a10 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
12a20 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
12a30 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
12a40 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
12a50 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
12a60 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 12a70 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... 12a80 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12a90 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 E: Create a corr 12aa0 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 ectly formatted 12ab0 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 name for the dat 12ac0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e abase connection 12ad0 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 to.. # 12ae0 20 20 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 be added to t 12af0 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 he list managed 12b00 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 by the Eagle int 12b10 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 12b20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 #.. set db 12b30 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 12b40 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 12b50 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45 c \.. E 12b60 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 agle._Components 12b70 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f .Private.FormatO 12b80 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63 ps DatabaseObjec 12b90 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f tName$connectio
12ba0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53  n \..          S
12bb0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection
12bc0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
12bd0 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
12be0 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d  tive NextId]]...
12bf0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
12c00 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  # NOTE: Add the
12c10 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12c20 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20  ion provided by
12c30 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68  our caller to th
12c40 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20  e list..      #
12c50 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b        of those k
12c60 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c  nown to the Eagl
12c70 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
12c80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f        #..      o
12c90 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
12ca0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49  ags +NonPublic I
12cb0 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
12cc0 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  tive.connections
12cd0 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20   Add \..
12ce0 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f    $db$connectio
12cf0 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  n..    }.....
12d00 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46 72 6f   proc getRowsFro
12d10 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64 61 74  mDataTable { dat
12d20 61 54 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20  aTable } {..
12d30 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 73 74    set rows [list
12d40 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75  ]..      set cou
12d50 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65 20 43  nt [$dataTable C 12d60 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a 0d olumns.Count]... 12d70 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 . for {set 12d80 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 index 0} {$index
12d90 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72   < $count} {incr 12da0 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 index} {.. 12db0 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c 75 6d set dataColum 12dc0 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 2d 61 n [$dataTable -a
12dd0 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 65 74  lias Columns.get
12de0 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 20  _Item $index].. 12df0 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 73 set names 12e00 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 61 43 ($index) [$dataC 12e10 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65 olumn ColumnName 12e20 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 12e30 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 object forea 12e40 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 52 6f ch -alias dataRo 12e50 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 73 20 w [set dataRows 12e60 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f 77 73 [$dataTable Rows
12e70 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  ]] {..        se
12e80 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  t row [list]....
12e90 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74          for {set
12ea0 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65   index 0} {$inde 12eb0 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 x <$count} {inc
12ec0 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20  r index} {..
12ed0 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20        set value
12ee0 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65 61 74  [$dataRow -creat 12ef0 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 74 65 e -alias get_Ite 12f00 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20 m$index]....
12f10 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
12f20 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65  ng length $value 12f30 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 ] > 0 && \.. 12f40 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 6a 65 ![obje 12f50 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 65 72 ct invoke Conver 12f60 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 6c 75 t IsDBNull$valu
12f70 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
12f80 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
12f90 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73  row [list $names 12fa0 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c 75 65 ($index) [$value 12fb0 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 20 20 ToString]].. 12fc0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 12fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 . lap 12fe0 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 pend row [list$
12ff0 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a  names($index)].. 13000 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 13010 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 13020 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73 20 24 lappend rows$
13030 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  row..      }....
13040 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 6f        return $ro 13050 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 ws.. }..... 13060 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77 73 46 proc dumpRowsF 13070 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 63 romDataTable { c 13080 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20 7b 0d hannel rows } {. 13090 0a 20 20 20 20 20 20 73 65 74 20 73 65 71 75 65 . set seque 130a0 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20 20 66 nce 1.... f 130b0 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f 77 73 oreach row$rows
130c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
130d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 130e0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 130f0 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 65 [expr {$se
13100 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22 5c 6e  quence > 1 ? "\n
13110 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d 20 52  " : ""}] "---- R
13120 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63 65 20  OW #" $sequence 13130 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 :\n].... 13140 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 72 6f foreach pair$ro
13150 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  w {..          i
13160 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69  f {[llength $pai 13170 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20 7b 0d r] >= 2} then {. 13180 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 13190 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
131a0 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20  endArgs \t \..
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c                [l
131c0 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69  ist [lindex $pai 131d0 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69 73 74 r 0]] ": " [list 131e0 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 31 [lindex$pair 1
131f0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
13200 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 6c 65    } elseif {[lle
13210 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d 20 31  ngth $pair] == 1 13220 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13230 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
13240 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
13250 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   \t \..
13260 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69         [list [li
13270 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 22  ndex $pair 0]] " 13280 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a 20 20 : <null>\n"].. 13290 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 132a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 132b0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 74 3c uts$channel \t<
132c0 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f 54 45  empty>\n; # NOTE
132d0 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20 20 20  : No data?..
132e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
132f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e   }....        in
13300 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20  cr sequence..
13310 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
13320 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70      proc cleanup
13330 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76  Db { fileName {v
13340 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c  arName db} {coll
13350 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c 69  ect true} {quali
13360 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 20  fy true}..
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13380 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20 7b  delete true} } {
13390 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
133a0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
133b0 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65   to force all pe
133c0 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20  nding "garbage"
133d0 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f  objects to be co
133e0 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20  llected,..
133f0 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e  #       includin
13400 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65  g SQLite stateme
13410 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f  nts and backup o
13420 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f  bjects; this sho
13430 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20  uld allow..
13440 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64   #       the und
13450 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
13460 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65   file to be dele
13470 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ted...      #..
13480 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 13490 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 134a0 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 134b0 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
134c0 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
134d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
134e0 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
134f0 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
13500 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
13510 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
13520 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
13530 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54        caller.  T
13540 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65  he handle to the
13550 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f   database previo
13560 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20  usly opened via
13570 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
13580 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f     [setupDb] pro
13590 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65  cedure should be
135a0 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
135b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
135c0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 135d0 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. 135e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f # NOTE: Clo 135f0 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f se the connectio 13600 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 n to the databas 13610 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 6f e now. This sho 13620 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 uld allow us.. 13630 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 64 # to d 13640 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 6c elete the underl 13650 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 ying database fi 13660 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 le... #.. 13670 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 13680 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61 74 ists db] && [cat 13690 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 ch {sql close$d
136a0 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  b} error]} then
136b0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
136c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
136d0 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20   somehow failed
136e0 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74  to close the dat
136f0 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77 68  abase, report wh
13700 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
13710 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 13720 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 13730 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 13740 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 13750 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 13760 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 20 close database 13770 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72 72 \""$db "\", err
13780 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
13790 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72       \n\t $error 137a0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d \n].. }... 137b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 137c0 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 # NOTE: First, s 137d0 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 ee if our caller 137e0 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61 has requested a 137f0 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 n in-memory data 13800 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a base... #.. 13810 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f set isMemo 13820 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 ry [isMemoryDb$
13830 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  fileName]....
13840 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
13850 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
13860 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20 64  ll path to the d
13870 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d  atabase file nam
13880 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c  e.  For now, all
13890 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20   test..      #
138a0 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69       database fi
138b0 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  les are stored i
138c0 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  n the temporary
138d0 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20  directory...
138e0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
138f0 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75  $isMemory &&$qu
13900 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  alify} then {..
13910 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
13920 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
13930 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
13940 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c  tory] [file tail
13950 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20   $fileName]].. 13960 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 13970 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 13980 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c Check if the fil 13990 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d e still exists.. 139a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 139b0 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
139c0 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69  & $delete && [fi 139d0 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
139e0 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
139f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13a00 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65   # NOTE: Skip de
13a10 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  leting database
13a20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64  files if somebod
13a30 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61  y sets the globa
13a40 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  l..        #
13a50 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 20 70     variable to p
13a60 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20  revent it...
13a70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
13a80 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
13a90 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46   ::no(cleanupDbF
13aa0 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile)]} then {..
13ab0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
13ac0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
13ad0 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
13ae0 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73  the test databas
13af0 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20  e file now...
13b00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13b10 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64      if {[set cod
13b20 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64  e [catch {file d
13b30 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} 13b40 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b error]]} then { 13b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 13b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 13b70 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 13b80 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 13b90 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 the file, repor 13ba0 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 13bb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 13bc0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
13bd0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
13be0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
13bf0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
13c00 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
13c10 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65   delete database
13c20 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 13c30 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 13c40 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin 13c50 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 g cleanup, error 13c60 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
13c70 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
13c80 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
13c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
13ca0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
13cb0 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20  E: Show that we
13cc0 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
13cd0 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20   the file...
13ce0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13cf0 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d     set code 0...
13d00 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
13d10 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 13d20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 13d40 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 === WARNING: ski 13d50 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61 pped deleting da 13d60 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 13d70 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
13d80 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
13d90 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22  uring cleanup\n"
13da0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
13db0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
13dc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13dd0 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c   # NOTE: The fil
13de0 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
13df0 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20  , success!..
13e00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
13e10 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20  et code 0..
13e20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
13e30 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d  rn $code.. }. 13e40 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 .... proc set 13e50 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c upDbInterruptCal 13e60 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 lback { channel 13e70 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 log } {.. t 13e80 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
13e90 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64  --- setting up d
13ea0 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70  ebugger interrup
13eb0 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d  t callback... ".
13ec0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
13ed0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  tch {..        #
13ee0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
13ef0 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  : Make sure the
13f00 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 20  script debugger
13f10 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64  and the isolated
13f20 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 72 65   interpreter are
13f30 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
13f40 20 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64    setup and read
13f50 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20  y for use...
13f60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64      #..        d
13f70 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 20  ebug setup true
13f80 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  true....
13f90 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
13fa0 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65  E: Load the nece
13fb0 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69  ssary packages i
13fc0 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64  nto the isolated
13fd0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
13fe0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13ff0 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b 0d 0a    debug eval {..
14000 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
14010 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d  e require Eagle.
14020 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61  .          packa
14030 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
14040 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20  .Library..
14050 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
14060 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a  ire Eagle.Test..
14070 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
14080 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14090 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
140a0 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61   necessary varia
140b0 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73  bles into the is
140c0 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74  olated interpret
140d0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  er...        #..
140e0 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e          debug in
140f0 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73  voke 0 set ::tes
14100 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e 6e  t_channel $chann 14110 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 el; # NOTE: For 14120 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20 20 [tputs]... 14130 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 debug invoke 0 14140 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 set ::test_log 14150 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f$log; # NOTE: Fo
14160 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20  r [tlog].....
14170 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14180 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20  # NOTE: Install
14190 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72  the callback scr
141a0 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61  ipt to be evalua
141b0 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61  ted in the isola
141c0 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ted..        #
141d0 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 72       interpreter
141e0 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72   when this inter
141f0 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 72  preter is interr
14200 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 0d  upted by script.
14210 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
14220 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65   cancellation, e
14230 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  tc...        #..
14240 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 61          debug ca
14250 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73  llback apply {{s
14260 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20  ender e} {..
14270 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14280 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
14290 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62 61 63   if this callbac
142a0 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65  k is one that we
142b0 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20   care about...
142c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
142d0 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 65 6c       if {"Cancel
142e0 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b 24  ed" in [split [$142f0 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 65 5d e InterruptType] 14300 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a ", "]} then {.. 14310 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 14320 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 14330 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 E: Make sure the 14340 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e [object] comman 14350 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d d is available.. 14360 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 14370 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 14380 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 14390 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 143a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 143b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 143c0 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 # NOTE: Iterat 143d0 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 e through all da 143e0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio 143f0 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d ns known to the. 14400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 14410 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 6e parent in 14420 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 terpreter... 14430 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 14440 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 14450 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 14460 20 70 61 69 72 20 5b 6f 62 6a 65 63 74 20 69 6e pair [object in 14470 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 14480 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 14490 20 20 20 20 20 20 20 20 20 20 20 20 24 65 20 49$e I
144a0 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65  nterpreter.conne
144b0 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20  ctions] {..
144c0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
144e0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
144f0 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20   cancel any SQL
14500 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72  queries in progr
14510 65 73 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20  ess on this..
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
14530 20 20 20 20 20 64 61 74 61 62 61 73 65 20 63 6f       database co
14540 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  nnection...
14550 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14570 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72 20   {[catch {$pair 14580 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 Value.Cancel} er 14590 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 145b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
145c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
145d0 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  s \n \..
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
145f0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
14600 6c 65 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 75  led to cancel qu
14610 65 72 79 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69  ery for connecti
14620 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  on \"" \..
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14640 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c  [$pair Key] "\", 14650 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
14660 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
14670 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
14680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
14690 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
146a0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
146b0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 146c0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 146d0 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 Args \n \.. 146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 146f0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e == WARNING: cann 14700 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 75 ot cancel any qu 14710 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20 eries: " \.. 14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 "t 14730 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f he \"object\" co 14740 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61 76 61 mmand is not ava 14750 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 ilable\n"].. 14760 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 14770 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 14780 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 6f }}.. } erro 14790 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d r] == 0} then {. 147a0 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 147b0 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70 74 traint interrupt 147c0 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65 33 Callback.sqlite3 147d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 147e0 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
147f0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
14800 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
14810 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 14820 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72 3a Args "no, error: 14830 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
14840 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n]..      }..
14850 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
14860 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 69  cleanupFile { fi
14870 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 20  leName {collect
14880 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 6c  true} {force fal
14890 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
148a0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
148b0 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65  Attempt to force
148c0 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61   all pending "ga
148d0 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74  rbage" objects t
148e0 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d  o be collected,.
148f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
14900 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20  ncluding SQLite
14910 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62  statements and b
14920 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74  ackup objects; t
14930 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77  his should allow
14940 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
14950 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
14960 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to
14970 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20  be deleted...
14980 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
14990 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b  $collect} then { 149a0 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 .. collec 149b0 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 tGarbage$::test
149c0 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20  _channel..
149d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
149e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
149f0 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74  k if the file st
14a00 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20  ill exists...
14a10 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
14a20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 14a30 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 14a40 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14a50 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 14a60 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 deleting test f 14a70 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 iles if somebody 14a80 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c sets the global 14a90 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 14aa0 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 70 72 # to pr 14ab0 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 event it... 14ac0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 14ad0 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e {$force || ![in
14ae0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
14af0 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68  leanupFile)]} th
14b00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
14b10 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
14b20 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
14b30 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20  delete the test
14b40 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  file now...
14b50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14b60 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20    if {[set code
14b70 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c  [catch {file del
14b80 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65  ete $fileName} e 14b90 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a rror]]} then {.. 14ba0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 14bb0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 14bc0 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 14bd0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 14be0 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 he file, report 14bf0 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 14c00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 14c10 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
14c20 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
14c30 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
14c40 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
14c50 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
14c60 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 20  elete test file
14c70 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. 14c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14c90 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea 14ca0 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e nup, error: " \n 14cb0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
14cc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
14cd0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
14ce0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14cf0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
14d00 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65  w that we skippe
14d10 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66  d deleting the f
14d20 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...
14d30 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
14d40 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20   code 0....
14d50 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 14d60 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 14d70 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 14d80 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 14d90 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 RNING: skipped d 14da0 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c eleting test fil 14db0 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
14dc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
14dd0 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61   "\" during clea
14de0 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  nup\n"]..
14df0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
14e00 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
14e10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
14e20 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74  he file does not
14e30 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21   exist, success!
14e40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14e50 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d       set code 0.
14e60 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
14e70 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a    return $code.. 14e80 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 14e90 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 oc collectGarbag 14ea0 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c e { channel {mil 14eb0 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30 7d 20 liseconds 1000} 14ec0 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d 20 7b {quiet true} } { 14ed0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 14ee0 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 14ef0 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 14f00 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 14f10 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 14f20 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 bject invoke GC 14f30 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 GetTotalMemory f 14f40 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 alse.. } 14f50 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 14f60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14f70 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
14f80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
14f90 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 14fa0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 14fc0 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 ---- memory in u 14fd0 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 62 65 se by the CLR be 14fe0 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e fore collection. 14ff0 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 .. " \.. 15000 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20$result
15010 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
15020 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15030 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
15040 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 15050 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 15060 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15070 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 15080 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 failed to get C 15090 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c LR memory usage, 150a0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 150b0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 150c0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
150d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
150e0 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 23  ...      #######
150f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15130 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ##....      #..
15140 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70       # NOTE: Rep
15150 65 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 20  eatedly attempt
15160 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61  to collect garba
15170 67 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c  ge until the all
15180 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20  otted number..
15190 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 6d      #       of m
151a0 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 20  illiseconds has
151b0 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 73  elapsed.  Always
151c0 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c   attempt to coll
151d0 65 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 20  ect garbage..
151e0 20 20 20 23 20 20 20 20 20 20 20 61 74 20 6c 65     #       at le
151f0 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20  ast once...
15200 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68   #..      if {[h
15210 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
15220 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
15230 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 61  .        set sta
15240 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64  rt [clock second
15250 73 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  s]..        set
15260 73 74 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61  stop [expr {$sta 15270 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f rt + ($milliseco
15280 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d  nds / 1000)}]...
15290 0a 20 20 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20  .        do {..
152a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
152b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
152c0 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61  tempt to force a
152d0 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
152e0 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52  llection now.  R
152f0 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20  eport any..
15300 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72       #       err
15310 6f 72 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75  or that is encou
15320 6e 74 65 72 65 64 20 69 66 20 77 65 20 66 61 69  ntered if we fai
15330 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  l...          #.
15340 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
15350 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
15360 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
15370 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
15380 6d 6f 72 79 20 74 72 75 65 0d 0a 20 20 20 20 20  mory true..
15390 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74       } error]} t
153a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
153b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 153c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 153d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 153e0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 153f0 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 failed full garb 15400 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 age collection, 15410 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 error: " \.. 15420 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 15430 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
15440 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
15450 20 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63        set now [c
15460 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20  lock seconds]..
15470 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 7b         } while {
15480 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26  $start <=$now &
15490 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d  & $now <$stop}.
154a0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
154b0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
154c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154f0 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20  ###########....
15500 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
15510 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
15520 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
15530 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
15540 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
15550 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
15560 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
15570 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  e..        } res
15580 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
15590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
155a0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 155b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 155c0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
155d0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
155e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
155f0 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  - memory in use
15600 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72  by the CLR after
15610 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22   collection... "
15620 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15630 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79      $result " by 15640 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 15650 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 15660 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 15670 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
15680 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
156a0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
156b0 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d  led to get CLR m
156c0 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72  emory usage, err
156d0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
156e0 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res 156f0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 15700 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 15710 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 15720 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 getSQLiteHandleC 15730 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 ounts { channel 15740 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } 15750 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 {.. set res 15760 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 ult [list].... 15770 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 15780 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 15790 5d 20 26 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 ] && [haveConstr 157a0 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 aint \.. 157b0 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 defineCons 157c0 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 tant.System.Data 157d0 2e 53 51 4c 69 74 65 2e 43 4f 55 4e 54 5f 48 41 .SQLite.COUNT_HA 157e0 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 NDLE]} then {.. 157f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15800 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 # NOTE: Add ea 15810 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 ch critical hand 15820 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 le count to the 15830 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d resulting list.. 15840 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 15850 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 foreach name 15860 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 63 74 69 6f [list connectio 15870 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 nCount statement 15880 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e Count backupCoun 15890 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 t] {.. 158a0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 158b0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 158c0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 158d0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 158f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 15900 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 15910 6f 64 73 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 ods$name..
15920 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d       } value] ==
15930 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
15940 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 15950 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 15960 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 15970 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
15980 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
15990 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
159a0 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
159b0 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65   count \"" $name 159c0 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 "\" is "$value
159d0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
159e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
159f0 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
15a00 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  t $value.. 15a10 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 15a20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 15a30 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
15a40 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
15a50 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
15a60 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
15a70 20 67 65 74 20 63 72 69 74 69 63 61 6c 20 68 61   get critical ha
15a80 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 5c  ndle count \"" \
15a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15aa0 20 20 24 6e 61 6d 65 20 22 5c 22 2c 20 65 72 72    $name "\", err 15ab0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 76 61 6c 75 or: " \n\t$valu
15ac0 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
15ad0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
15ae0 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21       } elseif {!
15af0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 15b00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 15b10 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 # NOTE: The a 15b20 63 74 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 ctual handle cou 15b30 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 76 61 69 nts are not avai 15b40 6c 61 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 lable; therefore 15b50 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 , just.. 15b60 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 # return a 15b70 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 n empty list... 15b80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15b90 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
15ba0 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20   "---- critical
15bb0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e  handle counts un
15bc0 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20  available\n"..
15bd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
15be0 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20  eturn $result.. 15bf0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 15c00 63 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 c shutdownSQLite 15c10 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 { channel {forc 15c20 65 20 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 e false} {quiet 15c30 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 15c40 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15c50 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 E: Make sure tha 15c60 74 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 t SQLite core li 15c70 62 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 brary is complet 15c80 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 ely shutdown. T 15c90 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 his.. # 15ca0 20 20 20 69 73 20 75 73 65 64 20 62 79 20 74 65 is used by te 15cb0 73 74 73 20 74 68 61 74 20 63 68 61 6e 67 65 20 sts that change 15cc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 configuration op 15cd0 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f tions and/or tho 15ce0 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 se.. # 15cf0 20 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 6d that need to m 15d00 61 6b 65 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 ake sure logging 15d10 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 is initialized 15d20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 (i.e. just in ca 15d30 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 se.. # 15d40 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 the SQLite cor 15d50 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 69 6e e library was in 15d60 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 itialized in the 15d70 20 70 72 6f 63 65 73 73 20 70 72 69 6f 72 20 74 process prior t 15d80 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 o.. # 15d90 20 74 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 the SQLiteLog c 15da0 6c 61 73 73 20 62 65 69 6e 67 20 61 62 6c 65 20 lass being able 15db0 74 6f 20 73 65 74 75 70 20 69 74 73 20 6c 6f 67 to setup its log 15dc0 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d ging callback).. 15dd0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e . # N 15de0 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 ormally, this sh 15df0 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 ould only be per 15e00 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 formed if SQLite 15e10 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a is loaded and.. 15e20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 15e30 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 ady for use by t 15e40 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a he test suite... 15e50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 15e60 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 f {$force || [is
15e70 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68  SQLiteReady]} th
15e80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
15e90 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49  .        # BUGFI
15ea0 58 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61  X: Make sure tha
15eb0 74 20 61 6e 79 20 22 6c 65 61 6b 65 64 22 20 74  t any "leaked" t
15ec0 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 2f  ransactions and/
15ed0 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a  or connections..
15ee0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
15ef0 20 20 61 72 65 20 63 6c 65 61 6e 65 64 20 75 70    are cleaned up
15f00 20 62 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20   before calling
15f10 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 64  the native shutd
15f20 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20  own function...
15f30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15f40 20 20 66 6f 72 65 61 63 68 20 74 72 61 6e 73 61    foreach transa
15f50 63 74 69 6f 6e 20 5b 69 6e 66 6f 20 74 72 61 6e  ction [info tran
15f60 73 61 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20  sactions] {..
15f70 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
15f80 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20  ng match \..
15f90 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
15fa0 23 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c  #Data#SQLite#SQL
15fb0 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 23 2a  iteTransaction#*
15fc0 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 5d 7d 20   $transaction]} 15fd0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 15fe0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 15ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16000 73 71 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 sql transaction 16010 72 6f 6c 6c 62 61 63 6b 20 24 74 72 61 6e 73 61 rollback$transa
16020 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ction..
16030 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30     } error] == 0
16040 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16050 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 16060 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 16070 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 16080 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
16090 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
160b0 2d 2d 2d 2d 20 72 6f 6c 6c 65 64 20 62 61 63 6b  ---- rolled back
160c0 20 6c 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74   leaked transact
160d0 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ion \"" \..
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $160f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 5c 6e transaction \"\n 16100 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 16110 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 16120 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 16130 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
16140 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
16160 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 16170 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 16190 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 161a0 69 6c 65 64 20 74 6f 20 72 6f 6c 6c 62 61 63 6b iled to rollback 161b0 20 6c 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 leaked transact 161c0 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ion \"" \.. 161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
161e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 22 5c 22 2c  transaction "\",
161f0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $16200 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 16210 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 16220 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 16230 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 16240 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 }.... for 16250 65 61 63 68 20 64 62 20 5b 69 6e 66 6f 20 63 6f each db [info co 16260 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 nnections] {.. 16270 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 16280 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 ing match \.. 16290 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 162a0 6d 23 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 m#Data#SQLite#SQ 162b0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a LiteConnection#* 162c0 20 24 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20$db]} then {..
162d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
162e0 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65  catch {sql close
162f0 20 24 64 62 7d 20 65 72 72 6f 72 5d 20 3d 3d 20   $db} error] == 16300 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 16310 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
16320 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
16340 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 16350 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16370 22 2d 2d 2d 2d 20 63 6c 6f 73 65 64 20 6c 65 61 "---- closed lea 16380 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 ked database \"" 16390 20 24 64 62 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20$db \"\n]..
163a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
163b0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
163c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
163d0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 163e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 163f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
16400 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
16410 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16420 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
16430 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
16440 20 63 6c 6f 73 65 20 6c 65 61 6b 65 64 20 64 61   close leaked da
16450 74 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  tabase \"" \..
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16470 20 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72    $db "\", error 16480 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
16490 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
164a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
164b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
164c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
164d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
164e0 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f    # BUGFIX: Befo
164f0 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e  re calling the n
16500 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66  ative shutdown f
16510 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75  unction, make su
16520 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20  re both..
16530 20 23 20 20 20 20 20 20 20 20 20 6f 66 20 74 68   #         of th
16540 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64  e PRAGMA related
16550 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73   directory names
16560 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20   are freed...
16570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16580 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
16590 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e  rectories $chann 165a0 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 el true.... 165b0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 165c0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 165d0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 165e0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 165f0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 16600 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 16610 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 16620 64 73 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 ds sqlite3_shutd 16630 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 own.. } r 16640 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 16650 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 16660 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
16670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16680 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 16690 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 166b0 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 166c0 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f _shutdown()... o 166d0 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d k: "$result \n]
166e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
166f0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
16700 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
16710 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 16720 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 16730 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
16740 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16750 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
16760 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75  call sqlite3_shu
16770 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72  tdown()... error
16780 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74  : " \n\t $result 16790 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 167a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 167b0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 167c0 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 . proc report 167d0 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 SQLiteResources 167e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 {.. c 167f0 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 hannel {quiet fa 16800 6c 73 65 7d 20 7b 72 65 73 65 74 20 74 72 75 65 lse} {reset true 16810 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d } {collect true} 16820 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 16830 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 16840 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 available, repor 16850 74 20 6f 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 t on (and possib 16860 6c 79 20 72 65 73 65 74 29 20 74 68 65 20 72 75 ly reset) the ru 16870 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 ntime.. # 16880 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 configurati 16890 6f 6e 20 73 74 61 74 69 73 74 69 63 73 2e 0d 0a on statistics... 168a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 168b0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 168c0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 jectCommand] && 168d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 \.. [ha 168e0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 veConstraint bui 168f0 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e ldConfiguration. 16900 44 65 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 Debug] && [catch 16910 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 {.. obje 16920 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 16930 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 +NonPublic -ali 16940 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 as \.. 16950 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 16960 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 16970 65 4d 65 74 68 6f 64 73 20 73 65 74 74 69 6e 67 eMethods setting 16980 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 20 20 ReadCounts.. 16990 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64 43 } settingReadC 169a0 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 ounts] == 0} the 169b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 169c0 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 nameCount [$set
169d0 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43  tingReadCounts C
169e0 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 73  ount]..        s
169f0 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d  et valueCount 0.
16a00 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  ...        objec
16a10 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
16a20 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 65   pair $settingRe 16a30 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 adCounts {.. 16a40 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65 incr value 16a50 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c Count [$pair Val
16a60 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue]....
16a70 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 16a80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16a90 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
16aa0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ac0 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22  "---- setting \"
16ad0 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c  " [$pair Key] "\ 16ae0 22 20 77 61 73 20 72 65 61 64 20 22 20 5c 0d 0a " was read " \.. 16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16b00 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 [$pair Value] "
16b10 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  times\n"]..
16b20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
16b30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
16b40 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d  {$reset} then {. 16b50 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 16b60 63 61 74 63 68 20 7b 24 73 65 74 74 69 6e 67 52 catch {$settingR
16b70 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d  eadCounts Clear}
16b80 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68   error] == 0} th
16b90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
16ba0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 16bb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 16bc0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
16bd0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
16be0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16bf0 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74       "---- reset
16c00 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74   setting statist
16c10 69 63 73 20 66 6f 72 20 74 68 65 20 70 72 65 76  ics for the prev
16c20 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20  ious " \..
16c30 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam 16c40 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 eCount " names a 16c50 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 nd "$valueCount
16c60 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 5c 6e   " values read\n
16c70 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
16c80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
16c90 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
16ca0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 16cb0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16cd0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 16ce0 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74 20 failed to reset 16cf0 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 setting statisti 16d00 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 cs for " \.. 16d10 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 65 "the 16d20 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d previous "$nam
16d30 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61  eCount " names a
16d40 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74  nd " $valueCount 16d50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16d60 20 20 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 " values rea 16d70 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 d, error: " \n\t 16d80 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
16d90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
16da0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
16db0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
16dc0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
16dd0 6e 64 5d 20 26 26 20 5b 68 61 76 65 43 6f 6e 73  nd] && [haveCons
16de0 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20  traint \..
16df0 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f          defineCo
16e00 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
16e10 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
16e20 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d  P_VIRTUAL_TABLE]
16e30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
16e40 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74   [haveConstraint
16e50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16e60 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74    defineConstant
16e70 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
16e80 69 74 65 2e 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  ite.TRACK_MEMORY
16e90 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d  _BYTES]} then {.
16ea0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 16eb0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 16ec0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
16ed0 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
16ee0 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
16ef0 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f  se by SQLiteMemo
16f00 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20  ry... "..
16f10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
16f20 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
16f30 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
16f40 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
16f50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
16f60 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
16f70 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
16f80 4d 65 6d 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f  Memory bytesAllo
16f90 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d  cated..        }
16fa0 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
16fb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
16fc0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 16fd0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16fe0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
16ff0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 17000 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d mory " bytes\n"] 17010 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 17020 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 17030 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d . set m 17040 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 17050 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 17060 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
17070 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
17080 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 17090 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
170a0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
170b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
170c0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 170d0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 170e0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
170f0 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75  nel "---- maximu
17100 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  m memory in use
17110 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e  by SQLiteMemory.
17120 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d  .. "..        }.
17130 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
17140 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
17150 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
17160 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
17170 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
17180 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
17190 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d  SQLite.SQLiteMem
171a0 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79 74 65 73  ory maximumBytes
171b0 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20  Allocated..
171c0 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20     } memory] ==
171d0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
171e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 171f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17200 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
17210 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
17220 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73   $memory " bytes 17230 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 17240 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 17250 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s 17260 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow 17270 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n.... i 17280 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
17290 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
172a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 172b0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
172c0 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
172d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
172e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
172f0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 17300 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 17310 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
17320 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72  -- current memor
17330 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69  y in use by SQLi
17340 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d  te... "..      }
17350 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68  ....      if {[h
17360 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
17370 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
17380 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
17390 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
173a0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
173b0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
173c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
173d0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
173e0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
173f0 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33  eMethods sqlite3
17400 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20  _memory_used..
17410 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20        } memory]
17420 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
17430 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 17440 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 17450 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
17460 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
17470 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79  rgs $memory " by 17480 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 17490 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 174a0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 174b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 174c0 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 NOTE: Maybe the 174d0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 174e0 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 rary is unavaila 174f0 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 ble?.. 17500 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 #.. set 17510 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d memory unknown. 17520 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 17530 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
17540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
17550 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 17560 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
17570 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
17580 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
17590 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
175a0 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
175b0 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a   unavailable....
175c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 175d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 175e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
175f0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
17600 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 17610 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 17620 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 }.... set r 17630 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 esult$memory; #
17640 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65   NOTE: Return me
17650 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f  mory in-use to o
17660 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20  ur caller.....
17670 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 17680 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17690 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
176a0 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65  "---- maximum me
176b0 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
176c0 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20  QLite... "..
176d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
176e0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
176f0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
17700 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
17710 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
17720 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
17730 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
17740 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
17750 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
17760 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
17770 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
17790 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
177a0 77 61 74 65 72 20 30 0d 0a 20 20 20 20 20 20 20  water 0..
177b0 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d   } memory] == 0}
177c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
177d0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 177e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 177f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
17800 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $17810 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e memory " bytes\n 17820 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 17830 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 17840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 17850 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 17860 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 17870 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 17880 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 17890 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 178a0 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 178b0 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 178c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
178d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
178e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $178f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 17900 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
17910 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
17920 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
17930 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
17940 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76   set memory unav
17950 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20  ailable....
17960 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 17970 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17980 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
17990 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 179a0 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 179b0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 179c0 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 if {$colle
179d0 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ct} then {..
179e0 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61      collectGarba
179f0 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  ge $channel.. 17a00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 17a10 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
17a20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
17a30 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 17a40 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 17a50 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 n use by the CLR 17a60 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a ... ".. }.. 17a70 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 17a80 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 17a90 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 17aa0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 17ab0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 17ac0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 bject invoke GC 17ad0 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 GetTotalMemory f 17ae0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 alse.. } 17af0 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 17b00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 17b10 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 if {[string is i 17b20 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 nteger -strict$
17b30 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  memory]} then {.
17b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
17b50 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 17b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17b70 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
17b80 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 17b90 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 17ba0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 17bb0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 17bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {.. s 17bd0 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 et memory invali 17be0 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d.... 17bf0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
17c00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
17c10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 17c20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
17c30 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
17c40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
17c50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
17c60 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
17c70 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75      set memory u
17c80 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20  nknown....
17c90 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 17ca0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17cb0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
17cc0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
17cd0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 17ce0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 17cf0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 17d00 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set 17d10 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 memory unavaila 17d20 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 ble.... i 17d30 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
17d40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
17d50 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 17d60 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
17d70 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
17d80 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
17d90 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 17da0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 17db0 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL 17dc0 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b iteDirectories { 17dd0 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 channel {reset 17de0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 17df0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17e00 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 17e10 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 17e20 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 17e30 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c tion is availabl 17e40 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 17e50 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
17e60 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  l \..          "
17e70 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
17e80 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  r function sqlit
17e90 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
17ea0 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  ectory... "....
17eb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
17ec0 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c 20  NOTE: This call
17ed0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77  to the sqlite3_w
17ee0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
17ef0 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73  ry function uses
17f00 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
17f10 20 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c 75      invalid valu
17f20 65 20 30 20 66 6f 72 20 74 68 65 20 66 69 72 73  e 0 for the firs
17f30 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 69  t argument.  Thi
17f40 73 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e  s code is design
17f50 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
17f60 20 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63 61    to check if ca
17f70 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  lling the functi
17f80 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61 6e  on will raise an
17f90 20 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e   exception (i.e.
17fa0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
17fb0 74 68 65 20 61 63 74 75 61 6c 20 72 65 73 75 6c  the actual resul
17fc0 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
17fd0 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  n does not matte
17fe0 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d  r as long as no.
17ff0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
18000 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
18010 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ged)...      #..
18020 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
18030 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
18040 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
18050 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
18060 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
18070 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
18080 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
18090 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
180a0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
180b0 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e  et_directory 0 n
180c0 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d  ull..      }] ==
180d0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
180e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
180f0 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74   NOTE: Calling t
18100 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
18110 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
18120 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  unction does not
18130 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
18140 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 65 70    cause an excep
18150 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c  tion; therefore,
18160 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 61 69   it must be avai
18170 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20  lable (i.e...
18180 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 65       #       eve
18190 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75  n though it shou
181a0 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c  ld return a fail
181b0 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ure return code
181c0 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  in this..
181d0 20 23 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d   #       case)..
181e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
181f0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
18200 74 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  t sqlite3_win32_
18210 73 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d  set_directory...
18220 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $18230 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d channel yes\n... 18240 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 18250 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does 18260 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 our caller want 18270 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 to reset the di 18280 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 rectories?.. 18290 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 182a0 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 f {$reset} then
182b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
182c0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
182d0 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20  : Now make sure
182e0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
182f0 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
18300 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20  tories are..
18310 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
18320 73 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c  set their defaul
18330 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20  t values, which
18340 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66  should be null f
18350 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20  or both...
18360 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63      #       Sinc
18370 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  e the sqlite3_wi
18380 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
18390 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76  y function is av
183a0 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  ailable,..
183b0 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20      #       use
183c0 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  it...          #
183d0 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 20  ..          for
183e0 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24  {set index 1} {$183f0 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 index < 3} {incr 18400 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 index} {.. 18410 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 18420 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 18430 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 18440 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 18450 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 18460 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 18470 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 18480 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 18490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 184a0 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 sqlite3_win3 184b0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 184c0 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20$index null..
184d0 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c           } resul
184e0 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
184f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
18500 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 18510 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 18530 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite 18540 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 18550 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c ctory("$index \
18560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18570 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20      ", null)...
18580 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e  ok: " $result \n 18590 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 185a0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 185b0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
185c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
185d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
185e0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
185f0 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  l sqlite3_win32_
18600 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20  set_directory("
18610 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20  $index \.. 18620 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e ", n 18630 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 ull)... error: " 18640 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
18650 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
18660 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
18670 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
18680 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
18690 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 186a0 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 no\n.... 186b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 186c0 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c TE: Does our cal 186d0 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 ler want to rese 186e0 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 t the directorie 186f0 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c s? This can onl 18700 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 18710 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 be performed 18720 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 if SQLite is loa 18730 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f ded and ready fo 18740 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 18750 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 18760 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 suite... 18770 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 18780 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73 53 {$reset && [isS
18790 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65  QLiteReady]} the
187a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
187b0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
187c0 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72  TE: Now make sur
187d0 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
187e0 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
187f0 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20  ectories are..
18800 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
18810 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61  reset their defa
18820 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63  ult values, whic
18830 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c  h should be null
18840 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20   for both...
18850 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69        #       Si
18860 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f  nce the sqlite3_
18870 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
18880 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  ory function doe
18890 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20  s not..
188a0 20 23 20 20 20 20 20 20 20 61 70 70 65 61 72 20   #       appear
188b0 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c  to be available,
188c0 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 69 61   use the associa
188d0 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  ted PRAGMA comma
188e0 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23  nds..          #
188f0 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 2e 0d         instead..
18900 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
18910 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
18920 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20  directory [list
18930 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
18940 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f  tory temp_store_
18950 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20  directory] {..
18960 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71            set sq
18970 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50  l [appendArgs "P
18980 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f  RAGMA " $directo 18990 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a ry " = \"\";"].. 189a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 189b0 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 {[catch {execut 189c0 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c eSql$sql} resul
189d0 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
189e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
189f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 18a00 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 18a20 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 ---- execute PRA 18a30 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 GMA "$directory
18a40 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d   "... ok: \"" \.
18a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18a60 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d     $result \"\n] 18a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 18a80 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 18a90 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
18aa0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
18ab0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18ac0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63        "---- exec
18ad0 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69  ute PRAGMA " $di 18ae0 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 rectory "... err 18af0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 18b00 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 18b10 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
18b20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
18b30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
18b40 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
18b50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18b60 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73  NOTE: Finally, s
18b70 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20  how the current
18b80 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
18b90 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
18ba0 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
18bb0 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20     directories.
18bc0 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62   This can only b
18bd0 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53  e performed if S
18be0 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d  QLite is loaded.
18bf0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
18c00 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65  nd ready for use
18c10 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
18c20 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
18c30 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74      if {[isSQLit
18c40 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
18c50 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
18c60 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74   directory [list
18c70 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
18c80 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65  ctory temp_store
18c90 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20  _directory] {..
18ca0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $18cb0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 18cc0 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 rgs "---- checki 18cd0 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 ng "$directory
18ce0 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20  "... "]....
18cf0 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70       set sql [ap
18d00 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41  pendArgs "PRAGMA
18d10 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b   " $directory \; 18d20 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 18d30 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 f {[catch {execu 18d40 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 teSql$sql scala
18d50 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d  r} result] == 0}
18d60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18d70 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 18d80 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 18d90 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 "ok: \""$result
18da0 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20   \"\n]..
18db0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
18dc0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 18dd0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 18de0 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c gs "error: " \n\ 18df0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
18e00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
18e10 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
18e20 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
18e30 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73  oc loadSQLiteTes
18e40 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e  tSettings { chan
18e50 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20  nel {suffix ""}
18e60 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
18e70 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
18e80 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c    # NOTE: Skip l
18e90 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 74 69  oading the setti
18ea0 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 73 61  ngs if their usa
18eb0 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  ge has been disa
18ec0 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  bled...      #..
18ed0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
18ee0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
18ef0 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 29  iteTestSettings)
18f00 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
18f10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18f20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f  NOTE: Load custo
18f30 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f  m per-user and/o
18f40 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20  r per-host test
18f50 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
18f60 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18f70 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
18f80 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  ts ::tcl_platfor
18f90 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b  m(user)]} then {
18fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
18fb0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
18fc0 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
18fd0 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74  [getCommonDirect
18fe0 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ory] \..
18ff0 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
19000 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66  s settings $suff 19010 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 ix .$::tcl_plat
19020 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c  form(user) .eagl
19030 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e]]....
19040 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
19050 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46  s $userSettingsF 19060 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 19070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 19080 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
19090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
190a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 190b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 190d0 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 "---- loading p 190e0 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 er-user test set 190f0 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 19100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19110 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67$userSetting
19120 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c  sFileName \"...\
19130 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
19140 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
19150 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70 6c               upl
19170 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75  evel 1 [list sou
19180 72 63 65 20 24 75 73 65 72 53 65 74 74 69 6e 67  rce $userSetting 19190 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 sFileName].. 191a0 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d } error] 191b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 191c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
191d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
191f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 19200 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 19220 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 19230 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 iled to load per 19240 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73 20 66 -user settings f 19250 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
19270 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
19280 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a  Name "\", error:
19290 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 192a0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 192b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 192c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 }.. } 192d0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 192e0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
192f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
19300 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 19310 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 19320 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 19330 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 19340 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 pped loading per 19350 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 -user test setti 19360 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19380 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46$userSettingsF
19390 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20  ileName "\", it
193a0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e  does not exist\n
193b0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
193c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
193d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
193e0 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23       ###########
193f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19420 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
19430 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
19440 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70  o exists ::tcl_p
19450 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20  latform(host)]}
19460 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
19470 20 20 73 65 74 20 68 6f 73 74 53 65 74 74 69 6e    set hostSettin
19480 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  gsFileName [file
19490 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e   join [getCommon
194a0 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20  Directory] \..
194b0 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70              [app
194c0 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73  endArgs settings
194d0 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63   $suffix .$::tc
194e0 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29  l_platform(host)
194f0 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20   .eagle]]....
19500 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
19510 20 65 78 69 73 74 73 20 24 68 6f 73 74 53 65 74   exists $hostSet 19520 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 tingsFileName]} 19530 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19540 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
19550 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
19560 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 19570 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 19580 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 19590 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 "---- loa 195a0 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 ding per-host te 195b0 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 st settings file 195c0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 195d0 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53$hostS
195e0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
195f0 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20  \"...\n]..
19600 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
19610 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
19620 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
19630 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
19640 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73 74 53  st source $hostS 19650 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 19660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 19670 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 19690 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
196a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
196b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 196c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 196d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 196e0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 196f0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f NG: failed to lo 19700 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 ad per-host sett 19710 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 19720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19730 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e$hostSettin
19740 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20  gsFileName "\",
19750 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 19760 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 19770 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 19780 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 19790 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 197a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
197b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
197d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 197e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 19800 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 -- skipped loadi 19810 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 ng per-host test 19820 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 19830 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 19840 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74$hostSet
19850 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c  tingsFileName "\
19860 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
19870 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  xist\n"]..
19880 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
19890 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
198a0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
198b0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e  ....    proc run
198c0 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67  SQLiteTestProlog
198d0 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue {} {..      #
198e0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
198f0 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72  Skip running our
19900 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65   custom prologue
19910 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65   if the main one
19920 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20   has been..
19930 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64   #       skipped
19940 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
19950 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
19960 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75  sts ::no(prologu
19970 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20  e.eagle)]} then
19980 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
19990 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f        # NOTE: Lo
199a0 61 64 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63  ad the "before-c
199b0 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74  onstraints" cust
199c0 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f  om per-user and/
199d0 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20  or per-host..
199e0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
199f0 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d  t settings now..
19a00 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
19a10 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c      uplevel 1 [l
19a20 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65  ist loadSQLiteTe
19a30 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65  stSettings $::te 19a40 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f st_channel .befo 19a50 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 re].... # 19a60 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 19a70 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 5b : Check if the [ 19a80 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 object] command 19a90 69 73 20 61 76 61 69 6c 61 62 6c 65 3b 20 69 66 is available; if 19aa0 20 6e 6f 74 2c 20 61 64 64 20 73 6f 6d 65 0d 0a not, add some.. 19ab0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 19ac0 73 68 69 6d 73 20 74 6f 20 6d 61 6b 65 20 74 68 shims to make th 19ad0 65 20 74 65 73 74 20 73 75 69 74 65 20 72 75 6e e test suite run 19ae0 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a 20 20 20 20 smoother... 19af0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 19b00 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a heckForSQLiteObj 19b10 65 63 74 43 6f 6d 6d 61 6e 64 20 24 3a 3a 74 65 ectCommand$::te
19b20 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
19b30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19b40 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69   # NOTE: Determi
19b50 6e 65 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  ne the names of
19b60 74 68 65 20 6e 61 74 69 76 65 20 70 6c 61 74 66  the native platf
19b70 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63  orm and architec
19b80 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ture...        #
19b90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 6c  ..        set pl
19ba0 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64  atform [getBuild
19bb0 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 5d 0d 0a  Platform true]..
19bc0 20 20 20 20 20 20 20 20 73 65 74 20 61 72 63 68          set arch
19bd0 69 74 65 63 74 75 72 65 20 5b 61 72 63 68 69 74  itecture [archit
19be0 65 63 74 75 72 65 46 6f 72 50 6c 61 74 66 6f 72  ectureForPlatfor
19bf0 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a  m $platform].... 19c00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19c10 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 19c20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 the platform and 19c30 20 61 72 63 68 69 74 65 63 74 75 72 65 20 75 73 architecture us 19c40 65 64 20 74 6f 20 68 65 6c 70 20 6c 6f 63 61 74 ed to help locat 19c50 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 e the.. # 19c60 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 62 75 native bu 19c70 69 6c 64 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20 ild files... 19c80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 19c90 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
19ca0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
19cb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19cc0 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 66  "---- platform f
19cd0 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69  or locating nati
19ce0 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69  ve build files i
19cf0 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  s \"" \..
19d00 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c       $platform \ 19d10 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 "\n].... 19d20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
19d30 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19d40 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19d50 20 22 2d 2d 2d 2d 20 61 72 63 68 69 74 65 63 74   "---- architect
19d60 75 72 65 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67  ure for locating
19d70 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69   native build fi
19d80 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20  les is \"" \..
19d90 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69            $archi 19da0 74 65 63 74 75 72 65 20 5c 22 5c 6e 5d 0d 0a 0d tecture \"\n]... 19db0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 19dc0 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 19dd0 64 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6e 66 d a list of conf 19de0 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 iguration files 19df0 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d that we handle.. 19e00 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 19e10 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 46 69 set configFi 19e20 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d leNames [list \. 19e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 19e40 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 19e50 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 dll.config].... 19e60 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 19e70 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 19e80 61 20 6c 69 73 74 20 6f 66 20 61 75 78 69 6c 69 a list of auxili 19e90 61 72 79 20 4d 61 6e 61 67 65 64 20 44 65 62 75 ary Managed Debu 19ea0 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 gging Assistants 19eb0 20 28 4d 44 41 29 0d 0a 20 20 20 20 20 20 20 20 (MDA).. 19ec0 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 # configur 19ed0 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 ation files that 19ee0 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 we handle... 19ef0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 19f00 73 65 74 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c set mdaConfigFil 19f10 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a eNames [list \.. 19f20 20 20 20 20 20 20 20 20 20 20 20 20 45 61 67 6c Eagl 19f30 65 53 68 65 6c 6c 33 32 2e 65 78 65 2e 6d 64 61 eShell32.exe.mda 19f40 2e 63 6f 6e 66 69 67 20 49 6e 73 74 61 6c 6c 65 .config Installe 19f50 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 r.exe.mda.config 19f60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19f70 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e test.exe.mda.con 19f80 66 69 67 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 fig testlinq.exe 19f90 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 .mda.config \.. 19fa0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 65 teste 19fb0 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 f6.exe.mda.confi 19fc0 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d g].... #. 19fd0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 19fe0 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 Build the list 19ff0 6f 66 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 of external file 1a000 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 1a010 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a 20 20 20 20 . Some of.. 1a020 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 73 # thes 1a030 65 20 66 69 6c 65 73 20 6d 61 79 20 62 65 20 6e e files may be n 1a040 61 74 69 76 65 20 61 6e 64 2f 6f 72 20 6d 61 6e ative and/or man 1a050 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 aged assemblies 1a060 74 68 61 74 20 61 72 65 0d 0a 20 20 20 20 20 20 that are.. 1a070 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72 # requir 1a080 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 76 61 ed to perform va 1a090 72 69 6f 75 73 20 74 65 73 74 73 2e 0d 0a 20 20 rious tests... 1a0a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1a0b0 20 73 65 74 20 65 78 74 65 72 6e 61 6c 46 69 6c set externalFil 1a0c0 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a eNames [list \.. 1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 1a0e0 65 20 6a 6f 69 6e 20 45 6e 74 69 74 79 46 72 61 e join EntityFra 1a0f0 6d 65 77 6f 72 6b 20 6c 69 62 20 5b 73 74 72 69 mework lib [stri 1a100 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 46 78 20 ng map [list Fx 1a110 22 22 5d 20 5b 73 74 72 69 6e 67 20 5c 0d 0a 20 ""] [string \.. 1a120 20 20 20 20 20 20 20 20 20 20 20 6d 61 70 20 5b map [ 1a130 6c 69 73 74 20 6e 65 74 46 78 34 35 31 20 6e 65 list netFx451 ne 1a140 74 46 78 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 tFx45] [getBuild 1a150 4e 65 74 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 NetFx]]] EntityF 1a160 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a ramework.dll]].. 1a170 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a180 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui 1a190 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e ld the list of n 1a1a0 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 ative assembly f 1a1b0 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 1a1c0 64 6c 65 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 dle. The.. 1a1d0 20 20 20 23 20 20 20 20 20 20 20 72 65 61 73 6f # reaso 1a1e0 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 n the "System.Da 1a1f0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 20 66 ta.SQLite.dll" f 1a200 69 6c 65 20 69 73 20 69 6e 63 6c 75 64 65 64 20 ile is included 1a210 68 65 72 65 20 69 73 0d 0a 20 20 20 20 20 20 20 here is.. 1a220 20 23 20 20 20 20 20 20 20 62 65 63 61 75 73 65 # because 1a230 20 69 74 20 63 6f 75 6c 64 20 62 65 20 74 68 65 it could be the 1a240 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 1a250 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 mbly... # 1a260 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 .. set na 1a270 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c tiveFileNames [l 1a280 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 1a290 20 20 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 53 sqlite3.dll S 1a2a0 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 1a2b0 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 l System.Data.SQ 1a2c0 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 Lite.dll].... 1a2d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a2e0 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 1a2f0 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 e list of manage 1a300 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 d assembly files 1a310 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e that we handle. 1a320 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a330 20 20 20 20 20 73 65 74 20 6d 61 6e 61 67 65 64 set managed 1a340 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 FileNames [list 1a350 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 1a360 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1a370 65 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 e.dll System.Dat 1a380 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c a.SQLite.Linq.dl 1a390 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 1a3a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1a3b0 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a ite.EF6.dll].... 1a3c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a3d0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 # NOTE: Remov 1a3e0 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 e any test const 1a3f0 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 65 raints that refe 1a400 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 r to the native 1a410 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 and/or.. 1a420 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 1a430 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 assembly files t 1a440 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e hat we handle un 1a450 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66 less forbidden f 1a460 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 rom.. # 1a470 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a doing so... 1a480 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a490 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1a4a0 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 ists ::no(sqlite 1a4b0 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 RemoveConstraint 1a4c0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 1a4d0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 1a4e0 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 ileName$configF
1a4f0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
1a500 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
1a510 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
1a520 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 1a530 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 1a540 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1a550 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 1a560 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e$mdaConfigFileN
1a570 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
1a580 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
1a590 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1a5a0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 1a5b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1a5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 1a5d0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 ach fileName$ex
1a5e0 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
1a5f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1a600 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
1a610 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
1a620 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  _ [file tail $fi 1a630 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 leName]].. 1a640 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1a650 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 1a660 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e ame$nativeFileN
1a670 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
1a680 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
1a690 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1a6a0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 1a6b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1a6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 1a6d0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 ach fileName$ma
1a6e0 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  nagedFileNames {
1a6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1a700 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  moveConstraint [
1a710 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
1a720 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20   $fileName].. 1a730 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1a740 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 1a750 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1a760 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 : Skip all Syste 1a770 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 m.Data.SQLite re 1a780 6c 61 74 65 64 20 66 69 6c 65 20 68 61 6e 64 6c lated file handl 1a790 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a ing (deleting,.. 1a7a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1a7b0 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 copying, and loa 1a7c0 64 69 6e 67 29 20 69 66 20 69 6e 73 74 72 75 63 ding) if instruc 1a7d0 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ted... #. 1a7e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 1a7f0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 1a800 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 sqliteFiles)]} t 1a810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a820 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1a830 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 1a840 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 g to delete any 1a850 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 files if instruc 1a860 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ted... 1a870 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 1a880 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1a890 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 1a8a0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 1a8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 1a8c0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1a8d0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 1a8e0 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 ConfigFiles)]} t 1a8f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a900 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 1a910 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c eName$configFil
1a920 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
1a930 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
1a940 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66  eteBinaryFile $f 1a950 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName.. 1a960 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1a970 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1a980 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1a990 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 1a9a0 6c 65 74 65 53 71 6c 69 74 65 45 78 74 65 72 6e leteSqliteExtern 1a9b0 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 alFiles)]} then 1a9c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a9d0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 1a9e0 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 e$mdaConfigFile
1a9f0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
1aa00 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
1aa10 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c  teBuildFile $fil 1aa20 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 1aa30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1aa40 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1aa50 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e fileName$extern
1aa60 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  alFileNames {..
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1aa80 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69  ryDeleteBinaryFi
1aa90 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  le $fileName.. 1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1aab0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 1aac0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1aad0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1aae0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e no(deleteSqliteN 1aaf0 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 ativeFiles)]} th 1ab00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ab10 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1ab20 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 xists ::no(delet 1ab30 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 eSqliteImplicitF 1ab40 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 1ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ab60 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 1ab70 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
1ab80 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
1ab90 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
1aba0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 1abb0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 1abc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1abd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1abe0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1abf0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1ac00 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d eleteSqliteNonIm 1ac10 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 1ac20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1ac30 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1ac40 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 1ac50 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f leteSqlitePlatfo 1ac60 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a rmFiles)] && \.. 1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ac80 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 1ac90 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
1aca0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
1acc0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 1acd0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 1ace0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1acf0 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 tryDeleteA 1ad00 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
1ad10 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  e $platform.. 1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 1ad30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ad40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1ad50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1ad60 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 1ad70 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 74 leteSqliteArchit 1ad80 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 ectureFiles)] && 1ad90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ada0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 1adb0 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 length$architec
1adc0 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ture] > 0} then
1add0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1ade0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
1adf0 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 1ae00 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 1ae20 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 yDeleteAssembly 1ae30 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69$fileName $archi 1ae40 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 tecture.. 1ae50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1ae70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 1ae80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1ae90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 1aea0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 1aeb0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 1aec0 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d teManagedFiles)] 1aed0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1aee0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1aef0 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 fileName$manage
1af00 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1af20 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
1af30 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 1af40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1af50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1af60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1af70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1af80 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 # NOTE: Check f 1af90 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 or the "autoSele 1afa0 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ct" runtime opti 1afb0 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c on. If present, 1afc0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1afd0 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 attempt to a 1afe0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c utomatically sel 1aff0 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76 ect the first av 1b000 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 ailable.. 1b010 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 # build 1b020 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 (or "release") 1b030 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 of SQLite and Sy 1b040 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1b050 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1b060 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 for use with 1b070 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 1b080 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1b090 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 if {[ha 1b0a0 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 sRuntimeOption a 1b0b0 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e utoSelect]} then 1b0c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b0d0 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 if {![checkForSQ 1b0e0 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 LiteBuilds$::te
1b0f0 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d  st_channel true]
1b100 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b110 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
1b120 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24  SQLiteReleases $1b130 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 ::test_channel t 1b140 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rue.. 1b150 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 1b160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1b170 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1b180 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f : Skip trying to 1b190 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c verify the buil 1b1a0 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 69 d directory if i 1b1b0 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 nstructed;.. 1b1c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 1b1d0 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 herwise, make su 1b1e0 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65 re it actually e 1b1f0 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68 xists or halt th 1b200 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 e entire.. 1b210 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 1b220 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 69 ing process if i 1b230 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 1b240 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1b250 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 1b260 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1b270 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 65 (verifyBuildDire 1b280 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d ctory)]} then {. 1b290 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1b2b0 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e TE: At this poin 1b2c0 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 t, the build dir 1b2d0 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 73 ectory MUST exis 1b2e0 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 20 t as a.. 1b2f0 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 69 # vali 1b300 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 d directory for 1b310 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 the testing proc 1b320 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e ess to continue. 1b330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1b340 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 1b350 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 directory [getB 1b360 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 0d 0a uildDirectory].. 1b370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1b380 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 {![file exists 1b390 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c$directory] || \
1b3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1b3b0 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63    ![file isdirec
1b3c0 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 5d  tory $directory] 1b3d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b3e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1b3f0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1b400 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f 20 61 Just prior to a 1b410 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20 ctually halting 1b420 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 the testing proc 1b430 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ess,.. 1b440 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20 # add 1b450 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 20 an error to the 1b460 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a test log file... 1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 1b480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 1b490 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1b4a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b4b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b4c0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c        "---- coul
1b4d0 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69  d not verify bui
1b4e0 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22  ld directory \""
1b4f0 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1b510 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e "\", all testin 1b520 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a g halted\n"].... 1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 1b540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1b550 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 61 NOTE: Raising a 1b560 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 66 72 script error fr 1b570 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73 68 om this point sh 1b580 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 ould halt.. 1b590 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1b5a0 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 1b5b0 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 cess... 1b5c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b5d0 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 error [app 1b5e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f "co 1b600 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 uld not verify b 1b610 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c uild directory \ 1b620 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d ""$directory \.
1b630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1b640 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74     "\", all test
1b650 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20  ing halted"]..
1b660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1b670 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1b680 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1b690 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
1b6a0 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 61  trying to copy a
1b6b0 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74  ny files if inst
1b6c0 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ructed...
1b6d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1b6e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1b6f0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
1b700 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
1b710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1b720 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1b730 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 43  ::no(copySqliteC
1b740 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68  onfigFiles)]} th
1b750 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1b760 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
1b770 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65  Name $configFile 1b780 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 1b790 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 1b7a0 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e BuildFile$fileN
1b7b0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
1b7c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1b7d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1b7e0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
1b7f0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71  ists ::no(copySq
1b800 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65  liteExternalFile
1b810 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
1b820 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1b830 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1b840 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d 61 6e  TE: Copy the Man
1b850 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41  aged Debugging A
1b860 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 20  ssistants (MDA)
1b870 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  configuration..
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
1b890 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20 74 68       file for th
1b8a0 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f  e Eagle shell to
1b8b0 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75   the build outpu
1b8c0 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  t directory,..
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
1b8e0 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e 67 20      while using
1b8f0 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65  each of the name
1b900 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75 73  s of the various
1b910 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a 20 20   legacy test..
1b920 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
1b930 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 73 2e      executables.
1b940 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 6c 70    This will help
1b950 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
1b960 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20  at all the..
1b970 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1b980 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 20 72    legacy tests r
1b990 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c 79 20  un with exactly
1b9a0 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66 20  the same set of
1b9b0 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20  Managed..
1b9c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 44         #       D
1b9d0 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61  ebugging Assista
1b9e0 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d  nts configured..
1b9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
1ba00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ba10 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
1ba20 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e   $mdaConfigFileN 1ba30 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 1ba40 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 tryCopyB 1ba50 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 inaryFile EagleS 1ba60 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e hell.exe.mda.con 1ba70 66 69 67 20 22 22 20 24 66 69 6c 65 4e 61 6d 65 fig ""$fileName
1ba80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ba90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
1baa0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1bab0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79      # NOTE: Copy
1bac0 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69   the external bi
1bad0 6e 61 72 69 65 73 2c 20 69 66 20 61 6e 79 2c 20  naries, if any,
1bae0 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  to the directory
1baf0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20   that..
1bb00 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
1bb10 74 61 69 6e 73 20 74 68 65 20 45 61 67 6c 65 20  tains the Eagle
1bb20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 69 73 20  shell.  This is
1bb30 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20 74  typically used t
1bb40 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20  o make..
1bb50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75        #       su
1bb60 72 65 20 61 73 73 65 6d 62 6c 69 65 73 20 72 65  re assemblies re
1bb70 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the
1bb80 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 73 74 65  ones being teste
1bb90 64 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20  d are..
1bba0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61       #       ava
1bbb0 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 20 74 68  ilable during th
1bbc0 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
1bbd0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...
1bbe0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1bbf0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
1bc00 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c  ame $externalFil 1bc10 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 1bc20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 1bc30 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 24 66 yExternalFile$f
1bc40 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
1bc50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1bc60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1bc70 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1bc80 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
1bc90 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69  pySqliteNativeFi
1bca0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
1bcd0 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 73  NOTE: If the tes
1bce0 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6c 69  t platform is li
1bcf0 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74  kely the default
1bd00 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20   for this..
1bd10 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1bd20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f 20 74   machine, also t
1bd30 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65 20 6e  ry to copy the n
1bd40 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f 20 74  ative files to t
1bd50 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..
1bd60 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79    #       binary
1bd70 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20   location...
1bd80 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1bd90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1bda0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
1bdb0 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c  o(copySqliteImpl
1bdc0 69 63 69 74 46 69 6c 65 73 29 5d 20 26 26 20 5c  icitFiles)] && \
1bdd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1bde0 20 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42 75      [isDefaultBu
1bdf0 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 65  ildPlatform true
1be00 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1be10 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1be20 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 1be30 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1be50 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 1be60 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 y$fileName..
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1be90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
1bea0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1beb0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
1bec0 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c  teNonImplicitFil
1bed0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1bef0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1bf00 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50  ::no(copySqliteP
1bf10 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26  latformFiles)] &
1bf20 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
1bf30 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1bf40 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 1bf50 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a m] > 0} then {.. 1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1bf70 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 1bf80 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
1bf90 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
1bfa0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
1bfb0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  pyAssembly $file 1bfc0 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a Name$platform..
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bfe0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1bff0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1c000 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1c010 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1c020 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69  (copySqliteArchi
1c030 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
1c040 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
1c050 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1c060 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 1c070 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 1c080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c090 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 1c0a0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
1c0b0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c0d0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24  ryCopyAssembly $1c0e0 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 fileName$archit
1c0f0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
1c100 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1c110 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c130 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1c150 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1c160 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d  ::no(copySqliteM
1c170 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74  anagedFiles)]} t
1c180 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1c190 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
1c1a0 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69  eName $managedFi 1c1b0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 1c1c0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 1c1d0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
1c1e0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
1c1f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1c200 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1c210 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
1c220 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1c230 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
1c240 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65  to load any file
1c250 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e  s if instructed.
1c260 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1c270 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
1c280 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
1c290 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29  loadSqliteFiles)
1c2a0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1c2b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1c2c0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f  o exists ::no(lo
1c2d0 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74  adSqliteImplicit
1c2e0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
1c2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1c300 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
1c310 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1c320 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  e.dll..
1c330 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1c340 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1c350 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53  xists ::no(loadS
1c360 71 6c 69 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d  qliteLinqFiles)]
1c370 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1c380 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41          tryLoadA
1c390 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44  ssembly System.D
1c3a0 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
1c3b0 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dll..
1c3c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1c3d0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1c3e0 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c  sts ::no(loadSql
1c3f0 69 74 65 45 66 36 46 69 6c 65 73 29 5d 7d 20 74  iteEf6Files)]} t
1c400 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1c410 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
1c420 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
1c430 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d  .SQLite.EF6.dll.
1c440 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1c460 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1c470 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e  ::no(loadSqliteN
1c480 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29  onImplicitFiles)
1c490 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1c4a0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
1c4b0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
1c4c0 6c 6f 61 64 53 71 6c 69 74 65 50 6c 61 74 66 6f  loadSqlitePlatfo
1c4d0 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a  rmFiles)] && \..
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c4f0 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
1c500 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d   $platform] > 0} 1c510 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1c520 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 tryLoad 1c530 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 1c540 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 Data.SQLite.dll 1c550 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20$platform..
1c560 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
1c570 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1c580 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1c590 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 41 72 63  no(loadSqliteArc
1c5a0 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d  hitectureFiles)]
1c5b0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1c5c0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1c5d0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 1c5e0 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 1c5f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c600 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d tryLoadAssem 1c610 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e bly System.Data. 1c620 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 SQLite.dll$arch
1c630 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20  itecture..
1c640 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1c650 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c660 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1c670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
1c680 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
1c690 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1c6a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1c6b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c6c0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 1c6d0 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 sion of \"sqlite 1c6e0 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 3.dll\"... " \.. 1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 1c700 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 ile version [get 1c710 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 BinaryFileName s 1c720 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d qlite3.dll]] \n] 1c730 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1c740 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 1c750 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1c760 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1c770 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1c790 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
1c7a0 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65  of \"SQLite.Inte
1c7b0 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c  rop.dll\"... " \
1c7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c7d0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
1c7e0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
1c7f0 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e   SQLite.Interop.
1c800 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  dll]] \n]..
1c810 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1c820 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1c830 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1c840 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1c850 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1c860 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 1c870 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 version of \"Sy 1c880 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1c890 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 .dll\"... " \.. 1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 1c8b0 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 1c8c0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 inaryFileName Sy 1c8d0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1c8e0 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 .dll]] \n].. 1c8f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1c900 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 1c910 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1c920 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1c930 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1c940 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
1c950 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
1c960 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1c970 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20  e.Linq.dll\"...
1c980 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1c990 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e     [file version
1c9a0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
1c9b0 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
1c9c0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d  SQLite.Linq.dll]
1c9d0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ] \n]..        }
1c9e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
1c9f0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
1ca00 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1ca10 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1ca20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ca30 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 1ca40 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d sion of \"System 1ca50 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 .Data.SQLite.EF6 1ca60 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 .dll\"... " \.. 1ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 1ca80 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 1ca90 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 inaryFileName Sy 1caa0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1cab0 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a .EF6.dll]] \n].. 1cac0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1cad0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 1cae0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
1caf0 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  m] > 0} then {..
1cb00 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch
1cb10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1cb20 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1cb30 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1cb40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cb50 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 1cb60 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 ersion of \""$p
1cb70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20  latform \..
1cb80 20 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c             "/sql
1cb90 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  ite3.dll\"... "
1cba0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
1cbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1cbc0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
1cbd0 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20  ame sqlite3.dll
1cbe0 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d  $platform]] \n]. 1cbf0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 1cc00 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 1cc10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1cc20 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1cc30 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1cc40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1cc50 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
1cc60 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70  ersion of \"" $p 1cc70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 latform \.. 1cc80 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c "/SQL 1cc90 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c ite.Interop.dll\ 1cca0 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 "... " [file ver 1ccb0 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 sion \.. 1ccc0 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 1ccd0 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 ryFileName SQLit 1cce0 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 e.Interop.dll$p
1ccf0 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20  latform]] \n]..
1cd00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
1cd10 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
1cd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1cd30 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1cd40 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1cd50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1cd60 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 1cd70 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 sion of \""$pla
1cd80 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20  tform \..
1cd90 20 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65           "/Syste
1cda0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1cdb0 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76  l\"... " [file v
1cdc0 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
1cdd0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
1cde0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
1cdf0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1ce00 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20  dll $platform]] 1ce10 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1ce20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1ce30 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1ce40 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 ng length$archi
1ce50 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68  tecture] > 0} th
1ce60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1ce70 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1ce80 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1ce90 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1cea0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1ceb0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1cec0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 1ced0 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72 \""$architectur
1cee0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1cef0 20 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64       "/sqlite3.d
1cf00 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20  ll\"... " [file
1cf10 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  version \..
1cf20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
1cf30 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71  inaryFileName sq
1cf40 6c 69 74 65 33 2e 64 6c 6c 20 24 61 72 63 68 69  lite3.dll $archi 1cf50 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 tecture]] \n].. 1cf60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1cf70 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 1cf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1cf90 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1cfa0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1cfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1cfc0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
1cfd0 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63  sion of \"" $arc 1cfe0 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 hitecture \.. 1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 "/S 1d000 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 1d010 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 l\"... " [file v 1d020 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ersion \.. 1d030 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 [getBi 1d040 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c naryFileName SQL 1d050 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 ite.Interop.dll 1d060 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20$architecture]]
1d070 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1d080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  ....          ca
1d090 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1d0a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1d0b0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1d0c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1d0d0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 1d0e0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 1d0f0 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 "$architecture
1d100 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d110 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61     "/System.Data
1d120 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e  .SQLite.dll\"...
1d130 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e   " [file version
1d140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1d150 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69      [getBinaryFi
1d160 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61  leName System.Da
1d170 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61  ta.SQLite.dll $a 1d180 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e rchitecture]] \n 1d190 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1d1a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1d1b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1d1c0 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the 1d1d0 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 list of managed 1d1e0 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 assemblies for 1d1f0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 the current proc 1d200 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ess.. # 1d210 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 and report 1d220 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 on the System.Da 1d230 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 ta.SQLite relate 1d240 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 d ones... 1d250 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 1d260 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 1d270 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 1d280 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 1d290 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a assemblies [obj 1d2a0 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f ect invoke AppDo 1d2b0 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 main.CurrentDoma 1d2c0 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 in GetAssemblies 1d2d0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f ].... o 1d2e0 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 bject foreach as 1d2f0 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 sembly$assembli
1d300 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
1d310 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61    if {[string ma
1d320 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74  tch \{System.Dat
1d330 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d  a.SQLite* $assem 1d340 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bly]} then {.. 1d350 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1d360 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1d370 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1d380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d390 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c     "---- found l
1d3a0 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20  oaded assembly:
1d3b0 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d  " $assembly \n]. 1d3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1d3d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1d3e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1d3f0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 1d400 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1d410 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
1d420 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1d430 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e  - define constan
1d440 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e  ts for \"System.
1d450 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e  Data.SQLite\"...
1d460 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   "....
1d470 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1d480 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1d490 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1d4a0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
1d4c0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1d4d0 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f  SQLite3 DefineCo
1d4e0 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..
1d4f0 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74     } defineConst
1d500 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ants] == 0} then
1d510 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d520 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1d530 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1d540 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c s [formatList [l 1d550 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 sort \.. 1d560 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43$defineC
1d570 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e  onstants] <none>
1d580 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
1d590 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1d5a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1d5b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b test_channel unk 1d5c0 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 nown\n.. 1d5d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1d5e0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 1d5f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 1d600 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1d610 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
1d620 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65      "---- source
1d630 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79   version of \"Sy
1d640 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1d650 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20  .dll\"... "....
1d660 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
1d670 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1d680 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1d690 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
1d6a0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
1d6b0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
1d6c0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
1d6d0 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64  onnection Provid
1d6e0 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  erVersion..
1d6f0 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20       } version]
1d700 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1d710 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
1d720 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve 1d730 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the 1d740 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1d750 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e set version n 1d760 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ull.. 1d770 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1d780 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1d790 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1d7a0 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a  s $version \n].. 1d7b0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1d7c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d7d0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1d7e0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
1d7f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1d800 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1d810 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
1d820 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1d830 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1d850 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f -- source checko 1d860 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 ut of \"System.D 1d870 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 ata.SQLite.dll\" 1d880 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 1d890 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1d8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a . obj 1d8b0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 1d8c0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d8e0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1d8f0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 te.SQLiteConnect 1d900 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 ion ProviderSour 1d910 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 ceId.. 1d920 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 } sourceId] == 0 1d930 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1d940 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 1d950 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 g length$source
1d960 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  Id] == 0} then {
1d970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d980 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c  set sourceId nul
1d990 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
1d9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1d9b0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1d9c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1d9d0 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20$sourceId \n]..
1d9e0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
1d9f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1da00 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1da10 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a nnel unknown\n.. 1da20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1da30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1da40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1da50 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 OTE: Check the a 1da60 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 vailable builds 1da70 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 (and "releases") 1da80 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a of SQLite and.. 1da90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1daa0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1dab0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te... #.. 1dac0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 1dad0 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a SQLiteBuilds$::
1dae0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..
1daf0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
1db00 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a  LiteReleases $:: 1db10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 1db20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1db30 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 # NOTE: Now, 1db40 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 we need to know 1db50 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f if the SQLite co 1db60 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 re library is av 1db70 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 ailable.. 1db80 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 # (i.e. b 1db90 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 ecause the manag 1dba0 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 ed-only System.D 1dbb0 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d ata.SQLite assem 1dbc0 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 bly can.. 1dbd0 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 # load wi 1dbe0 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 thout it; howeve 1dbf0 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 r, it cannot do 1dc00 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 anything useful 1dc10 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 without.. 1dc20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 # it). I 1dc30 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 f we are using t 1dc40 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 he mixed-mode as 1dc50 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c sembly and we al 1dc60 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 ready.. # 1dc70 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 found it 1dc80 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 (above), this sh 1dc90 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 ould always succ 1dca0 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d eed... #. 1dcb0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 1dcc0 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 rSQLiteLibrary$
1dcd0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
1dce0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1dcf0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
1dd00 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  ck if the SQLite
1dd10 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
1dd20 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  y is available..
1dd30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1dd40 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
1dd50 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73  teInterop $::tes 1dd60 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 1dd70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1dd80 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 # NOTE: Check th 1dd90 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 e SQLite databas 1dda0 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 e and temporary 1ddb0 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 directories... 1ddc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ddd0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 1dde0 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 irectories$::te
1ddf0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
1de00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1de10 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
1de20 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
1de30 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65   various compile
1de40 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65  -time options ne
1de50 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20  eded for..
1de60 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63    #       test c
1de70 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20  onstraints were
1de80 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
1de90 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
1dea0 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20  .  There..
1deb0 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f    #       are so
1dec0 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  me compile-time
1ded0 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73  options that mus
1dee0 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e  t also have been
1def0 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20   enabled..
1df00 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68    #       for th
1df10 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
1df20 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ly in order to b
1df30 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f  e effective.  Fo
1df40 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20  r those..
1df50 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73   #       options
1df60 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73  , it will be ass
1df70 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73  umed that it was
1df80 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65   enabled for the
1df90 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20   interop..
1dfa0 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62    #       assemb
1dfb0 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61  ly if it was ena
1dfc0 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e  bled for the man
1dfd0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  aged assembly...
1dfe0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1dff0 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e     foreach defin
1e000 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20  eConstant [list
1e010 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  \..            C
1e020 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54  HECK_STATE COUNT
1e030 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e  _HANDLE DEBUG IN
1e040 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45  TEROP_CODEC INTE
1e050 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20  ROP_DEBUG \..
1e060 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
1e070 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54  _EXTENSION_FUNCT
1e080 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 49 4e 43  IONS INTEROP_INC
1e090 4c 55 44 45 5f 43 45 52 4f 44 20 5c 0d 0a 20 20  LUDE_CEROD \..
1e0a0 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
1e0b0 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 20  P_INCLUDE_EXTRA
1e0c0 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
1e0d0 53 45 45 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41  SEE INTEROP_LEGA
1e0e0 43 59 5f 43 4c 4f 53 45 20 5c 0d 0a 20 20 20 20  CY_CLOSE \..
1e0f0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
1e100 4c 4f 47 20 49 4e 54 45 52 4f 50 5f 54 45 53 54  LOG INTEROP_TEST
1e110 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52  _EXTENSION INTER
1e120 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
1e130 20 4e 45 54 5f 32 30 20 5c 0d 0a 20 20 20 20 20   NET_20 \..
1e140 20 20 20 20 20 20 20 4e 45 54 5f 33 35 20 4e 45         NET_35 NE
1e150 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f  T_40 NET_45 NET_
1e160 34 35 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  451 NET_COMPACT_
1e170 32 30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  20 \..
1e180 20 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41    PLATFORM_COMPA
1e190 43 54 46 52 41 4d 45 57 4f 52 4b 20 50 52 45 4c  CTFRAMEWORK PREL
1e1a0 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41  OAD_NATIVE_LIBRA
1e1b0 52 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20  RY RETARGETABLE
1e1c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
1e1d0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 54  QLITE_STANDARD T
1e1e0 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
1e1f0 20 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e   TRACE TRACE_CON
1e200 4e 45 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  NECTION \..
1e210 20 20 20 20 20 20 20 54 52 41 43 45 5f 44 45 54         TRACE_DET
1e220 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e  ECTION TRACE_HAN
1e230 44 4c 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41  DLE TRACE_PRELOA
1e240 44 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 5c  D TRACE_SHARED \
1e250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52  ..            TR
1e260 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 52  ACE_STATEMENT TR
1e270 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43  ACE_WARNING TRAC
1e280 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 5c  K_MEMORY_BYTES \
1e290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 53  ..            US
1e2a0 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f  E_ENTITY_FRAMEWO
1e2b0 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 52 4f 50  RK_6 USE_INTEROP
1e2c0 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45  _DLL USE_PREPARE
1e2d0 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a  _V2 WINDOWS] {..
1e2e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1e2f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
1e300 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70  heck if the comp
1e310 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option
1e320 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65  is listed in the
1e330 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20   list of..
1e340 20 20 20 20 23 20 20 20 20 20 20 20 22 64 65 66      #       "def
1e350 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b  ine constants" k
1e360 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20  ept track of by
1e370 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
1e380 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  mbly...
1e390 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   #..          ch
1e3a0 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69  eckForSQLiteDefi
1e3b0 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65  neConstant $::te 1e3c0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 st_channel$defi
1e3d0 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20  neConstant..
1e3e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1e3f0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1e400 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
1e410 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1e420 69 74 65 20 70 72 6f 76 69 64 65 72 20 77 61 73  ite provider was
1e430 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a   compiled with..
1e440 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1e450 73 75 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20  support for any
1e460 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61  encrypted databa
1e470 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ses...        #.
1e480 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
1e490 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a  veConstraint \..
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e4b0 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
1e4c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1e4d0 65 2e 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5d  e.INTEROP_CODEC]
1e4e0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
1e4f0 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69     [haveConstrai
1e500 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
1e510 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73        defineCons
1e520 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
1e530 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
1e540 49 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68  INCLUDE_SEE]} th
1e550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1e560 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
1e570 4f 54 45 3a 20 59 65 73 2c 20 61 64 64 20 67 65  OTE: Yes, add ge
1e580 6e 65 72 69 63 20 63 6f 6e 73 74 72 61 69 6e 74  neric constraint
1e590 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
1e5a0 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
1e5b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1e5c0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
1e5d0 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
1e5e0 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d  Lite.Encryption.
1e5f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1e600 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e610 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
1e620 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64  he current build
1e630 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c   year.  Basicall
1e640 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 65  y, this indicate
1e650 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
1e660 20 20 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e     which version
1e670 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f   of MSBuild and/
1e680 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  or Visual Studio
1e690 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20   was used to..
1e6a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
1e6b0 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62  mpile the assemb
1e6c0 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  ly binaries unde
1e6d0 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20  r test...
1e6e0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
1e6f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1e700 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 1e710 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 1e720 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. 1e730 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 SQLite build yea 1e740 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 r... ".... 1e750 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 set year [getB 1e760 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 uildYear].. 1e770 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 1e780 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 1e790 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a ldYear.$year]..
1e7a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1e7b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1e7c0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65 ppendArgs \"$ye
1e7d0 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ar \"\n]....
1e7e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1e7f0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
1e800 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 2e   current build .
1e810 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20  NET Framework.
1e820 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d  Basically, this.
1e830 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1e840 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 68   indicates which
1e850 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the
1e860 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 69  .NET Framework i
1e870 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  s being..
1e880 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79   #       used by
1e890 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69   the assembly bi
1e8a0 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73  naries under tes
1e8b0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
1e8c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1e8d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1e8f0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 1e900 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1e910 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 e build .NET Fra 1e920 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 mework... ".... 1e930 20 20 20 20 20 20 20 73 65 74 20 6e 65 74 46 78 set netFx 1e940 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d [getBuildNetFx] 1e950 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 1e960 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 1e970 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65 77 6f rgs buildFramewo 1e980 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 rk.$netFx]..
1e990 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1e9a0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1e9b0 6e 64 41 72 67 73 20 5c 22 20 24 6e 65 74 46 78 ndArgs \"$netFx
1e9c0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20   \"\n]....
1e9d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1e9e0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63  OTE: Check the c
1e9f0 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e  urrent build con
1ea00 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69  figuration.  Thi
1ea10 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  s should normall
1ea20 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
1ea30 20 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65     be either "De
1ea40 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65  bug" or "Release
1ea50 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
1ea60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1ea70 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 1ea80 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1ea90 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 1eaa0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1eab0 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 e build configur 1eac0 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 ation... ".... 1ead0 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 set config 1eae0 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c uration [getBuil 1eaf0 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d dConfiguration]. 1eb00 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 1eb10 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 1eb20 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 gs buildConfigur 1eb30 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 ation.$configur
1eb40 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ation]..
1eb50 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1eb60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1eb70 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 s \"$configurat
1eb80 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  ion \"\n]....
1eb90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1eba0 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73  # NOTE: Try to s
1ebb0 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70  etup an interrup
1ebc0 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  t callback using
1ebd0 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75   the script debu
1ebe0 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20  gger..        #
1ebf0 20 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20        that will
1ec00 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71  cancel all SQL q
1ec10 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65  ueries in progre
1ec20 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62  ss for all datab
1ec30 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ase..        #
1ec40 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73       connections
1ec50 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69   known to this i
1ec60 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
1ec70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1ec80 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1ec90 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74  s ::no(sqliteInt
1eca0 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d  erruptCallback)]
1ecb0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1ecc0 20 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72      setupDbInter
1ecd0 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a  ruptCallback $:: 1ece0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a test_channel$::
1ecf0 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20  test_log..
1ed00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
1ed10 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1ed20 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20  : Check for the
1ed30 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f  native runtime o
1ed40 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75  ption, which wou
1ed50 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a  ld mean we are..
1ed60 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1ed70 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d  using the mixed-
1ed80 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  mode assembly...
1ed90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1eda0 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69     checkForRunti
1edb0 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74  meOption $::test 1edc0 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d _channel native. 1edd0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1ede0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1edf0 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 eck if the test 1ee00 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 suite should cou 1ee10 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 nt the number of 1ee20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 connections.. 1ee30 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f # "o 1ee40 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 pened" and "clos 1ee50 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f ed" from the poo 1ee60 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 l when determini 1ee70 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 ng if a test.. 1ee80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 1ee90 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 ssed. Disabling 1eea0 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 this behavior i 1eeb0 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 s sometimes nece 1eec0 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 ssary (e.g... 1eed0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 # dur 1eee0 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 ing the release 1eef0 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 testing process) 1ef00 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 because there a 1ef10 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 re several.. 1ef20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 1ef30 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 s that rely on t 1ef40 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 he "opened from 1ef50 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e pool" count bein 1ef60 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 g greater.. 1ef70 20 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 # than 1ef80 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 zero. These tes 1ef90 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 ts may fail due 1efa0 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 to the non-deter 1efb0 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 ministic.. 1efc0 20 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 # behavi 1efd0 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 or of the CLR GC 1efe0 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 , even when ther 1eff0 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 e is no bug in t 1f000 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 he code.. 1f010 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 # being t 1f020 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ested... 1f030 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 1f040 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e ForRuntimeOption 1f050 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1f060 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d   noPoolCounts...
1f070 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1f080 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
1f090 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75  k if the test su
1f0a0 69 74 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73  ite should use s
1f0b0 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1f0c0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1f0d0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75        checkForRu
1f0e0 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74  ntimeOption $::t 1f0f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 est_channel shar 1f100 65 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 edCache.... 1f110 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1f120 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 NOTE: Report the 1f130 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 resource usage 1f140 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 prior to running 1f150 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 any tests... 1f160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f170 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f reportSQLiteReso 1f180 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 urces$::test_ch
1f190 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
1f1a0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1f1b0 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73  TE: Grab the lis
1f1c0 74 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75  t of native modu
1f1d0 6c 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72  les for the curr
1f1e0 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d  ent process and.
1f1f0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1f200 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53   report on the S
1f210 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1f220 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d  e related ones..
1f230 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1f240 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1f250 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1f260 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1f270 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73       set modules
1f280 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
1f290 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1f2a0 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74   System.Diagnost
1f2b0 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43  ics.Process.GetC
1f2c0 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f  urrentProcess Mo
1f2d0 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  dules]....
1f2e0 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
1f2f0 63 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65  ch -alias module
1f300 20 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20   $modules {.. 1f310 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1f320 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1f330 54 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 The module file 1f340 6e 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 name here must b 1f350 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 e normalized... 1f360 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1f370 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 set fi 1f380 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 leName [file nor 1f390 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 malize [$module
1f3a0 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20  FileName]]....
1f3b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
1f3c0 74 72 69 6e 67 20 6d 61 74 63 68 20 2d 6e 6f 63  tring match -noc
1f3d0 61 73 65 20 2a 2f 73 71 6c 69 74 65 33 2e 64 6c  ase */sqlite3.dl
1f3e0 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  l $fileName]} th 1f3f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1f400 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1f410 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1f420 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1f430 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1f440 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51   found loaded SQ
1f450 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72  Lite native libr
1f460 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d  ary module: " \.
1f470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f480 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d     $fileName \n] 1f490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 1f4a0 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 6e 67 20 elseif {[string 1f4b0 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 match \.. 1f4c0 20 20 20 20 20 20 20 20 20 2d 6e 6f 63 61 73 65 -nocase 1f4d0 20 2a 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f */SQLite.Intero 1f4e0 70 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d p.dll$fileName]
1f4f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1f500 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1f510 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1f520 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1f540 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 ---- found loade 1f550 64 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 d SQLite interop 1f560 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 assembly module 1f570 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 1f580 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
1f590 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  me \n]..
1f5a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1f5b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1f5c0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
1f5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
1f5e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1f5f0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 1f600 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 "---- compile 1f610 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f -time options fo 1f620 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 r SQLite core li 1f630 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 brary... ".... 1f640 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1f650 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1f660 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1f670 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1f680 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 1f690 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1f6a0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 1f6b0 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 SQLiteCompileOpt 1f6c0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ions.. 1f6d0 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 } compileOptions 1f6e0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f700 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1f710 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66  l [appendArgs [f
1f720 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
1f730 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f740 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69      $compileOpti 1f750 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d ons] <none>] \n] 1f760 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 1f770 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1f780 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1f790 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c  channel unknown\
1f7a0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
1f7b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1f7c0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
1f7d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1f7e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 1f7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 1f800 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d ---- compile-tim 1f810 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 e options for SQ 1f820 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass 1f830 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 embly... ".... 1f840 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1f850 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1f860 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1f870 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1f880 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 1f890 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1f8a0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 1f8b0 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 InteropCompileOp 1f8c0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 tions.. 1f8d0 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e } compileOption 1f8e0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 1f8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1f900 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1f910 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
1f920 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
1f930 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1f940 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74       $compileOpt 1f950 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e ions] <none>] \n 1f960 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 1f970 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1f980 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1f990 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e  _channel unknown
1f9a0 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  \n..          }.
1f9b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1f9c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1f9d0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68   # NOTE: Show th
1f9e0 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63 6f  e active test co
1f9f0 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20  nstraints...
1fa00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
1fa10 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1fa20 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1fa30 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e "---- constrain 1fa40 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ts: " \.. 1fa50 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 [formatList 1fa60 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 [lsort [getCons 1fa70 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e traints]] <none> 1fa80 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 1fa90 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1faa0 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 TE: Save the tes 1fab0 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f t constraints fo 1fac0 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73 r use by threads 1fad0 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 created in this 1fae0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1faf0 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f application do 1fb00 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e main. This is n 1fb10 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65 ecessary because 1fb20 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a all the Eagle.. 1fb30 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1fb40 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 "test context" i 1fb50 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 nformation is pe 1fb60 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 r-thread... 1fb70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 1fb80 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1fb90 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e ::test_constrain 1fba0 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ts]} then {.. 1fbb0 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 set ::tes 1fbc0 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a t_constraints$:
1fbd0 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e  :eagle_tests(con
1fbe0 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20  straints)..
1fbf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1fc00 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1fc10 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74  E: Load the "aft
1fc20 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  er-constraints"
1fc30 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
1fc40 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d  and/or per-host.
1fc50 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1fc60 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e   test settings n
1fc70 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
1fc80 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
1fc90 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
1fca0 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $1fcb0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 1fcc0 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 after].... 1fcd0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1fce0 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 OTE: If necessar 1fcf0 79 2c 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 y, enable shared 1fd00 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e -cache mode now. 1fd10 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1fd20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 1fd30 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 timeOption share 1fd40 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d dCache]} then {. 1fd50 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c . enabl 1fd60 65 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a eSharedCache$::
1fd70 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75  test_channel tru
1fd80 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
1fd90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1fda0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
1fdb0 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61  when our tests a
1fdc0 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e  ctually began (n
1fdd0 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ow)...        #.
1fde0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1fdf0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1fe00 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1fe10 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1fe20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1fe30 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 te tests began a 1fe40 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 t " \.. 1fe50 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 [clock format 1fe60 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 1fe70 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ] \n].. }.. 1fe80 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1fe90 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 oc runSQLiteTest 1fea0 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d FilesPrologue {} 1feb0 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 {.. upleve 1fec0 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 l 1 {.. # 1fed0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1fee0 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 : Setup the vari 1fef0 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 ables that refer 1ff00 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 to the various 1ff10 6e 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a non-data files.. 1ff20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ff30 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 required by the 1ff40 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 tests in this fi 1ff50 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 1ff60 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 set enti 1ff70 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 tyFrameworkDllFi 1ff80 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 1ff90 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e [getBuildFileN 1ffa0 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 ame EntityFramew 1ffb0 6f 72 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 ork.dll].... 1ffc0 20 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 set installe 1ffd0 72 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 rExeFile [getBui 1ffe0 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 ldFileName Insta 1fff0 6c 6c 65 72 2e 65 78 65 5d 0d 0a 20 20 20 20 20 ller.exe].. 20000 20 20 20 73 65 74 20 73 71 6c 69 74 65 44 65 73 set sqliteDes 20010 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5b 67 65 ignerDllFile [ge 20020 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 tBuildFileName S 20030 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 QLite.Designer.d 20040 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 20050 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 20060 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 iteDllFile \.. 20070 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu 20080 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 ildFileName Syst 20090 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 200a0 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 200b0 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 200c0 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c iteLinqDllFile \ 200d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 200e0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 200f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 20100 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a te.Linq.dll].... 20110 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 set syst 20120 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 emDataSQLiteEf6D 20130 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 20140 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 [getBuildF 20150 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 ileName System.D 20160 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 ata.SQLite.EF6.d 20170 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 20180 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b et testExeFile [ 20190 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 201a0 20 74 65 73 74 2e 65 78 65 5d 0d 0a 20 20 20 20 test.exe].. 201b0 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 set testLinq 201c0 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c ExeFile [getBuil 201d0 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 dFileName testli 201e0 6e 71 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 nq.exe].. 201f0 20 73 65 74 20 74 65 73 74 45 66 36 45 78 65 46 set testEf6ExeF 20200 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ile [getBuildFil 20210 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 eName testef6.ex 20220 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d e].... #. 20230 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 20240 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 Setup the varia 20250 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 bles that refer 20260 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 to the various d 20270 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ata files.. 20280 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 # requi 20290 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 red by the tests 202a0 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a in this file... 202b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 202c0 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 4f set testLinqO 202d0 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 utFile [file nat 202e0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 202f0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 20300 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 20310 44 61 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 DataPath] testli 20320 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 nq.out]].... 20330 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e set northwin 20340 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 dEfDbFile [file 20350 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 20360 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 20370 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 [file dirna 20380 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname 20390 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 203a0 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 ataPath]]] \.. 203b0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 6c 69 testli 203c0 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 nq northwindEF.d 203d0 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 b]].... s 203e0 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 et nonWalDbFile 203f0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 20400 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 20410 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 20420 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 20430 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a h] nonWal.db]].. 20440 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 77 61 .. set wa 20450 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 lDbFile [file na 20460 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 20470 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 20480 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 20490 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e 64 tDataPath] wal.d 204a0 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 b]].... # 204b0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 204c0 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e : The various in 204d0 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 stall/uninstall 204e0 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20 74 log files used t 204f0 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20 o test the.. 20500 20 20 20 20 23 20 20 20 20 20 20 20 64 65 73 69 # desi 20510 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e gn-time componen 20520 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 t installer... 20530 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 20540 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c set testInstall 20550 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 Vs2005LogFile [f 20560 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 20570 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 20580 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 20590 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 205a0 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f Installer_Test_ 205b0 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a Vs2005.log]].... 205c0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 205d0 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 InstallVs2008Log 205e0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 205f0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 20600 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20610 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 20620 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 taPath] Installe 20630 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f r_Test_Vs2008.lo 20640 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 g]].... s 20650 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 et testInstallVs 20660 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 2010LogFile [fil 20670 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 20680 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 20690 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 206a0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 eTestDataPath] I 206b0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 206c0 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2010.log]].... 206d0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e set testIn 206e0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 stallVs2012LogFi 206f0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 20700 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 20710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 20720 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 20730 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f Path] Installer_ 20740 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d Test_Vs2012.log] 20750 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 20760 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 20770 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 13LogFile [file 20780 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 20790 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 207a0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 207b0 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 estDataPath] Ins 207c0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 207d0 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 13.log]].... 207e0 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e set testUnin 207f0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 stallVs2005LogFi 20800 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 20810 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 20820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 20830 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 20840 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 Path] Uninstalle 20850 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f r_Test_Vs2005.lo 20860 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 g]].... s 20870 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c et testUninstall 20880 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 Vs2008LogFile [f 20890 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 208a0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 208b0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 208c0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 208d0 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 Uninstaller_Tes 208e0 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a t_Vs2008.log]].. 208f0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 .. set te 20900 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 20910 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 0LogFile [file n 20920 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 20930 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 20940 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 20950 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e stDataPath] Unin 20960 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 20970 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 010.log]].... 20980 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 set testUni 20990 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 209a0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 209b0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 209c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 209d0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 209e0 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c aPath] Uninstall 209f0 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c er_Test_Vs2012.l 20a00 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 20a10 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c set testUninstal 20a20 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b lVs2013LogFile [ 20a30 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 20a40 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 20a50 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 20a60 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 20a70 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 ] Uninstaller_Te 20a80 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d st_Vs2013.log]]. 20a90 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 ... ##### 20aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20ae0 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ##.... if 20af0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 20b00 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 20b10 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 20b20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
20b30 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44  entityFrameworkD
20b40 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  llFile]]]} then
20b50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
20b60 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 20b70 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79 46 channel$entityF
20b80 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d  rameworkDllFile.
20b90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
20ba0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
20bb0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
20bc0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
20be0 65 20 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65  e tail $installe 20bf0 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 rExeFile]]]} the 20c00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 20c10 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
20c20 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74 61  t_channel $insta 20c30 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e 73 74 llerExeFile Inst 20c40 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20 20 aller.exe.. 20c50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 20c60 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 20c70 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 20c80 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 20c90 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 20ca0 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72$sqliteDesigner
20cb0 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  DllFile]]]} then
20cc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
20cd0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 20ce0 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74 65 _channel$sqlite
20cf0 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 0d  DesignerDllFile.
20d00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
20d10 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
20d20 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
20d30 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
20d40 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
20d50 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61  e tail $systemDa 20d60 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d taSQLiteDllFile] 20d70 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 20d80 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 20d90 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
20da0 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69   $systemDataSQLi 20db0 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 teDllFile.. 20dc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 20dd0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 20de0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 20df0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 20e00 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 20e10 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
20e20 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d  teLinqDllFile]]]
20e30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
20e40 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
20e50 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
20e60 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
20e70 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  LinqDllFile..
20e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
20e90 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
20ea0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
20eb0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
20ec0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
20ed0 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51  il $systemDataSQ 20ee0 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d LiteEf6DllFile]] 20ef0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 20f00 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 20f10 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
20f20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  $systemDataSQLit 20f30 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 eEf6DllFile.. 20f40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 20f50 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 20f60 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 20f70 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 20f80 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 20f90 69 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d il$testExeFile]
20fa0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
20fb0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
20fc0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 20fd0 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 74 65$testExeFile te
20fe0 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20  st.exe..
20ff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
21000 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
21010 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
21020 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
21030 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 21040 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d estLinqExeFile]] 21050 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 21060 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 21070 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
21080 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65  $testLinqExeFile 21090 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a 20 testlinq.exe.. 210a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 210b0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 210c0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 210d0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 210e0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 210f0 74 61 69 6c 20 24 74 65 73 74 45 66 36 45 78 65 tail$testEf6Exe
21100 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
21110 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
21120 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 21130 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45 78 annel$testEf6Ex
21140 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65 78  eFile testef6.ex
21150 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
21160 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
21170 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
21180 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
21190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
211a0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69  ile tail $testLi 211b0 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 nqOutFile]]]} th 211c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 211d0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
211e0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 211f0 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20 20 LinqOutFile.. 21200 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21210 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 21220 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 21230 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 21240 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 21250 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 il$northwindEfD
21260 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  bFile]]]} then {
21270 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
21280 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 21290 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 6e hannel$northwin
212a0 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 20 20  dEfDbFile..
212b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
212c0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
212d0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
212e0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
212f0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
21300 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d   $nonWalDbFile]] 21310 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 21320 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 21330 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
21340 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a 20  $nonWalDbFile.. 21350 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 21360 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 21370 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 21380 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 21390 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 213a0 74 61 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d tail$walDbFile]
213b0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
213c0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
213d0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 213e0 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20$walDbFile..
213f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21400 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
21410 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
21420 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
21430 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
21440 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 21450 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2005LogFile]]]} 21460 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21470 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 21480 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 21490 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 estInstallVs2005 214a0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 214b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 214c0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 214d0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 214e0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 214f0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
21500 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
21510 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  8LogFile]]]} the
21520 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
21530 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 21540 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 t_channel$testI
21550 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
21560 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
21570 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
21580 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
21590 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
215a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
215b0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 215c0 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 InstallVs2010Log 215d0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 215e0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 215f0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
21600 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61  annel $testInsta 21610 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 0d llVs2010LogFile. 21620 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 21630 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 21640 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 21650 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 21660 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 21670 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
21680 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
21690 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
216a0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
216b0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 216c0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
216d0 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2012LogFile..
216e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
216f0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
21700 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
21710 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
21720 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
21730 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 21740 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2013LogFile]]]} 21750 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21760 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 21770 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 21780 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 estInstallVs2013 21790 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 217a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 217b0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 217c0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 217d0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 217e0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
217f0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
21800 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  005LogFile]]]} t
21810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
21820 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 21830 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
21840 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35  tUninstallVs2005
21850 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
21860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
21870 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
21880 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
21890 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
218a0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $218b0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 218c0 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 008LogFile]]]} t 218d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 218e0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
218f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 21900 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 tUninstallVs2008 21910 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 21920 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 21930 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 21940 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 21950 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 21960 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
21970 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
21980 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  010LogFile]]]} t
21990 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
219a0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 219b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
219c0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30  tUninstallVs2010
219d0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
219e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
219f0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
21a00 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
21a10 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
21a20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $21a30 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 21a40 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 012LogFile]]]} t 21a50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 21a60 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
21a70 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 21a80 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 tUninstallVs2012 21a90 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 21aa0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 21ab0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 21ac0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 21ad0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 21ae0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
21af0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
21b00 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  013LogFile]]]} t
21b10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
21b20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 21b30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
21b40 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33  tUninstallVs2013
21b50 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
21b60 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
21b70 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
21b80 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c  runSQLiteTestFil
21b90 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d  esEpilogue {} {.
21ba0 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31  .      uplevel 1
21bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65   {..        unse
21bc0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d  t -nocomplain \.
21bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
21be0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33  tUninstallVs2013
21bf0 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e  LogFile testUnin
21c00 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
21c10 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
21c20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56    testUninstallV
21c30 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 74 65 73  s2010LogFile tes
21c40 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38  tUninstallVs2008
21c50 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  LogFile \..
21c60 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73         testUnins
21c70 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c  tallVs2005LogFil
21c80 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  e testInstallVs2
21c90 30 31 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20  013LogFile \..
21ca0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e            testIn
21cb0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
21cc0 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  le testInstallVs
21cd0 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2010LogFile \..
21ce0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49             testI
21cf0 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
21d00 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  ile testInstallV
21d10 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a  s2005LogFile....
21d20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
21d30 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20  ocomplain \..
21d40 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77 69           northwi
21d50 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 74 4c  ndEfDbFile testL
21d60 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20 20  inqOutFile \..
21d70 20 20 20 20 20 20 20 20 20 20 77 61 6c 44 62 46            walDbF
21d80 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65  ile nonWalDbFile
21d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65  ....        unse
21da0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d  t -nocomplain \.
21db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
21dc0 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74  tEf6ExeFile test
21dd0 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d 0a 20  LinqExeFile \..
21de0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 45             testE
21df0 78 65 46 69 6c 65 20 73 79 73 74 65 6d 44 61 74  xeFile systemDat
21e00 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
21e10 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
21e20 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
21e30 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79 73  eLinqDllFile sys
21e40 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
21e50 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
21e60 20 20 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e      sqliteDesign
21e70 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c  erDllFile instal
21e80 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20  lerExeFile \..
21e90 20 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79            entity
21ea0 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
21eb0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
21ec0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75  .....    proc ru
21ed0 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f  nSQLiteTestEpilo
21ee0 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  gue {} {..
21ef0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
21f00 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75   Skip running ou
21f10 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75  r custom epilogu
21f20 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e  e if the main on
21f30 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  e has been..
21f40 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65    #       skippe
21f50 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
21f60 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
21f70 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67  ists ::no(epilog
21f80 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e  ue.eagle)]} then
21f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
21fa0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
21fb0 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73  how when our tes
21fc0 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65  ts actually ende
21fd0 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20  d (now)...
21fe0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
21ff0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 22000 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 22010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 22020 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e --- System.Data. 22030 53 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 SQLite tests end 22040 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 ed at " \.. 22050 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f [clock fo 22060 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f rmat [clock seco 22070 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 nds]] \n].... 22080 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22090 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 220a0 20 22 65 70 69 6c 6f 67 75 65 22 20 63 75 73 74 "epilogue" cust 220b0 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f om per-user and/ 220c0 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 or per-host test 220d0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 220e0 20 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d settings now.. 220f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 22100 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 22110 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 ist loadSQLiteTe 22120 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 stSettings$::te
22130 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c  st_channel .epil
22140 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ogue]....
22150 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
22160 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65  GFIX: Before che
22170 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  cking the final
22180 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65  resources in use
22190 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65   by SQLite, make
221a0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
221b0 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66      sure both of
221c0 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61   the PRAGMA rela
221d0 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61  ted directory na
221e0 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a  mes are freed...
221f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
22200 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
22210 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a  eDirectories $:: 22220 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 test_channel tru 22230 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 22240 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 22250 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 Also report the 22260 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 resource usage a 22270 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 fter running the 22280 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 22290 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f #.. repo 222a0 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 rtSQLiteResource 222b0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
222c0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
222d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
222e0 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 69  Report the criti
222f0 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
22300 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20  s after running
22310 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20  the tests...
22320 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67      #..        g
22330 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f  etSQLiteHandleCo
22340 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  unts $::test_cha 22350 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nnel.... 22360 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 22370 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c E: If necessary, 22380 20 64 69 73 61 62 6c 65 20 73 68 61 72 65 64 2d disable shared- 22390 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d cache mode now.. 223a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 223b0 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 223c0 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 imeOption shared 223d0 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a Cache]} then {.. 223e0 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 enable 223f0 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 SharedCache$::t
22400 65 73 74 5f 63 68 61 6e 6e 65 6c 20 66 61 6c 73  est_channel fals
22410 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
22420 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
22430 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
22440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22480 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
22490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
224a0 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e  ### END Eagle ON
224b0 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23  LY #############
224c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
224d0 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
224e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
224f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22520 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a  ##..  }....  #..
22530 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74    # NOTE: Save t
22540 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
22550 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e  irectory contain
22560 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a  ing this file...
22570 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66    #..  if {![inf
22580 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f  o exists common_
22590 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
225a0 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d   {..    set comm
225b0 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69  on_directory [fi
225c0 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f  le dirname [info
225d0 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a   script]]..  }..
225e0 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
225f0 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73   Provide the Sys
22600 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
22610 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20  test package to
22620 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  the interpreter.
22630 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65  ..  #..  package
22640 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e   provide System.
22650 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74  Data.SQLite.Test
22660 20 31 2e 30 0d 0a 7d 0d 0a                        1.0..}..