System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact b86a65bf42df55ff11e5bb3bb7b2c57ecf6c6caa:

• File Tests/common.eagle — part of check-in [d0f59a690b] at 2013-12-18 08:01:03 on branch trunk — Prefer the new -anyInitialize argument over -preInitialize when using the Eagle shell, where applicable. (user: mistachkin size: 93829)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 32 30 31 32 2c 20 6f 72 20   2010, 2012, or
0460: 32 30 31 33 20 62 75 69 6c 64 20 73 79 73 74 65  2013 build syste
0470: 6d 73 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65  ms.  To override
0480: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
0490: 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74       value via t
04a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c  he command line,
04b0: 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64   enter a command
04c0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
04d0: 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  of..      #
04e0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following
04f0: 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65  (all on one line
0500: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
0510: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0520: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0530: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0540: 73 74 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20  st_year 2005"..
0550: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0560: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0570: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0580: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0590: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
05a0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
05b0: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
05c0: 30 38 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  08"..      #
05d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
05e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
05f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0600: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0610: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0620: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0630: 65 61 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20  ear 2010"..
0640: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0650: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0660: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0670: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0680: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0690: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
06a0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d  test_year 2012".
06b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
06c0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
06d0: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
06e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
06f0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0700: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0710: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0720: 32 30 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20  2013"..      #
0730: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0740: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0750: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0760: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0770: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0780: 69 61 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e  ialize "unset -n
0790: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79  ocomplain test_y
07a0: 65 61 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ear"..      #
07b0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
07c0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
07d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
07e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
07f0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26   ::test_year] &&
0800: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0810: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20  $::test_year] > 0820: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0830: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 0840: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 0850: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 0860: 72 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 r. If this vari 0870: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 0880: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 0890: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 default va 08a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 08b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 08c0: 6e 6f 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 not Eagle has be 08d0: 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 en.. # 08e0: 20 20 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 compiled aga 08f0: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 0900: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 0910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0920: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
0930: 74 5f 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20  t_year..      }
0940: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
0960: 45 3a 20 49 66 20 45 61 67 6c 65 20 68 61 73 20  E: If Eagle has
0970: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67  been compiled ag
0980: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34  ainst the CLR v4
0990: 2e 30 2c 20 75 73 65 20 22 32 30 31 30 22 20 62  .0, use "2010" b
09a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
09b0: 20 20 20 64 65 66 61 75 6c 74 20 28 77 65 20 63     default (we c
09c0: 6f 75 6c 64 20 75 73 65 20 22 32 30 31 32 22 20  ould use "2012"
09d0: 6f 72 20 22 32 30 31 33 22 20 69 6e 20 74 68 61  or "2013" in tha
09e0: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 20  t case as well)
09f0: 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
0a00: 20 20 20 20 74 68 65 20 74 65 73 74 20 79 65 61      the test yea
0a10: 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 75 73  r; otherwise, us
0a20: 65 20 22 32 30 30 38 22 20 62 79 20 64 65 66 61  e "2008" by defa
0a30: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
0a50: 20 20 20 22 32 30 30 35 22 20 69 6e 20 74 68 61     "2005" in tha
0a60: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 2e  t case as well).
0a70: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
0a80: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
0a90: 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ]..        #
0aa0: 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68     version of th
0ab0: 65 20 43 4c 52 20 69 73 20 72 65 6c 65 61 73 65  e CLR is release
0ac0: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
0ad0: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 0d 0a 20  ll have to be..
0ae0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
0af0: 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66  hanged.  The def
0b00: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 74  ault test year t
0b10: 6f 20 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  o use for a part
0b20: 69 63 75 6c 61 72 20 43 4c 52 0d 0a 20 20 20 20  icular CLR..
0b30: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73      #       vers
0b40: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72  ion may be overr
0b50: 69 64 64 65 6e 20 62 79 20 73 65 74 74 69 6e 67  idden by setting
0b60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
0b70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
0b80: 20 20 20 20 20 20 22 74 65 73 74 5f 79 65 61 72        "test_year
0b90: 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72 65  _clr_v$X", where 0ba0: 20 22 24 58 22 20 6d 61 79 20 5b 63 75 72 72 65 "$X" may [curre
0bb0: 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20  ntly] be either
0bc0: 22 32 22 0d 0a 20 20 20 20 20 20 20 20 23 20 20  "2"..        #
0bd0: 20 20 20 20 20 6f 72 20 22 34 22 2e 0d 0a 20 20       or "4"...
0be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0bf0: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
0c00: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
0c10: 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e40]} then {..
0c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0c30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
0c40: 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 26 26 20  year_clr_v4] &&
0c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
0c60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0c70: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72  $::test_year_clr 0c80: 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _v4] > 0} then { 0c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 0ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 0cb0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 0cc0: 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 cified test year 0cd0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 0ce0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 0cf0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 0d00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
0d10: 61 72 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20  ar_clr_v4..
0d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0d30: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d40: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
0d50: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
0d60: 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  t test year for
0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
0d80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0da0: 20 32 30 31 30 3b 20 23 20 54 4f 44 4f 3a 20 47   2010; # TODO: G
0db0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64  ood "fallback" d
0dc0: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20  efault?..
0dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
0de0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0df0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0e00: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
0e10: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
0e20: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
0e30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 0e40: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 3e t_year_clr_v2] > 0e50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 0e60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0e70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 0e80: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 0e90: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 0ea0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 he CLR v2.0... 0eb0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 0ed0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
0ee0: 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v2..          }
0ef0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
0f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0f20: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
0f30: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
0f40: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
0f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f60: 20 20 20 20 72 65 74 75 72 6e 20 32 30 30 38 3b      return 2008;
0f70: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
0f80: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
0f90: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
0fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0fb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
0fc0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59    proc getBuildY
0fd0: 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ears {} {..
0fe0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0ff0: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73  : See if the lis
1000: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1010: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1020: 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d  den by the user.
1030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28  .      #       (
1040: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1050: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
1060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1070: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
1080: 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c  st_years] && [ll
1090: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 10a0: 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ars] > 0} then { 10b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 10d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 10e0: 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 ist of test year 10f0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1110: 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20  :test_years..
1120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1140: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1150: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
1160: 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20  test years...
1170: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1180: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30  return [list 200
1190: 35 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32  5 2008 2010 2012
11a0: 20 32 30 31 33 5d 0d 0a 20 20 20 20 20 20 7d 0d   2013]..      }.
11b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
11c0: 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c 61 74  roc getBuildPlat
11d0: 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 7d 20  form { native }
11e0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  {..      if {[in
11f0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
1200: 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 5c 0d  _platform] && \.
1210: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
1220: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1230: 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d t_platform] > 0} 1240: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1250: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1260: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1270: 69 66 69 65 64 20 74 65 73 74 20 70 6c 61 74 66 ified test platf 1280: 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20 76 61 orm. If this va 1290: 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 riable is not se 12a0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 t,.. # 12b0: 20 20 20 20 74 68 65 20 64 65 66 61 75 6c 74 20 the default 12c0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 value will be ba 12d0: 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63 68 69 sed on the machi 12e0: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 2e ne architecture. 12f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1300: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1310: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24 3a 3a r {$native ? $:: 1320: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 test_platform : 1330: 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ""}].. } el 1340: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 1350: 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e ts ::test_machin 1360: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 e] && \.. 1370: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 1380: 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e h$::test_machin
1390: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
13a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13b0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
13c0: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65  ative builds, re
13d0: 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  turn the platfor
13e0: 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e  m name correspon
13f0: 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20  ding to..
1400: 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73   #       the tes
1410: 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74  t machine archit
1420: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73  ecture; otherwis
1430: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
1440: 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ty..        #
1450: 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...
1460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1470: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e  return [expr {$n 1480: 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 ative ? [machine 1490: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 ToPlatform$::te
14a0: 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22  st_machine] : ""
14b0: 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }]..      } else
14c0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
14d0: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
14e0: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
14f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1500: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
1510: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  r native builds,
1520: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74   return the plat
1530: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73  form name corres
1540: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..
1550: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
1560: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
1570: 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  ture; otherwise,
1580: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
1590: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
15a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
15b0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  urn [expr {$nati 15c0: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ve ? \.. 15d0: 20 20 20 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c [machineToPl 15e0: 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c atform$::tcl_pl
15f0: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d  atform(machine)]
1600: 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d   : ""}]..      }
1610: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1620: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1630: 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61  TE: No machine a
1640: 72 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61  rchitecture is a
1650: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e  vailable, return
1660: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
1670: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1680: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d        return "".
1690: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
16a0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
16b0: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  BuildConfigurati
16c0: 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  on {} {..      #
16d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16e0: 53 65 65 20 69 66 20 74 68 65 20 22 63 6f 6e 66  See if the "conf
16f0: 69 67 75 72 61 74 69 6f 6e 22 20 73 65 74 74 69  iguration" setti
1700: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
1710: 72 69 64 64 65 6e 20 62 79 20 74 68 65 0d 0a 20  ridden by the..
1720: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
1730: 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63  r (e.g. on the c
1740: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
1750: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
1760: 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 20 20 20  l exactly..
1770: 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 73   #       which s
1780: 65 74 20 6f 66 20 62 69 6e 61 72 69 65 73 20 77  et of binaries w
1790: 65 20 61 72 65 20 74 65 73 74 69 6e 67 20 28 69  e are testing (i
17a0: 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 6c 74 20  .e. those built
17b0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  in the..      #
17c0: 20 20 20 20 20 20 22 44 65 62 75 67 22 20 6f 72        "Debug" or
17d0: 20 22 52 65 6c 65 61 73 65 22 20 62 75 69 6c 64   "Release" build
17e0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 29   configurations)
17f0: 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65 20 74  .  To override t
1800: 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  his..      #
1810: 20 20 20 76 61 6c 75 65 20 76 69 61 20 74 68 65     value via the
1820: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65   command line, e
1830: 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73  nter a command s
1840: 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66  imilar to one of
1850: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1860: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61  the following (a
1870: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
1880: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1890: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
18a0: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
18b0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
18c0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 44  _configuration D
18d0: 65 62 75 67 22 0d 0a 20 20 20 20 20 20 23 20 20  ebug"..      #
18e0: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
18f0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
1900: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1910: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
1920: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
1930: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
1940: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 52  _configuration R
1950: 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 20 20 23  elease"..      #
1960: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
1970: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
1980: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
1990: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
19a0: 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20  Shell.exe -file
19b0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
19c0: 67 6c 65 20 2d 70 72 65 54 65 73 74 0d 0a 20 20  gle -preTest..
19d0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 75      #         "u
19e0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
19f0: 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74   test_configurat
1a00: 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ion"..      #..
1a10: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
1a20: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e  xists ::test_con
1a30: 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c  figuration] && \
1a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
1a50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 1a60: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 1a70: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 1a80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a90: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 1aa0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 1ab0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 configuration. 1ac0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c The default val 1ad0: 75 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 ue used.. 1ae0: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 69 # for thi 1af0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 74 79 s variable is ty 1b00: 70 69 63 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 pically "Release 1b10: 22 2c 20 61 73 20 73 65 74 20 62 79 20 74 68 65 ", as set by the 1b20: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 1b30: 20 20 20 20 20 20 20 73 75 69 74 65 20 69 74 73 suite its 1b40: 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d elf... #. 1b50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1b60: 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72$::test_configur
1b70: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65  ation..      } e
1b80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
1b90: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1ba0: 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77  : Normally, we w
1bb0: 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 20 74 68  ill never hit th
1bc0: 69 73 20 63 61 73 65 20 62 65 63 61 75 73 65 20  is case because
1bd0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1be0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1bf0: 20 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61    test configura
1c00: 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73  tion variable is
1c10: 20 61 6c 77 61 79 73 20 73 65 74 20 62 79 20 74   always set by t
1c20: 68 65 20 74 65 73 74 20 73 75 69 74 65 0d 0a 20  he test suite..
1c30: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
1c40: 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20  tself; however,
1c50: 69 74 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69  it can be overri
1c60: 64 64 65 6e 20 75 73 69 6e 67 20 74 68 65 20 75  dden using the u
1c70: 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20  nset command..
1c80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 72        #       fr
1c90: 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 73 74 20  om the -preTest
1ca0: 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 65  option to the te
1cb0: 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
1cc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
1cd0: 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c  turn $::eagle_pl 1ce0: 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 atform(configura 1cf0: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a tion).. }.. 1d00: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1d10: 6f 63 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 oc getBuildConfi 1d20: 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a gurations {} {.. 1d30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1d40: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 NOTE: See if th 1d50: 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 e list of test c 1d60: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 68 61 onfigurations ha 1d70: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 s been overridde 1d80: 6e 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 n by.. # 1d90: 20 20 20 20 74 68 65 20 75 73 65 72 20 28 65 2e the user (e. 1da0: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e g. on the comman 1db0: 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 d line)... 1dc0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 1dd0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 1de0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d _configurations] 1df0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1e00: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 [llength$::tes
1e10: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t_configurations
1e20: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1e30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1e40: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
1e50: 65 20 73 70 65 63 69 66 69 65 64 20 6c 69 73 74  e specified list
1e60: 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75   of test configu
1e70: 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20  rations...
1e80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
1e90: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66  urn $::test_conf 1ea0: 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 igurations.. 1eb0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1ec0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1ed0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 NOTE: Use the d 1ee0: 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 efault list of t 1ef0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 1f00: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ns... #.. 1f10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 1f20: 6c 69 73 74 20 44 65 62 75 67 20 52 65 6c 65 61 list Debug Relea 1f30: 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 se].. }.. 1f40: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1f50: 20 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 getBuildBaseDir 1f60: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 ectory {} {.. 1f70: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1f80: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 1f90: 68 65 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 he base director 1fa0: 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 y where all the 1fb0: 62 75 69 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 builds should be 1fc0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1fd0: 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 located. This w 1fe0: 69 6c 6c 20 62 65 20 74 68 65 20 64 69 72 65 63 ill be the direc 1ff0: 74 6f 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69 tory that contai 2000: 6e 73 20 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 ns the actual.. 2010: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 # bui 2020: 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 ld output direct 2030: 6f 72 79 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 ory (e.g. parent 2040: 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 of "bin")... 2050: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 2060: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 [info exists ::b 2070: 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74 uild_base_direct 2080: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 2090: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 20a0: 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 gth$::build_bas
20b0: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  e_directory] > 0
20c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
20d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
20e0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
20f0: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 62  n of the build b
2100: 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61  ase directory ha
2110: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
2120: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
2130: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
2140: 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d  se it verbatim..
2150: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2160: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 75      return $::bu 2170: 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f ild_base_directo 2180: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 2190: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 21a0: 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 ::common_direct 21b0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 21c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 21d0: 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 gth$::common_di
21e0: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
21f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
2200: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
2210: 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20   Next, fallback
2220: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 69  to the parent di
2230: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f  rectory of the o
2240: 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ne containing..
2250: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
2260: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22  his file (i.e. "
2270: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20  common.eagle"),
2280: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  if available...
2290: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22a0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
22b0: 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e  irname $::common 22c0: 5f 64 69 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 _directory].. 22d0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 22e0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68 fo exists ::path 22f0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 2300: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 2310: 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74$::path] > 0} t
2320: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
2330: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2340: 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62  : Finally, fallb
2350: 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e  ack to the paren
2360: 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74  t directory of t
2370: 68 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20  he EagleTest..
2380: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61        #       pa
2390: 74 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65  th.  The EagleTe
23a0: 73 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61  st package guara
23b0: 6e 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20  ntees that this
23c0: 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20  variable..
23d0: 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62    #       will b
23e0: 65 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72  e set to the dir
23f0: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ectory containin
2400: 67 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65  g the first file
2410: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20   to..        #
2420: 20 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65       execute the
2430: 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75   [runTestPrologu
2440: 65 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  e] script librar
2450: 79 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20  y procedure...
2460: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2470: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69   return [file di
2480: 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a  rname $::path].. 2490: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 24a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24b0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 # NOTE: No pa 24c0: 74 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c th is available, 24d0: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 return an empty 24e0: 20 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70 string. This p 24f0: 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20 oint.. # 2500: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 should not 2510: 20 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 be reached... 2520: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2530: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 2540: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 2550: 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65 64 4d proc isMixedM 2560: 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 odeAssembly { fi 2570: 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 leName {varName 2580: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 2590: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 25a0: 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75 72 65 First, make sure 25b0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 25c0: 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 20 69 infrastructure i 25d0: 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 s allowed to.. 25e0: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 # use 25f0: 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 the [exec] comma 2600: 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 nd... #.. 2610: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 2620: 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29 xists ::no(exec) 2630: 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 ] && ![info exis 2640: 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 ts ::no(corFlags 2650: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 2660: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2670: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6c 6f NOTE: If the lo 2680: 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 cation of CorFla 2690: 67 73 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e gs is present in 26a0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 the environment 26b0: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ,.. # 26c0: 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68 65 72 use it; other 26d0: 77 69 73 65 20 61 73 73 75 6d 65 20 69 74 20 69 wise assume it i 26e0: 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a s in the PATH... 26f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2700: 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67 73 20 set corFlags 2710: 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 [expr {.. 2720: 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 [info exists 2730: 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d ::env(CorFlags)] 2740: 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 ?$::env(CorFla
2750: 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67 73 22  gs) : "CorFlags"
2760: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a  ..        }]....
2770: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2780: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
2790: 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 6f  pt to execute Co
27a0: 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20 73 70  rFlags on the sp
27b0: 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20  ecified file...
27c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
27d0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
27e0: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 20 2d            exec -
27f0: 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c  - $corFlags [fil 2800: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 66 69 e nativename$fi
2810: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
2820: 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74   } exec] == 0} t
2830: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2840: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
2850: 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74  NOTE: If request
2860: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
2870: 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74  , attempt to det
2880: 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20 20 20  ermine the..
2890: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6c        #       pl
28a0: 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65 20 73  atform for the s
28b0: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 61 73  pecified file as
28c0: 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20   well...
28d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
28e0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
28f0: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0} 2900: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2910: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2920: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72 # NOTE: Stor 2930: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 69 e the platform i 2940: 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61 72 69 n the named vari 2950: 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 able in the.. 2960: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2970: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 context of our 2980: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 caller... 2990: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 29a0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
29b0: 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d  Name platform...
29c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
29e0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65  TE: Attempt to e
29f0: 78 74 72 61 63 74 20 74 68 65 20 50 45 20 6c 69  xtract the PE li
2a00: 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74  ne from the capt
2a10: 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ured..
2a20: 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74    #       output
2a30: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
2a40: 20 69 73 20 22 50 45 33 32 22 20 6f 72 20 22 50   is "PE32" or "P
2a50: 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20  E32+", the..
2a60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2a70: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 69 73  assembly file is
2a80: 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d 62 69   32-bit or 64-bi
2a90: 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 3b  t, respectively;
2aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
2ab0: 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c        otherwise,
2ac0: 20 69 74 73 20 74 79 70 65 20 69 73 20 75 6e 6b   its type is unk
2ad0: 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  nown...
2ae0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2af0: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e    set pattern {^
2b00: 50 45 20 20 20 20 20 20 20 20 3a 20 28 50 45 33  PE        : (PE3
2b10: 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a  2|PE32\+)\s+$}.. 2b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2b30: 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 {[regexp -line 2b40: 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 --$pattern $exe 2b50: 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74 c dummy pe32]} t 2b60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2b70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2b80: 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 54 68 # HACK: Th 2b90: 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73 73 75 is [switch] assu 2ba0: 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69 74 20 mes that 32-bit 2bb0: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 0d executables are. 2bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 2bd0: 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 78 38 always x8 2be0: 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d 62 69 6 and that 64-bi 2bf0: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 t executables ar 2c00: 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 e always.. 2c10: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2c20: 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 x64... 2c30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2c40: 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 switch -exa 2c50: 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20 ct --$pe32 {..
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
2c70: 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  E32 {..
2c80: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
2c90: 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20  tform Win32..
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cc0: 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20  PE32+ {..
2cd0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
2ce0: 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20  latform x64..
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d10: 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20  default {..
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2d30: 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20   platform ""..
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
2d70: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
2d80: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
2d90: 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20  rm ""..
2da0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2db0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
2dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
2dd0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65  TE: Attempt to e
2de0: 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c  xtract the ILONL
2df0: 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  Y line from the
2e00: 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20  captured..
2e10: 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70      #       outp
2e20: 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  ut.  If this val
2e30: 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  ue is zero, the
2e40: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6d  specified file m
2e50: 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ust..          #
2e60: 20 20 20 20 20 20 20 62 65 20 61 20 6d 69 78 65         be a mixe
2e70: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b  d-mode assembly;
2e80: 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20 63   otherwise, it c
2e90: 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20  ontains only..
2ea0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2eb0: 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e  managed componen
2ec0: 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ts...          #
2ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
2ee0: 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59  pattern {^ILONLY
2ef0: 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d      : (0|1)\s+$} 2f00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 2f10: 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 {![regexp -line 2f20: 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 --$pattern $ex 2f30: 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d ec dummy ilOnly] 2f40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2f50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 2f60: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d se.. }. 2f70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 2f80: 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 {!$ilOnly} then
2f90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
2fa0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
2fb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2fc0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
2fd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2fe0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 73  NOTE: If the tes
2ff0: 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74 20 75  t suite cannot u
3000: 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65 78 65  se [exec] or exe
3010: 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61  cution of CorFla
3020: 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  gs..      #
3030: 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e    failed, return
3040: 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23   false...      #
3050: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
3060: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alse..    }.....
3070: 20 20 20 20 70 72 6f 63 20 69 73 42 75 69 6c 64      proc isBuild
3080: 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69  Available { nati
3090: 76 65 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61  ve directory {va
30a0: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  rName ""} } {..
30b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
30c0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
30d0: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20  fully qualified
30e0: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  file name for th
30f0: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62  e primary assemb
3100: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ly..      #
3110: 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65    containing the
3120: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
3130: 69 74 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70  ite managed comp
3140: 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20  onents.  It..
3150: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c     #       shoul
3160: 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20  d be noted that
3170: 74 68 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69  this assembly fi
3180: 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74  le may also cont
3190: 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ain the..      #
31a0: 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f         native co
31b0: 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e  mponents, if a n
31c0: 61 74 69 76 65 20 62 75 69 6c 64 20 69 73 20 69  ative build is i
31d0: 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  n use...      #.
31e0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
31f0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
3200: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
3210: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 3220: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 3230: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d ata.SQLite.dll]] 3240: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ 3250: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
3260: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
3270: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
3280: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  alse..      }...
3290: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
32a0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
32b0: 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
32c0: 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20 70   detect if the p
32d0: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d  rimary assembly.
32e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
32f0: 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 69  ontains any nati
3300: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69  ve components, i
3310: 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20  f necessary...
3320: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
3330: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
3340: 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74  $native] == 0} t 3350: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 3360: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 3370: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d h$varName] > 0}
3380: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3390: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 33a0: 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 ame$varName..
33b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
33c0: 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b 69     set native [i
33d0: 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62  sMixedModeAssemb
33e0: 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 61  ly $fileName$va
33f0: 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  rName]..      }.
3400: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
3410: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
3420: 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c   primary assembl
3430: 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  y also contains
3440: 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f  the native compo
3450: 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 20  nents,..      #
3460: 20 20 20 20 20 20 77 65 20 68 61 76 65 20 65 76        we have ev
3470: 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64  erything we need
3480: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
3490: 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74    if {$native} t 34a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 34b0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 34c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 34d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 34e0: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu 34f0: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d alified file nam 3500: 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f e for the intero 3510: 70 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 p assembly.. 3520: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 # contai 3530: 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e ning the System. 3540: 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 Data.SQLite nati 3550: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 ve components. 3560: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 If this.. # 3570: 20 20 20 20 20 20 20 66 69 6c 65 20 65 78 69 73 file exis 3580: 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 ts, we should ha 3590: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 ve everything we 35a0: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d need... #. 35b0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 35c0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 35d0: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 35e0: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
35f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 2e 49          SQLite.I
3600: 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a  nterop.dll]]....
3610: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
3620: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 3630: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 3640: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 3650: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 3660: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3670: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 3680: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 y qualified file 3690: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 name for the SQ 36a0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 Lite core.. 36b0: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 # library 36c0: 2e 20 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 . If this file 36d0: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c exists, we shoul 36e0: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e d have everythin 36f0: 67 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 g we.. # 3700: 20 20 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 need... 3710: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 #.. set fi 3720: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 leName [file nat 3730: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 3740: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d in$directory \.
3750: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
3760: 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20  e3.dll]]....
3770: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
3780: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 3790: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 37a0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 37b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 37c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e # NOTE: On 37d0: 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 e or more native 37e0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 components need 37f0: 65 64 20 62 79 20 53 79 73 74 65 6d 2e 44 61 74 ed by System.Dat 3800: 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 a.SQLite.. 3810: 23 20 20 20 20 20 20 20 61 72 65 20 6d 69 73 73 # are miss 3820: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ing... #.. 3830: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 3840: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 3850: 20 70 72 6f 63 20 69 73 52 65 6c 65 61 73 65 41 proc isReleaseA 3860: 76 61 69 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 vailable { direc 3870: 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 tory {varName "" 3880: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 3890: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 38a0: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74$varName] > 0} t
38b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
38c0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 38d0: 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20$varName..
38e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
38f0: 6e 20 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61  n [isBuildAvaila
3900: 62 6c 65 20 22 22 20 24 64 69 72 65 63 74 6f 72  ble "" $director 3910: 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 y$varName]..
3920: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
3930: 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f  joinBuildDirecto
3940: 72 79 20 7b 20 6e 61 74 69 76 65 20 70 61 74 68  ry { native path
3950: 20 79 65 61 72 20 70 6c 61 74 66 6f 72 6d 20 63   year platform c
3960: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7d 20 7b  onfiguration } {
3970: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
3980: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20   # NOTE: Figure
3990: 6f 75 74 20 61 6e 64 20 74 68 65 6e 20 72 65 74  out and then ret
39a0: 75 72 6e 20 74 68 65 20 66 75 6c 6c 79 20 71 75  urn the fully qu
39b0: 61 6c 69 66 69 65 64 20 70 61 74 68 20 74 6f 20  alified path to
39c0: 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20  the build..
39d0: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f   #       directo
39e0: 72 79 20 62 61 73 65 64 20 6f 6e 20 61 6c 6c 20  ry based on all
39f0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 70 72  the arguments pr
3a00: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
3a10: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ller...      #..
3a20: 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76        if {$nativ 3a30: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 3a40: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 3a50: 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 join$path bin $3a60: 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 year$platform $3a70: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a configuration].. 3a80: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 3a90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 3aa0: 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 file join$path
3ab0: 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 69  bin $year$confi
3ac0: 67 75 72 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20  guration bin]..
3ad0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
3ae0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
3af0: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20  ildDirectory {}
3b00: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
3b10: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
3b20: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
3b30: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73  ntime option has
3b40: 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73   been set.  If s
3b50: 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20  o, use the..
3b60: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
3b70: 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65  ory for the mixe
3b80: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
3b90: 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69  (a.k.a. the nati
3ba0: 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20  ve interop..
3bb0: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62    #       assemb
3bc0: 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20  ly).  To enable
3bd0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20  this option via
3be0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
3bf0: 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20  , enter a..
3c00: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64   #       command
3c10: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
3c20: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
3c30: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e   (all on one lin
3c40: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e):..      #..
3c50: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
3c60: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74  eShell.exe -init
3c70: 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f  ialize -runtimeO
3c80: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20  ption native..
3c90: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66      #         -f
3ca0: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
3cb0: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23  l.eagle..      #
3cc0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
3cd0: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f  To enable this o
3ce0: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f  ption via the co
3cf0: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72  mmand line prior
3d00: 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 31 36   to the "beta 16
3d10: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  "..      #
3d20: 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c   release of Eagl
3d30: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
3d40: 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65   command must be
3d50: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20   used instead..
3d60: 20 20 20 20 20 23 20 20 20 20 20 20 20 28 61 6c       #       (al
3d70: 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69  so all on one li
3d80: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne):..      #..
3d90: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
3da0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69  leShell.exe -ini
3db0: 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69  tialize -postIni
3dc0: 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23  tialize..      #
3dd0: 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74           "object
3de0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
3df0: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64  ter.GetActive Ad
3e00: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  dRuntimeOption n
3e10: 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20  ative"..      #
3e20: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c          -file .\
3e30: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c  path\to\all.eagl
3e40: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  e..      #..
3e50: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3e60: 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  ts ::build_direc
3e70: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
3e80: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
3e90: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69  ngth $::build_di 3ea0: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 3eb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 3ec0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 3ed0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 3ee0: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 the build direc 3ef0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 tory has been ov 3f00: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 erridden;.. 3f10: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 # there 3f20: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 fore, use it ver 3f30: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 batim... 3f40: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 3f50: 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 n$::build_direc
3f60: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
3f70: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
3f80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3f90: 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22   If the "native"
3fa0: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20   runtime option
3fb0: 69 73 20 73 65 74 2c 20 74 68 65 20 6d 69 78 65  is set, the mixe
3fc0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d  d-mode assembly.
3fd0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
3fe0: 20 69 73 20 62 65 69 6e 67 20 74 65 73 74 65 64   is being tested
3ff0: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
4000: 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 68 65   the path to the
4010: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
4020: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4030: 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74    will contain t
4040: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  he platform name
4050: 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 62 69 6e   and all the bin
4060: 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74  aries under test
4070: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4080: 20 20 73 68 6f 75 6c 64 20 62 65 20 70 72 65 73    should be pres
4090: 65 6e 74 20 69 6e 20 74 68 61 74 20 64 69 72 65  ent in that dire
40a0: 63 74 6f 72 79 2e 20 20 49 66 20 74 68 65 20 22  ctory.  If the "
40b0: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 0d  native" runtime.
40c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
40d0: 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73   option is not s
40e0: 65 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69  et, the build di
40f0: 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62 65 20  rectory will be
4100: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
4110: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4120: 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74    "platform-neut
4130: 72 61 6c 22 2c 20 77 69 74 68 20 74 68 65 20 6e  ral", with the n
4140: 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69 6f 6e  otable exception
4150: 20 6f 66 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a   of any native..
4160: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4170: 61 73 73 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22  assembly (e.g. "
4180: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
4190: 6c 6c 22 29 20 63 6f 70 69 65 64 20 74 68 65 72  ll") copied ther
41a0: 65 20 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20  e during the..
41b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
41c0: 69 6c 64 20 70 72 6f 63 65 73 73 20 69 74 73 65  ild process itse
41d0: 6c 66 2e 20 20 49 66 20 74 68 65 20 62 75 69 6c  lf.  If the buil
41e0: 64 20 70 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f  d process someho
41f0: 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20  w does not..
4200: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79      #       copy
4210: 20 74 68 65 20 6e 61 74 69 76 65 20 61 73 73 65   the native asse
4220: 6d 62 6c 79 20 66 6f 72 20 74 68 69 73 20 70 6c  mbly for this pl
4230: 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20  atform, most of
4240: 74 68 65 20 74 65 73 74 73 0d 0a 20 20 20 20 20  the tests..
4250: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68     #       in th
4260: 65 20 73 75 69 74 65 20 77 69 6c 6c 20 73 69 6d  e suite will sim
4270: 70 6c 79 20 62 65 20 73 6b 69 70 70 65 64 2e 20  ply be skipped.
4280: 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b   Generally speak
4290: 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20 20 20 20  ing, there..
42a0: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20      #       are
42b0: 74 77 6f 20 77 61 79 73 20 74 6f 20 62 75 69 6c  two ways to buil
42c0: 64 20 74 68 65 20 62 69 6e 61 72 69 65 73 20 77  d the binaries w
42d0: 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 74 6f  hen preparing to
42e0: 20 72 75 6e 20 74 68 65 0d 0a 20 20 20 20 20 20   run the..
42f0: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73    #       test s
4300: 75 69 74 65 3a 0d 0a 20 20 20 20 20 20 20 20 23  uite:..        #
4310: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4320: 20 20 31 2e 20 42 75 69 6c 64 20 74 68 65 20 73    1. Build the s
4330: 65 70 61 72 61 74 65 20 6d 61 6e 61 67 65 64 20  eparate managed
4340: 61 6e 64 20 6e 61 74 69 76 65 20 61 73 73 65 6d  and native assem
4350: 62 6c 69 65 73 20 75 73 69 6e 67 20 73 6f 6d 65  blies using some
4360: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4370: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69       commands si
4380: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20  milar to:..
4390: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
43a0: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62           build.b
43b0: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69  at ${Configurati 43c0: 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 on}ManagedOnly$
43d0: 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20  {Platform}..
43e0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
43f0: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69  uild.bat ${Confi 4400: 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f guration}NativeO 4410: 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d nly${Platform}.
4420: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4430: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57      #          W
4440: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61  here ${Configura 4450: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 tion} is either 4460: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 "Debug" or "Rele 4470: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 ase" and.. 4480: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 #${P
4490: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68  latform} is eith
44a0: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78  er "Win32" or "x
44b0: 36 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  64"...        #.
44c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
44d0: 20 32 2e 20 42 75 69 6c 64 20 74 68 65 20 6d 69   2. Build the mi
44e0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
44f0: 79 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e  y using a comman
4500: 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20  d similar to:..
4510: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4520: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
4530: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 4540: 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f ration}${Platfo
4550: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm}..        #..
4560: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4570: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69     Where ${Confi 4580: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 guration} is eit 4590: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 her "Debug" or " 45a0: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 Release" and.. 45b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 45c0: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20${Platform} is
45d0: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f  either "Win32" o
45e0: 72 20 22 78 36 34 22 2e 20 20 49 66 20 74 68 69  r "x64".  If thi
45f0: 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20  s command is..
4600: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
4610: 20 75 73 65 64 2c 20 76 61 72 69 6f 75 73 20 74   used, various t
4620: 65 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72  ests that requir
4630: 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 79 20  e supplementary
4640: 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20  managed..
4650: 20 23 20 20 20 20 20 20 20 20 20 20 61 73 73 65   #          asse
4660: 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e  mblies (e.g. LIN
4670: 51 29 20 6d 61 79 20 62 65 20 73 6b 69 70 70 65  Q) may be skippe
4680: 64 20 75 6e 6c 65 73 73 20 74 68 6f 73 65 20 62  d unless those b
4690: 69 6e 61 72 69 65 73 0d 0a 20 20 20 20 20 20 20  inaries..
46a0: 20 23 20 20 20 20 20 20 20 20 20 20 61 72 65 20   #          are
46b0: 73 75 62 73 65 71 75 65 6e 74 6c 79 20 63 6f 70  subsequently cop
46c0: 69 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 72  ied into the cor
46d0: 72 65 63 74 20 64 69 72 65 63 74 6f 72 79 20 28  rect directory (
46e0: 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20 20 20 20  i.e. by..
46f0: 20 23 20 20 20 20 20 20 20 20 20 20 22 74 65 73   #          "tes
4700: 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20  t_all.bat")...
4710: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4720: 20 23 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68   #       Note th
4730: 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75  at all of the bu
4740: 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f  ild commands abo
4750: 76 65 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20  ve will default
4760: 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20 20 20 20  to using..
4770: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c 61    #       the la
4780: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 20  test version of
4790: 4d 53 42 75 69 6c 64 20 61 76 61 69 6c 61 62 6c  MSBuild availabl
47a0: 65 20 61 6e 64 20 74 68 65 20 22 74 65 73 74 5f  e and the "test_
47b0: 79 65 61 72 22 20 6d 61 79 0d 0a 20 20 20 20 20  year" may..
47c0: 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 64 20     #       need
47d0: 74 6f 20 62 65 20 61 64 6a 75 73 74 65 64 20 61  to be adjusted a
47e0: 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f 20 61 63  ccordingly to ac
47f0: 74 75 61 6c 6c 79 20 72 75 6e 20 74 68 65 20 74  tually run the t
4800: 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...
4810: 20 20 20 20 23 20 20 20 20 20 20 20 52 65 66 65      #       Refe
4820: 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74  r to the comment
4830: 73 20 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65  s in [getBuildYe
4840: 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66  ar] for more inf
4850: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20  ormation on..
4860: 20 20 20 20 20 23 20 20 20 20 20 20 20 68 6f 77       #       how
4870: 20 74 6f 20 73 65 74 20 74 68 69 73 20 76 61 72   to set this var
4880: 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  iable...
4890: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e  #..        set n
48a0: 61 74 69 76 65 20 5b 68 61 73 52 75 6e 74 69 6d  ative [hasRuntim
48b0: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d  eOption native].
48c0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
48d0: 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65  n [joinBuildDire
48e0: 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67  ctory $native [g 48f0: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 etBuildBaseDirec 4900: 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 tory] \.. 4910: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65 [getBuildYe 4920: 61 72 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 ar] [getBuildPla 4930: 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b tform$native] [
4940: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
4950: 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d  ation]]..      }
4960: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
4970: 70 72 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56  proc getReleaseV
4980: 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20  ersion {} {..
4990: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
49a0: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74  TE: Figure out t
49b0: 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69  he release versi
49c0: 6f 6e 20 66 6f 72 20 75 73 65 20 77 69 74 68 20  on for use with
49d0: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
49e0: 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ory..      #
49f0: 20 20 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67     when checking
4a00: 20 66 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72   for available r
4a10: 65 6c 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20  eleases...
4a20: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
4a30: 66 6f 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65  fo exists ::rele
4a40: 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20  ase_version] &&
4a50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
4a60: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72  ring length $::r 4a70: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 elease_version] 4a80: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 4a90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4aa0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 # NOTE: The rele 4ab0: 61 73 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20 ase version has 4ac0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 4ad0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 4ae0: 69 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 it.. # 4af0: 20 20 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 verbatim... 4b00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4b10: 20 20 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 return$::rele
4b20: 61 73 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20  ase_version..
4b30: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
4b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4b50: 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61  # NOTE: No relea
4b60: 73 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76  se version is av
4b70: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20  ailable, return
4b80: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  an empty string.
4b90: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4ba0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
4bb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4bc0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
4bd0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66  uildFileName { f
4be0: 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  ileName } {..
4bf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4c00: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20  TE: Returns the
4c10: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e  specified file n
4c20: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72  ame as if it wer
4c30: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  e located in the
4c40: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4c50: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c  build directory,
4c60: 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20   discarding any
4c70: 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d  directory inform
4c80: 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20  ation present..
4c90: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in
4ca0: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  the file name as
4cb0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
4cc0: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
4cd0: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
4ce0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
4cf0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66   \..          [f
4d00: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69  ile join [getBui
4d10: 6c 64 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69  ldDirectory] [fi
4d20: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d  le tail $fileNam 4d30: 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a e]]].. }..... 4d40: 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 proc getBina 4d50: 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b ryDirectory {} { 4d60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4d70: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 4d80: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 ocedure returns 4d90: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 the directory wh 4da0: 65 72 65 20 74 68 65 20 74 65 73 74 20 61 70 70 ere the test app 4db0: 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 lication.. 4dc0: 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 28 # itself ( 4dd0: 69 2e 65 2e 20 74 68 65 20 45 61 67 6c 65 20 73 i.e. the Eagle s 4de0: 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61 74 65 64 hell) is located 4df0: 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20 . This will be 4e00: 75 73 65 64 20 61 73 0d 0a 20 20 20 20 20 20 23 used as.. # 4e10: 20 20 20 20 20 20 20 74 68 65 20 64 65 73 74 69 the desti 4e20: 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 63 nation for the c 4e30: 6f 70 69 65 64 20 53 79 73 74 65 6d 2e 44 61 74 opied System.Dat 4e40: 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 a.SQLite native 4e50: 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 and.. # 4e60: 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d managed assem 4e70: 62 6c 69 65 73 20 28 69 2e 65 2e 20 62 65 63 61 blies (i.e. beca 4e80: 75 73 65 20 74 68 69 73 20 69 73 20 6f 6e 65 20 use this is one 4e90: 6f 66 20 74 68 65 20 66 65 77 20 70 6c 61 63 65 of the few place 4ea0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 4eb0: 20 77 68 65 72 65 20 74 68 65 20 43 4c 52 20 77 where the CLR w 4ec0: 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 66 69 6e ill actually fin 4ed0: 64 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20 d and load them 4ee0: 70 72 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20 properly)... 4ef0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 4f00: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 69 info exists ::bi 4f10: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 nary_directory] 4f20: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 4f30: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
4f40: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f  ::binary_directo
4f50: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
4f60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4f70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
4f80: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
4f90: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79  binary directory
4fa0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
4fb0: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23  dden;..        #
4fc0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
4fd0: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69  , use it verbati
4fe0: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  m...        #..
4ff0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 5000: 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 :binary_director 5010: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 y.. } else 5020: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 5030: 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d n [info binary]. 5040: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 5050: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 5060: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b BinaryFileName { 5070: 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 fileName } {.. 5080: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 5090: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 NOTE: Returns th 50a0: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 e specified file 50b0: 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 name as if it w 50c0: 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 ere located in t 50d0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 50e0: 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f binary directo 50f0: 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 ry, discarding a 5100: 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 ny directory inf 5110: 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 ormation present 5120: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 5130: 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 in the file name 5140: 20 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 as provided by 5150: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 5160: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 5170: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 5180: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 5190: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 [file join [get 51a0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d BinaryDirectory] 51b0: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
51c0: 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d  eName]]]..    }.
51d0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
51e0: 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61  CoreBinaryFileNa
51f0: 6d 65 20 7b 20 7b 73 74 61 6e 64 61 72 64 20 66  me { {standard f
5200: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
5210: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
5220: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 66 75  : Returns the fu
5230: 6c 6c 20 70 61 74 68 20 66 6f 72 20 74 68 65 20  ll path for the
5240: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing
5250: 74 68 65 20 63 6f 72 65 20 53 51 4c 69 74 65 0d  the core SQLite.
5260: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c  .      #       l
5270: 69 62 72 61 72 79 20 63 6f 64 65 20 66 6f 72 20  ibrary code for
5280: 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a  this platform...
5290: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
52a0: 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  f {[hasRuntimeOp
52b0: 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68  tion native]} th
52c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
52d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
52e0: 20 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65   Return the mixe
52f0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
5300: 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20  file name...
5310: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
5320: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69  eturn [file nati
5330: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  vename \..
5340: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
5350: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
5360: 74 6f 72 79 5d 20 53 79 73 74 65 6d 2e 44 61 74  tory] System.Dat
5370: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a  a.SQLite.dll]]..
5380: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
5390: 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20  $standard} then 53a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 53b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 53c0: 74 75 72 6e 20 74 68 65 20 6e 61 74 69 76 65 2d turn the native- 53d0: 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 only standard SQ 53e0: 4c 69 74 65 20 6c 69 62 72 61 72 79 20 66 69 6c Lite library fil 53f0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 e name... 5400: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 5410: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 5420: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 5430: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 [file join [g 5440: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 etBinaryDirector 5450: 79 5d 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d y] sqlite3.dll]] 5460: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 5470: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 5480: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 5490: 75 72 6e 20 74 68 65 20 6e 61 74 69 76 65 2d 6f urn the native-o 54a0: 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 nly interop asse 54b0: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d mbly file name.. 54c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 54d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 54e0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 nativename \.. 54f0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 5500: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 join [getBinary 5510: 44 69 72 65 63 74 6f 72 79 5d 20 53 51 4c 69 74 Directory] SQLit 5520: 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d e.Interop.dll]]. 5530: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 5540: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 5550: 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 CommonDirectory 5560: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 5570: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 5580: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 5590: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 55a0: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 y where the test 55b0: 20 73 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 scripts.. 55c0: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 55d0: 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 e located. By d 55e0: 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 efault, this jus 55f0: 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 t returns the Ea 5600: 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 gle.. # 5610: 20 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 binary direct 5620: 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ory... #.. 5630: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 5640: 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 xists ::common_d 5650: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 5660: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 5670: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d g length$::comm
5680: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  on_directory] >
5690: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
56a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
56b0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
56c0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e  on of the common
56d0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
56e0: 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20  een set;..
56f0: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66    #       theref
5700: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20  ore, use it...
5710: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
5720: 20 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f   return $::commo 5730: 6e 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 n_directory.. 5740: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 5750: 66 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 fo exists ::vend 5760: 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 or_directory] && 5770: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 5780: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
5790: 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79  vendor_directory
57a0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
57b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
57c0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
57d0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65  cation of the ve
57e0: 6e 64 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68  ndor directory h
57f0: 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20  as been set;..
5800: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
5810: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e  erefore, use it.
5820: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5830: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76       return $::v 5840: 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d endor_directory. 5850: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 5860: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 5870: 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 tcl_library] && 5880: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 5890: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
58a0: 63 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20  cl_library] > 0
58b0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
58c0: 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72  [file isdirector
58d0: 79 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  y $::tcl_library 58e0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 58f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 5900: 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 NOTE: The variab 5910: 6c 65 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 le with the loca 5920: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 tion of the scri 5930: 70 74 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 pt library is.. 5940: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 5950: 65 74 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 et and appears t 5960: 6f 20 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 o be a real dire 5970: 63 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 ctory (i.e. not 5980: 65 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 embedded.. 5990: 20 20 23 20 20 20 20 20 20 20 77 69 74 68 69 6e # within 59a0: 20 61 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 a file); theref 59b0: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 59c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 59d0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c return$::tcl_l
59e0: 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20  ibrary..      }
59f0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
5a00: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
5a10: 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74  E: Fallback to t
5a20: 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e  he directory con
5a30: 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63  taining the exec
5a40: 75 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20  utable...
5a50: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
5a60: 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d  rn [info binary]
5a70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
5a80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
5a90: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
5aa0: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ry {} {..      #
5ab0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5ac0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72  This procedure r
5ad0: 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63  eturns the direc
5ae0: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74  tory where the t
5af0: 65 73 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20  est databases..
5b00: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
5b10: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20  uld be located.
5b20: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69   By default, thi
5b30: 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20  s just uses the
5b40: 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20  temporary..
5b50: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f   #       directo
5b60: 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f  ry configured fo
5b70: 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a  r this system...
5b80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
5b90: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
5ba0: 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63  ::database_direc
5bb0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
5bc0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
5bd0: 6e 67 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65  ngth $::database 5be0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 5bf0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 5c00: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 5c10: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 5c20: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 of the database 5c30: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 5c40: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 5c50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5c60: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 5c70: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 5c80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
5c90: 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63  ::database_direc
5ca0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
5cb0: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
5cc0: 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72  ts ::scratch_dir
5cd0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
5ce0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
5cf0: 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63  length $::scratc 5d00: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 h_directory] > 0 5d10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 5d20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 5d30: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 5d40: 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 n of the scratch 5d50: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 5d60: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 5d70: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5d80: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 5d90: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 5da0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
5db0: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
5dc0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
5dd0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
5de0: 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  urn [getTemporar
5df0: 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d  yPath]..      }.
5e00: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
5e10: 72 6f 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79  roc getTemporary
5e20: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
5e30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5e40: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
5e50: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68  edure returns th
5e60: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72  e directory wher
5e70: 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  e the temporary
5e80: 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  files..      #
5e90: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c       should be l
5ea0: 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61  ocated.  By defa
5eb0: 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75  ult, this just u
5ec0: 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72  ses the temporar
5ed0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
5ee0: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69   directory confi
5ef0: 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73  gured for this s
5f00: 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d  ystem...      #.
5f10: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
5f20: 20 65 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72   exists ::tempor
5f30: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  ary_directory] &
5f40: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
5f50: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 5f60: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 :temporary_direc 5f70: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 5f80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 5f90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 5fa0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 5fb0: 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 e temporary dire 5fc0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f ctory has been o 5fd0: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 verridden;.. 5fe0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 # ther 5ff0: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a efore, use it... 6000: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6010: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d return$::tem
6020: 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79  porary_directory
6030: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
6040: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
6050: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f  :scratch_directo
6060: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
6070: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
6080: 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69  th $::scratch_di 6090: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 60a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 60b0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 60c0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 60d0: 20 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72 the scratch dir 60e0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 60f0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 6100: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 6110: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. 6120: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6130: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 return$::sc
6140: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d  ratch_directory.
6150: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
6160: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
6170: 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74  [getTemporaryPat
6180: 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  h]..      }..
6190: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
61a0: 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73  getTestOverrides
61b0: 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72  Preamble { {extr
61c0: 61 56 61 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20  aVarNames ""} }
61d0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 72  {..      set var
61e0: 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  Names [list]....
61f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
6200: 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61   NOTE: If availa
6210: 62 6c 65 2c 20 73 74 61 72 74 20 77 69 74 68 20  ble, start with
6220: 74 68 65 20 6d 61 73 74 65 72 20 6c 69 73 74 20  the master list
6230: 6f 66 20 74 65 73 74 20 6f 76 65 72 72 69 64 65  of test override
6240: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6250: 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20  variables...
6260: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
6270: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
6280: 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 26 26  st_overrides] &&
6290: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c   \..          [l
62a0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f  length $::test_o 62b0: 76 65 72 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 verrides] > 0} t 62c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 hen {.. e 62d0: 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e val lappend varN 62e0: 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 ames$::test_ove
62f0: 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d  rrides..      }.
6300: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
6310: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71    # NOTE: If req
6320: 75 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 61  uested by our ca
6330: 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 20 61 64  ller, add any ad
6340: 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c  ditional variabl
6350: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
6360: 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e   names to copy n
6370: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
6380: 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
6390: 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 5d   $extraVarNames] 63a0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 63b0: 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 eval lappe 63c0: 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 65 78 74 nd varNames$ext
63d0: 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20  raVarNames..
63e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
63f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
6400: 69 6c 64 20 74 68 65 20 73 63 72 69 70 74 20 66  ild the script f
6410: 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 72 65  ragment to be re
6420: 74 75 72 6e 65 64 20 62 79 20 70 72 6f 63 65 73  turned by proces
6430: 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 20 20 20  sing each..
6440: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
6450: 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 64 69 6e  e name and addin
6460: 67 20 74 68 65 20 6e 65 63 65 63 65 73 73 61 72  g the nececessar
6470: 79 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  y script fragmen
6480: 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20  ts for..      #
6490: 20 20 20 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d        each one..
64a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
64b0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d  set result ""...
64c0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76  .      foreach v
64d0: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73  arName $varNames 64e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 64f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B 6500: 75 69 6c 64 20 74 68 65 20 71 75 61 6c 69 66 69 uild the qualifi 6510: 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 ed global variab 6520: 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 le name... 6530: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 6540: 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 fullVarName [ap 6550: 70 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 61 72 pendArgs ::$var
6560: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Name]....
6570: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
6580: 54 45 3a 20 44 6f 65 73 20 74 68 65 20 76 61 72  TE: Does the var
6590: 69 61 62 6c 65 20 65 78 69 73 74 20 69 6e 20 74  iable exist in t
65a0: 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20  his interpreter
65b0: 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20 20 20  context?..
65c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
65d0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 66  {[info exists $f 65e0: 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 ullVarName]} the 65f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 6600: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 6610: 54 45 3a 20 41 70 70 65 6e 64 20 61 20 73 63 72 TE: Append a scr 6620: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 ipt fragment to 6630: 74 68 65 20 72 65 73 75 6c 74 20 74 68 61 74 20 the result that 6640: 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a will correctly.. 6650: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 6660: 20 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 copy any conta 6670: 69 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 61 6e ined value to an 6680: 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 65 other interprete 6690: 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 r context... 66a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 66b0: 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 append result 66c0: 20 5c 6e 20 22 73 65 74 20 22 20 24 66 75 6c 6c \n "set "$full
66d0: 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73  VarName " \{" [s
66e0: 65 74 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d  et $fullVarName] 66f0: 20 5c 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \}.. }.. 6700: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 6710: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6720: 3a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 : If the result 6730: 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 contains one or 6740: 6d 6f 72 65 20 73 63 72 69 70 74 20 66 72 61 67 more script frag 6750: 6d 65 6e 74 73 2c 20 61 70 70 65 6e 64 20 61 0d ments, append a. 6760: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e . # n 6770: 65 77 6c 69 6e 65 2e 0d 0a 20 20 20 20 20 20 23 ewline... # 6780: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 6790: 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75 ing length$resu
67a0: 6c 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  lt] > 0} then {.
67b0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
67c0: 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 20  result \n..
67d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
67e0: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 67f0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 6800: 65 74 41 70 70 44 6f 6d 61 69 6e 50 72 65 61 6d etAppDomainPream 6810: 62 6c 65 20 7b 20 7b 70 72 65 66 69 78 20 22 22 ble { {prefix "" 6820: 7d 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7d 20 } {suffix ""} } 6830: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 6840: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 # NOTE: This p 6850: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 rocedure returns 6860: 20 61 20 74 65 73 74 20 73 65 74 75 70 20 73 63 a test setup sc 6870: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 73 75 ript fragment su 6880: 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20 20 20 itable for.. 6890: 20 20 23 20 20 20 20 20 20 20 65 76 61 6c 75 61 # evalua 68a0: 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74 65 72 tion by an inter 68b0: 70 72 65 74 65 72 20 63 72 65 61 74 65 64 20 69 preter created i 68c0: 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 61 70 n an isolated ap 68d0: 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 plication.. 68e0: 20 23 20 20 20 20 20 20 20 64 6f 6d 61 69 6e 2e # domain. 68f0: 20 20 54 68 65 20 73 63 72 69 70 74 20 66 72 61 The script fra 6900: 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 gment being retu 6910: 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 72 rned will be sur 6920: 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20 20 20 rounded by.. 6930: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 70 72 # the pr 6940: 65 66 69 78 20 61 6e 64 20 73 75 66 66 69 78 20 efix and suffix 6950: 22 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 "script fragment 6960: 73 22 20 73 70 65 63 69 66 69 65 64 20 62 79 20 s" specified by 6970: 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 our caller,.. 6980: 20 20 20 23 20 20 20 20 20 20 20 69 66 20 61 6e # if an 6990: 79 2e 20 20 54 68 65 20 65 6e 74 69 72 65 20 73 y. The entire s 69a0: 63 72 69 70 74 20 62 65 69 6e 67 20 72 65 74 75 cript being retu 69b0: 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 62 rned will be sub 69c0: 73 74 69 74 75 74 65 64 20 76 69 61 0d 0a 20 20 stituted via.. 69d0: 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 75 62 # [sub 69e0: 73 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f 6e 74 st], in the cont 69f0: 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 ext of our calle 6a00: 72 2c 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 r, before being 6a10: 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 returned... 6a20: 20 23 20 20 20 20 20 20 20 54 68 69 73 20 73 74 # This st 6a30: 65 70 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 ep is necessary 6a40: 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c 69 6d so that some lim 6a50: 69 74 65 64 20 63 6f 6e 74 65 78 74 20 69 6e 66 ited context inf 6a60: 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 ormation,.. 6a70: 20 23 20 20 20 20 20 20 20 70 72 69 6d 61 72 69 # primari 6a80: 6c 79 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 ly related to th 6a90: 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 e testing direct 6aa0: 6f 72 69 65 73 2c 20 63 61 6e 20 62 65 20 74 72 ories, can be tr 6ab0: 61 6e 73 66 65 72 72 65 64 0d 0a 20 20 20 20 20 ansferred.. 6ac0: 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 # to the 6ad0: 69 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20 74 interpreter in t 6ae0: 68 65 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c he isolated appl 6af0: 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 ication domain, 6b00: 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20 20 20 making it.. 6b10: 20 23 20 20 20 20 20 20 20 61 62 6c 65 20 74 6f # able to 6b20: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 72 75 successfully ru 6b30: 6e 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71 n tests that req 6b40: 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 uire one or more 6b50: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 of the.. # 6b60: 20 20 20 20 20 20 20 66 69 6c 65 73 20 69 6e 20 files in 6b70: 6f 6e 65 20 6f 66 20 74 68 65 20 74 65 73 74 69 one of the testi 6b80: 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 ng directories. 6b90: 20 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c 64 20 Callers should 6ba0: 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20 20 20 23 keep in.. # 6bb0: 20 20 20 20 20 20 20 6d 69 6e 64 20 74 68 61 74 mind that 6bc0: 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 the test script 6bd0: 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 fragment being 6be0: 72 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f 74 20 returned cannot 6bf0: 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20 20 23 rely on.. # 6c00: 20 20 20 20 20 20 20 61 6e 79 20 73 63 72 69 70 any scrip 6c10: 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 t library proced 6c20: 75 72 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f ures that are no 6c30: 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 t provided by th 6c40: 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 e Eagle.. # 6c50: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 70 library p 6c60: 61 63 6b 61 67 65 20 28 69 2e 65 2e 20 22 69 6e ackage (i.e. "in 6c70: 69 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e 63 6c it.eagle"), incl 6c80: 75 64 69 6e 67 20 74 68 6f 73 65 20 70 72 6f 76 uding those prov 6c90: 69 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 ided by.. # 6ca0: 20 20 20 20 20 20 20 74 68 65 20 45 61 67 6c 65 the Eagle 6cb0: 20 74 65 73 74 20 70 61 63 6b 61 67 65 2c 20 75 test package, u 6cc0: 6e 6c 65 73 73 20 74 68 65 20 66 69 6c 65 20 63 nless the file c 6cd0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d 20 69 ontaining them i 6ce0: 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 s loaded.. 6cf0: 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 # manually 6d00: 20 76 69 61 20 73 6f 6d 65 20 6f 74 68 65 72 20 via some other 6d10: 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e 67 2e 20 mechanism (e.g. 6d20: 62 79 20 69 6e 63 6c 75 64 69 6e 67 20 61 70 70 by including app 6d30: 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20 20 ropriate.. 6d40: 23 20 20 20 20 20 20 20 5b 70 61 63 6b 61 67 65 # [package 6d50: 20 72 65 71 75 69 72 65 5d 20 6f 72 20 5b 73 6f require] or [so 6d60: 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 urce] commands i 6d70: 6e 20 74 68 65 20 70 72 65 66 69 78 20 6f 72 20 n the prefix or 6d80: 73 75 66 66 69 78 0d 0a 20 20 20 20 20 20 23 20 suffix.. # 6d90: 20 20 20 20 20 20 73 63 72 69 70 74 20 66 72 61 script fra 6da0: 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f 2c 20 gments). Also, 6db0: 61 6c 6c 20 76 61 72 69 61 62 6c 65 20 72 65 66 all variable ref 6dc0: 65 72 65 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 erences and all 6dd0: 6e 65 73 74 65 64 0d 0a 20 20 20 20 20 20 23 20 nested.. # 6de0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 28 commands ( 6df0: 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20 73 71 i.e. those in sq 6e00: 75 61 72 65 20 62 72 61 63 6b 65 74 73 29 20 63 uare brackets) c 6e10: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 ontained in the 6e20: 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 final.. # 6e30: 20 20 20 20 20 73 63 72 69 70 74 20 66 72 61 67 script frag 6e40: 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20 75 70 ment will end up 6e50: 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 being evaluated 6e60: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context 6e70: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 of the.. # 6e80: 20 20 20 20 20 20 63 61 6c 6c 69 6e 67 20 69 6e calling in 6e90: 74 65 72 70 72 65 74 65 72 20 61 6e 64 20 6e 6f terpreter and no 6ea0: 74 20 74 68 65 20 74 61 72 67 65 74 20 69 6e 74 t the target int 6eb0: 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64 erpreter created 6ec0: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 in the.. # 6ed0: 20 20 20 20 20 20 20 69 73 6f 6c 61 74 65 64 20 isolated 6ee0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 application doma 6ef0: 69 6e 20 75 6e 6c 65 73 73 20 74 68 65 20 64 6f in unless the do 6f00: 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e 64 2f 6f llar signs and/o 6f10: 72 20 73 71 75 61 72 65 0d 0a 20 20 20 20 20 20 r square.. 6f20: 23 20 20 20 20 20 20 20 62 72 61 63 6b 65 74 73 # brackets 6f30: 20 61 72 65 20 73 70 65 63 69 61 6c 6c 79 20 71 are specially q 6f40: 75 6f 74 65 64 20 77 69 74 68 20 62 61 63 6b 73 uoted with backs 6f50: 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 lashes... # 6f60: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 6f70: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 6f80: 73 75 62 73 74 20 5b 61 70 70 65 6e 64 41 72 67 subst [appendArg 6f90: 73 20 24 70 72 65 66 69 78 20 7b 0d 0a 20 20 20 s$prefix {..
6fa0: 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e       if {[hasRun
6fb0: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
6fc0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
6fd0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
6fe0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
6ff0: 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e  GetActive AddRun
7000: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
7010: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
7020: 20 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f 76      } [getTestOv
7030: 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20  erridesPreamble
7040: 5b 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 5f  [list path test_
7050: 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69  channel]] $suffi 7060: 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a x]]].. }..... 7070: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 proc tryCopy 7080: 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c BinaryFile { fil 7090: 65 4e 61 6d 65 20 7b 6e 65 77 46 69 6c 65 4e 61 eName {newFileNa 70a0: 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 me ""} } {.. 70b0: 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 set sourceFile 70c0: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF 70d0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
70e0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  e]....      if {
70f0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73  ![file exists $s 7100: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 ourceFileName]} 7110: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7120: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
7130: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
7140: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
7150: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63   "---- skipped c
7160: 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66 69  opying binary fi
7170: 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  le \"" $sourceFi 7180: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. 7190: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do 71a0: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] 71b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 .... retu 71c0: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rn.. }.... 71d0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 71e0: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 length$newFile
71f0: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
7200: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  {..        set t
7210: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
7220: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
7230: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20  $newFileName].. 7240: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 7250: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 set targe 7260: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 tFileName [getBu 7270: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c ildFileName$fil
7280: 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  eName]..      }.
7290: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
72a0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
72b0: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d       file copy -
72c0: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c  force $sourceFil 72d0: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c eName$targetFil
72e0: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68  eName}] == 0} th
72f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
7300: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 7310: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 7320: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 7330: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 ---- copied bina 7340: 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 ry file from \"" 7350: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
7360: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20   "\" to \"" \..
7370: 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67             $targ 7380: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d etFileName \"\n] 7390: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 73a0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 73b0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
73c0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
73d0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
73e0: 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20   failed to copy
73f0: 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d  binary file from
7400: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65   \"" $sourceFile 7410: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 7420: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 "\" to \""$
7430: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c  targetFileName \
7440: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  "\n]..      }..
7450: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
7460: 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69  c tryCopyBuildFi
7470: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 6e  le { fileName {n
7480: 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d  ewFileName ""} }
7490: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f   {..      set so
74a0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65  urceFileName [ge
74b0: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $74c0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 74d0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 74e0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
74f0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
7500: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 7510: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 7520: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 7530: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 7540: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75 ipped copying bu 7550: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f ild file \""$so
7560: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
7570: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
7580: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
7590: 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  st\n"]....
75a0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
75b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
75c0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e  string length $n 75d0: 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d ewFileName] > 0} 75e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 75f0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e set targetFileN 7600: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi 7610: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e leName$newFileN
7620: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ame]..      } el
7630: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
7640: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65  t targetFileName
7650: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
7660: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ame $fileName].. 7670: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 7680: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c fil 76a0: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 e copy -force$s
76b0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74  ourceFileName $t 76c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 argetFileName}] 76d0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 76e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
76f0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
7700: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
7710: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
7720: 69 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 66  ied build file f
7730: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46  rom \"" $sourceF 7740: 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c ileName "\" to \ 7750: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 7760: 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d$targetFileNam
7770: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
7780: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
7790: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 77a0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 77b0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 77c0: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 "---- failed t 77d0: 6f 20 63 6f 70 79 20 62 75 69 6c 64 20 66 69 6c o copy build fil 77e0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
77f0: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  ceFileName \..
7800: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f            "\" to
7810: 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65   \"" $targetFile 7820: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. 7830: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 7840: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet 7850: 65 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 eBinaryFile { fi 7860: 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 leName } {.. 7870: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 7880: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 7890: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a e$fileName]....
78a0: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
78b0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam 78c0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 78d0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
78e0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
78f0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
7900: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
7910: 65 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61  ed deleting bina
7920: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ry file \"" $fil 7930: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 7940: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe 7950: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 7960: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur 7970: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 7980: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 7990: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
79a0: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68  eName}] == 0} th
79b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
79c0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 79d0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 79e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 79f0: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e ---- deleted bin 7a00: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ary file \""$fi
7a10: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
7a20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
7a30: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 7a40: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 7a50: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 7a60: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 "---- fai 7a70: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 69 led to delete bi 7a80: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 nary file \""$f
7a90: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
7aa0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
7ab0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65  ..    proc tryDe
7ac0: 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 7b 20  leteBuildFile {
7ad0: 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20  fileName } {..
7ae0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
7af0: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
7b00: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  me $fileName]... 7b10: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil 7b20: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
7b30: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
7b40: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 7b50: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 7b60: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 7b70: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip 7b80: 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 75 69 ped deleting bui 7b90: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ld file \""$fil
7ba0: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
7bb0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
7bc0: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
7bd0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
7be0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
7bf0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
7c00: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c  file delete $fil 7c10: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 eName}] == 0} th 7c20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 7c30: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
7c40: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
7c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
7c60: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69  ---- deleted bui
7c70: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ld file \"" $fil 7c80: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. 7c90: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7ca0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
7cb0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
7cc0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
7cd0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
7ce0: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69  ed to delete bui
7cf0: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ld file \"" $fil 7d00: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. 7d10: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 7d20: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 proc tryCopy 7d30: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e Assembly { fileN 7d40: 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 7d ame {pdb true} } 7d50: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70 {.. tryCop 7d60: 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 yBuildFile$file
7d70: 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66  Name....      if
7d80: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a   {$pdb} then {.. 7d90: 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 tryCopyB 7da0: 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 uildFile [append 7db0: 41 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e Args [file rootn 7dc0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e ame$fileName] .
7dd0: 70 64 62 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  pdb]..      }..
7de0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
7df0: 63 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d  c tryDeleteAssem
7e00: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  bly { fileName {
7e10: 70 64 62 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  pdb true} } {..
7e20: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
7e30: 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61  naryFile $fileNa 7e40: 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b me.... if { 7e50: 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$pdb} then {..
7e60: 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42        tryDeleteB
7e70: 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e  inaryFile [appen
7e80: 64 41 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74  dArgs [file root
7e90: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20  name $fileName] 7ea0: 2e 70 64 62 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a .pdb].. }.. 7eb0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7ec0: 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 oc tryLoadAssemb 7ed0: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 ly { fileName } 7ee0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c {.. set fil 7ef0: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary 7f00: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
7f10: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me]....      if
7f20: 7b 5b 63 61 74 63 68 20 7b 73 65 74 20 61 73 73  {[catch {set ass
7f30: 65 6d 62 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20  embly \..
7f40: 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 6c         [object l
7f50: 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 46 69  oad -loadtype Fi
7f60: 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c 65 4e  le -alias $fileN 7f70: 61 6d 65 5d 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 ame]}] == 0} the 7f80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 7f90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 7fa0: 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65 63 Now, add the nec 7fb0: 65 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e 73 essary test cons 7fc0: 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 traint... 7fd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC 7fe0: 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 onstraint [file 7ff0: 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 rootname [file t 8000: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ail$fileName]].
8010: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
8020: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72        # NOTE: Gr
8030: 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 6e  ab the image run
8040: 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 6f  time version fro
8050: 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62  m the assembly b
8060: 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20  ecause..
8070: 23 20 20 20 20 20 20 20 73 65 76 65 72 61 6c 20  #       several
8080: 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 74  tests rely on it
8090: 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 69   having a certai
80a0: 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  n value...
80b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
80c0: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
80d0: 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 69  ndArgs [file tai
80e0: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c  l $fileName] _ \ 80f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 .. [$
8100: 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52 75  assembly ImageRu
8110: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a  ntimeVersion]]..
8120: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8130: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
8140: 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74  urn the full pat
8150: 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20  h of the loaded
8160: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  file...        #
8170: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8180: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 8190: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 81a0: 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c urn "".. }... 81b0: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51 4c .. proc isSQL 81c0: 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 iteReady {} {.. 81d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 81e0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 81f0: 64 75 72 65 20 6d 75 73 74 20 72 65 74 75 72 6e dure must return 8200: 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 non-zero only i 8210: 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 f the SQLite nat 8220: 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ive.. # 8230: 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20 74 library and t 8240: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 8250: 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 QLite managed as 8260: 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 sembly are loade 8270: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 8280: 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 8290: 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 se by the test s 82a0: 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 uite. Currently 82b0: 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 , this procedure 82c0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 82d0: 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 should be called 82e0: 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 20 only after the 82f0: 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 [tryLoadAssembly 8300: 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 0d ] procedure has. 8310: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b 8320: 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 een called to pr 8330: 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79 73 74 obe for the Syst 8340: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d em.Data.SQLite m 8350: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 0d anaged assembly. 8360: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 8370: 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 nd the [checkFor 8380: 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 72 SQLite] procedur 8390: 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 e has been calle 83a0: 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a d to probe for.. 83b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 83c0: 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 e SQLite native 83d0: 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77 69 library; otherwi 83e0: 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 se, this procedu 83f0: 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a re will simply.. 8400: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c # al 8410: 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72 6f ways return zero 8420: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 8430: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 8440: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 8450: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 8460: 74 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 te] && \.. 8470: 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 [haveConstra 8480: 69 6e 74 20 53 51 4c 69 74 65 5d 7d 5d 0d 0a 20 int SQLite]}].. 8490: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 84a0: 63 20 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 7b c matchMachine { 84b0: 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 platform } {.. 84c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 84d0: 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73 NOTE: An empty s 84e0: 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c tring for the pl 84f0: 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61 atform means tha 8500: 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e t the build is n 8510: 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ot.. # 8520: 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20 [primarily] a 8530: 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68 native build; th 8540: 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61 erefore, it alwa 8550: 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20 ys matches... 8560: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 8570: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
8580: 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20  platform] == 0}
8590: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
85a0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
85b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
85c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44  .      # NOTE: D
85d0: 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65  oes the specifie
85e0: 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68  d platform match
85f0: 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 72 65   up to the curre
8600: 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20  nt process?..
8610: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
8620: 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61  $platform eq [ma 8630: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 chineToPlatform 8640: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28$::tcl_platform(
8650: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
8660: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
8670: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d  n true..      }.
8680: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8690: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70    # NOTE: The sp
86a0: 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d  ecified platform
86b0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match
86c0: 75 70 20 77 69 74 68 20 74 68 65 20 70 6c 61 74  up with the plat
86d0: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20  form..      #
86e0: 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 72 72      for the curr
86f0: 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  ent process...
8700: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
8710: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d  urn false..    }
8720: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
8730: 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c  eckForSQLiteBuil
8740: 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65  ds { channel {se
8750: 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  lect false} } {.
8760: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
8770: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
8780: 72 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c 65  r every possible
8790: 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69   valid combinati
87a0: 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  on of values use
87b0: 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 20  d when..      #
87c0: 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f        locating o
87d0: 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74  ut the build out
87e0: 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 20 73  put directory, s
87f0: 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76 61 69  howing each avai
8800: 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20  lable..      #
8810: 20 20 20 20 20 62 75 69 6c 64 20 76 61 72 69 61       build varia
8820: 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77  tion along the w
8830: 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ay...      #..
8840: 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 74 69      foreach nati
8850: 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 74  ve [list false t
8860: 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  rue] {..
8870: 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b 67 65  foreach year [ge
8880: 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a  tBuildYears] {..
8890: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
88a0: 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  h configuration
88b0: 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75  [getBuildConfigu
88c0: 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20  rations] {..
88d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
88e0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
88f0: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 66  igure out the ef
8900: 66 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c  fective build pl
8910: 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73  atform.  This is
8920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
8930: 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e 20 77        based on w
8940: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a
8950: 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69  [primarily] nati
8960: 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20  ve build..
8970: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73        #       is
8980: 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f   being used.  Fo
8990: 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f  r [primarily] no
89a0: 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  n-native builds,
89b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
89c0: 20 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20        this will
89d0: 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  be an empty stri
89e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...
89f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
8a00: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65  set platform [ge
8a10: 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24  tBuildPlatform $8a20: 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 native].... 8a30: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
8a40: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
8a50: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
8a60: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b       "---- check
8a70: 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  ing for System.D
8a80: 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64  ata.SQLite build
8a90: 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20   \"" [expr \..
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24                {$8ab0: 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 native ? "native 8ac0: 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 /" : ""}] [expr 8ad0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 8ae0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8af0: 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20$platform] >
8b00: 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20  0 ? [appendArgs
8b10: 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22  $platform /] : " 8b20: 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 "}]$year \..
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24               / $8b40: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c configuration "\ 8b50: 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 "... "].... 8b60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8b70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 8b80: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu 8b90: 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 alified director 8ba0: 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 y where the nece 8bb0: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 ssary.. 8bc0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f # compo 8bd0: 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d nents for System 8be0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f .Data.SQLite sho 8bf0: 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 uld be found... 8c00: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 8c10: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 set di 8c20: 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 rectory [joinBui 8c30: 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 ldDirectory$nat
8c40: 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ive \..
8c50: 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64         [getBuild
8c60: 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  BaseDirectory] $8c70: 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 year$platform $8c80: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a configuration].. 8c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 8ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 8cb0: 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 OTE: Do the nece 8cc0: 73 73 61 72 79 20 66 69 6c 65 73 20 65 78 69 73 ssary files exis 8cd0: 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e t? Currently, n 8ce0: 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d 0a 20 o other steps.. 8cf0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 8d00: 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 are taken to 8d10: 76 65 72 69 66 79 20 74 68 69 73 20 62 75 69 6c verify this buil 8d20: 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20 76 69 d is actually vi 8d30: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 able... 8d40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 8d50: 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 if {[isBuildAv 8d60: 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 ailable$native
8d70: 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  $directory]} the 8d80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 8d90: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 8da0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e # NOTE: When 8db0: 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 in "select" mod 8dc0: 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 e, automatically 8dd0: 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 select the firs 8de0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t.. 8df0: 20 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 # availab 8e00: 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 le build of Syst 8e10: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 em.Data.SQLite a 8e20: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a nd then return.. 8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 8e40: 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74 65 6c immediatel 8e50: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y... 8e60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 8e70: 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 if {$select &
8e80: 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20  & [matchMachine
8e90: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e  $platform]} then 8ea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 8eb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 8ec0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d # NOTE: M 8ed0: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 anually override 8ee0: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64 all the build d 8ef0: 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69 irectory selecti 8f00: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. 8f10: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 61 # rela 8f20: 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e 67 ted test setting 8f30: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f s in order to fo 8f40: 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a rce this build.. 8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 8f60: 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 74 65 # of Syste 8f70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f m.Data.SQLite to 8f80: 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 be used... 8f90: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 8fb0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 ject invoke Inte 8fc0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 8fd0: 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 e [expr {$native
8fe0: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
8ff0: 20 20 20 20 20 20 20 20 20 20 22 41 64 64 52 75            "AddRu
9000: 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22  ntimeOption" : "
9010: 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74  RemoveRuntimeOpt
9020: 69 6f 6e 22 7d 5d 20 20 6e 61 74 69 76 65 0d 0a  ion"}]  native..
9030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9040: 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61    set ::test_yea
9050: 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20  r $year.. 9060: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t 9070: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c est_platform$pl
9080: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
9090: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65          set ::te
90a0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
90b0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d   $configuration. 90c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 90d0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
90e0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
90f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
9100: 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63       "yes, selec
9110: 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e  ted (" [expr {$n 9120: 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f ative ? "native/ 9130: 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 " : ""}] \.. 9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9150: 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c [expr {[string l 9160: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
9170: 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72   > 0 ? [appendAr
9180: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
9190: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66            $platf 91a0: 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 orm /] : ""}]$y
91b0: 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61  ear / $configura 91c0: 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 tion ")\n"].... 91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r 91e0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 91f0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 9200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 9210: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9220: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20  el yes\n..
9230: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
9240: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
9250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
9260: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no 9270: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \n.. 9280: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 9290: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 92a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 92b0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 92c0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che 92d0: 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 ckForSQLiteRelea 92e0: 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 ses { channel {s 92f0: 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b elect false} } { 9300: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9310: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 # NOTE: Check f 9320: 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 or past releases 9330: 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e of System.Data. 9340: 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 SQLite in the di 9350: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 rectory.. # 9360: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 contained 9370: 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e in the "System. 9380: 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 Data.SQLite" env 9390: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c ironment variabl 93a0: 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 e, if.. # 93b0: 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 present... 93c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 93d0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 93e0: 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 :env(System.Data 93f0: 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a .SQLite)] && \.. 9400: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 9410: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 g length$::env(
9420: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
9430: 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  te)] > 0} then {
9440: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9450: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
9460: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
9470: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79  lified directory
9480: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73   where the neces
9490: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  sary..        #
94a0: 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73        components
94b0: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
94c0: 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62  .SQLite should b
94d0: 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20  e found...
94e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
94f0: 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65   directory [file
9500: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
9510: 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
9520: 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73        $::env(Sys 9530: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 tem.Data.SQLite) 9540: 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 [getReleaseVers 9550: 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ion]]].... 9560: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
9570: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
9580: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
9590: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
95a0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
95b0: 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d  e release \"" \.
95c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69  .            $di 95d0: 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 rectory "\"... " 95e0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 95f0: 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c {[isReleaseAvail 9600: 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 able$directory
9610: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
9620: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
9630: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
9640: 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d  $platform] == 0} 9650: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9660: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 9670: 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 m unknown.. 9680: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 9690: 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 if {$select
96a0: 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65  && [matchMachine
96b0: 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65   $platform]} the 96c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 96d0: 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 set ::build_dir 96e0: 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 ectory$director
96f0: 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y....
9700: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 9710: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 [appendArgs "yes 9720: 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 , selected ("$p
9730: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a  latform ")\n"]..
9740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
9750: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
9760: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
9770: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
9780: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 9790: 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 dArgs "yes ("$p
97a0: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a  latform ")\n"]..
97b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
97c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
97d0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $97e0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a channel no\n.... 97f0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 9800: 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 h path [lsort -d 9810: 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 ecreasing [file 9820: 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 list$directory
9830: 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  *]] {..
9840: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
9850: 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66  sts $path] && [f 9860: 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 ile isdirectory 9870: 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a$path]} then {..
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
9890: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 98a0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 98c0: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 98d0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 98e0: 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 ite release \"" 98f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 9900: 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e$path "\"..
9910: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . "]....
9920: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c        if {[isRel
9930: 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70  easeAvailable $p 9940: 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 ath platform]} t 9950: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 9960: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 9970: 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
9980: 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  orm] == 0} then
9990: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
99a0: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
99b0: 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20  m unknown..
99c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
99e0: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b  if {$select && [ 99f0: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c matchMachine$pl
9a00: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
9a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
9a20: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64     set ::build_d
9a30: 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a  irectory $path.. 9a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9a50: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9a60: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
9a70: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22  yes, selected ("
9a80: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22   $platform ")\n" 9a90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 9aa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 9ab0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ue.. 9ac0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9ae0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
9af0: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20  appendArgs "yes
9b00: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c  (" $platform ")\ 9b10: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. 9b20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 9b30: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9b50: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
9b60: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o\n..
9b70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
9b80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
9b90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
9ba0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
9bb0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 9bc0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 9bd0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 9be0: 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 ---- environment 9bf0: 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 variable \"Syst 9c00: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 em.Data.SQLite\" 9c10: 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 is not " \.. 9c20: 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73 "set, s 9c30: 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f kipping check fo 9c40: 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 r releases...\n" 9c50: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 9c60: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false 9c70: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9c80: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL 9c90: 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61 iteLibrary { cha 9ca0: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 nnel } {.. 9cb0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
9cc0: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
9cd0: 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  r SQLite core li
9ce0: 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  brary... "....
9cf0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
9d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9d10: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
9d20: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
9d30: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
9d40: 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20  te.SQLite3 \..
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
9d60: 74 65 56 65 72 73 69 6f 6e 7d 20 76 65 72 73 69  teVersion} versi
9d70: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
9d80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9d90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
9da0: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
9db0: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e  ed version was n
9dc0: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b  ull.  If so, mak
9dd0: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20  e it easy..
9de0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70     #       to sp
9df0: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
9e00: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
9e10: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers 9e20: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then 9e30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 9e40: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 version null.. 9e50: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 9e60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 9e70: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 9e80: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 o query the Foss 9e90: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi 9ea0: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c fier for the SQL 9eb0: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ite.. # 9ec0: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 core librar 9ed0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. 9ee0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 9ef0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 9f00: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 9f10: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 9f20: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 blic System.Data 9f30: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 9f40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 9f50: 20 20 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49 SQLiteSourceI 9f60: 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 d} sourceId]} th 9f70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9f80: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 9f90: 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 OTE: We failed t 9fa0: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 o query the Foss 9fb0: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi 9fc0: 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 fier... 9fd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 9fe0: 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f t sourceId unkno 9ff0: 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d wn.. }... a000: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a010: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec a020: 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 k if the returne a030: 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 d Fossil source a040: 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e identifier was n a050: 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 ull. If.. a060: 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 # so, ma a070: 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 ke it easy to sp a080: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ot... #.. a090: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str a0a0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 ing length$sour
a0b0: 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ceId] == 0} then
a0c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
a0d0: 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d  t sourceId null.
a0e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
a0f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
a100: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68   # NOTE: Yes, th
a110: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
a120: 62 72 61 72 79 20 61 70 70 65 61 72 73 20 74 6f  brary appears to
a130: 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   be available...
a140: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a150: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
a160: 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20   SQLite....
a170: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe a180: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 l [appendArgs "y a190: 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 es ("$version "
a1a0: 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c   " $sourceId ")\ a1b0: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 n"].. } els a1c0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu a1d0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
a1e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
a1f0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
a200: 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65  eckForSQLiteInte
a210: 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20  rop { channel }
a220: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  {..      tputs $a230: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 channel "---- ch a240: 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 ecking for SQLit a250: 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb a260: 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 ly... ".... a270: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a obj a290: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag a2a0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 s +NonPublic Sys a2b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. a2c0: 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 SQLite3 \.. a2d0: 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 6f 70 Interop a2e0: 56 65 72 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e Version} version a2f0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. a300: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a310: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check a320: 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 if the returned a330: 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c version was nul a340: 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 l. If so, make a350: 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 it easy.. a360: 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 # to spot a370: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. a380: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin a390: 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f g length$versio
a3a0: 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  n] == 0} then {.
a3b0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76  .          set v
a3c0: 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20  ersion null..
a3d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
a3e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
a3f0: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
a400: 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c  query the Fossil
a410: 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69   source identifi
a420: 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  er for the SQLit
a430: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
a440: 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e     core library.
a450: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
a460: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
a470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
a480: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
a490: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
a4a0: 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ic System.Data.S
a4b0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d  QLite.SQLite3 \.
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
a4d0: 20 49 6e 74 65 72 6f 70 53 6f 75 72 63 65 49 64   InteropSourceId
a4e0: 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65  } sourceId]} the
a4f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
a500: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
a510: 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f  TE: We failed to
a520: 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69   query the Fossi
a530: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
a540: 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ier...
a550: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
a560: 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77   sourceId unknow
a570: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  n..        }....
a580: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a590: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
a5a0: 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64   if the returned
a5b0: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69   Fossil source i
a5c0: 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75  dentifier was nu
a5d0: 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20  ll.  If..
a5e0: 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b   #       so, mak
a5f0: 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f  e it easy to spo
a600: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
a610: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
a620: 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63  ng length $sourc a630: 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then a640: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set a650: 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a sourceId null.. a660: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... a670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. a680: 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 # NOTE: Yes, the a690: 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 SQLite interop a6a0: 61 73 73 65 6d 62 6c 79 20 61 70 70 65 61 72 73 assembly appears a6b0: 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 to be available a6c0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. a6d0: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra a6e0: 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f int SQLiteIntero a6f0: 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 p.... tpu a700: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
a710: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20  endArgs "yes ("
a720: 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f  $version " "$so
a730: 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20  urceId ")\n"]..
a740: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
a750: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch a760: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 annel no\n.. a770: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... a780: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor a790: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 SQLiteDefineCons a7a0: 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e tant { channel n a7b0: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 ame } {.. t a7c0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
a7d0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
a7e0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
a7f0: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
a800: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66  .Data.SQLite def
a810: 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22  ine constant \""
a820: 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20   $name \.. a830: 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d "\"... "]... a840: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc a850: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. a860: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke a870: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl a880: 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ic System.Data.S a890: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d QLite.SQLite3 \. a8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 . D a8b0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 efineConstants} a8c0: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d defineConstants] a8d0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. a8e0: 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 if {[lsea a8f0: 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 rch -exact -noca a900: 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 se$defineConsta
a910: 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31  nts $name] != -1 a920: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. a930: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. a940: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 # NOTE: Yes, th a950: 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 is define consta a960: 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77 nt was enabled w a970: 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d hen the managed. a980: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # a990: 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 assembly was a9a0: 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 compiled... a9b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. a9c0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint a9d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 64 65 66 69 [appendArgs defi a9e0: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste a9f0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 m.Data.SQLite.$
aa00: 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  name]....
aa10: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe aa20: 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 l yes\n.. aa30: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. aa40: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
aa50: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20  nel no\n..
aa60: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
aa70: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
aa80: 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f  ts $channel erro aa90: 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 r\n.. }.. aaa0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc aab0: 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d getDateTimeForm aac0: 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 at {} {.. # aad0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: aae0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 This procedure s aaf0: 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 imply returns th ab00: 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 e "default" Date ab10: 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 Time format used ab20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # ab30: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit ab40: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. ab50: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi ab60: 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 sts ::datetime_f ab70: 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 ormat] && \.. ab80: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l ab90: 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d ength$::datetim
aba0: 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74  e_format] > 0} t
abb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
abc0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
abd0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e  : Return the man
abe0: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e  ually overridden
abf0: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44   value for the D
ac00: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d  ateTime format..
ac10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ac20: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61      return $::da ac30: 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 tetime_format.. ac40: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. ac50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ac60: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return ac70: 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 an ISO8601 Date ac80: 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 Time format comp ac90: 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 atible with SQLi aca0: 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 te,.. # acb0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data acc0: 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 .SQLite, and sui acd0: 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d table for round- ace0: 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 tripping with th acf0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # ad00: 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 DateTime clas ad10: 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f s of the framewo ad20: 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c rk. If this val ad30: 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a ue is changed,.. ad40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # ad50: 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 various tests ma ad60: 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 y fail... ad70: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu ad80: 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 rn "yyyy-MM-dd H ad90: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b H:mm:ss.FFFFFFFK ada0: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ".. }.. adb0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e adc0: 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 numerableToList add0: 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b { enumerable } { ade0: 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu adf0: 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 lt [list].... ae00: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l ae10: 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c ength$enumerabl
ae20: 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d  e] == 0 || $enum ae30: 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 erable eq "null" ae40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ae50: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
ae60: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
ae70: 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
ae80: 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65  h -alias item $e ae90: 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 numerable {.. aea0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string aeb0: 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e length$item] >
aec0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
aed0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
aee0: 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74  sult [$item ToSt aef0: 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d ring].. } af00: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... af10: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
af20: 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  t..    }.....
af30: 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65   proc catchAndRe
af40: 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73  turn { script {s
af50: 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d  tackTrace false}
af60: 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d   {strict true} }
af70: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
af80: 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75     # NOTE: Evalu
af90: 61 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70  ate the script p
afa0: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
afb0: 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63  aller in their c
afc0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23  ontext,..      #
afd0: 20 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67         capturing
afe0: 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74   both the result
aff0: 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20   and the return
b000: 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  code...      #..
b010: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b        set code [
b020: 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31  catch {uplevel 1
b030: 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74   $script} result b040: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. b050: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 # NOTE: Did b060: 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 the script provi b070: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle b080: 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 r NOT raise an e b090: 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a rror?.. #.. b0a0: 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 if {$stric
b0b0: 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20  t && $code == 0 b0c0: 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 || !$strict && $b0d0: 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 code != 1} then b0e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. b0f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 # NOTE: Su b100: 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 ccess. Return a b110: 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 list with the r b120: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 eturn code and t b130: 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 he result... b140: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r b150: 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 eturn [list$cod
b160: 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20  e $result].. b170: 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 } elseif {$sta
b180: 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d  ckTrace} then {.
b190: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
b1a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c      # NOTE: Fail
b1b0: 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72  ure.  Our caller
b1c0: 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74   wants a full st
b1d0: 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70  ack trace (if ap
b1e0: 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20  plicable),..
b1f0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75      #       retu
b200: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74  rn a list with t
b210: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  he return code a
b220: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65  nd the result ve
b230: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20  rbatim...
b240: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
b250: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24  rn [list $code$
b260: 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d  result]..      }
b270: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
b280: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
b290: 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75  TE: Failure.  Ou
b2a0: 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f  r caller does no
b2b0: 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74  t want a full st
b2c0: 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20  ack trace (if..
b2d0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
b2e0: 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75  pplicable), retu
b2f0: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74  rn a list with t
b300: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20  he return code,
b310: 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..
b320: 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20     #       code
b330: 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65  for the interpre
b340: 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72  ter, and the err
b350: 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f  or message up to
b360: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
b370: 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72        point wher
b380: 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63  e the stack trac
b390: 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d  e should start..
b3a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
b3b0: 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 5b 73      set index [s
b3c0: 74 72 69 6e 67 20 66 69 72 73 74 20 22 20 20 20  tring first "
b3d0: 61 74 20 22 20 24 72 65 73 75 6c 74 5d 3b 20 23  at " $result]; # b3e0: 20 48 41 43 4b 3a 20 52 65 6c 69 61 62 6c 65 3f HACK: Reliable? b3f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 .... retu b400: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 rn [list$code $b410: 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5b 65 78 70 ::errorCode [exp b420: 72 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 20 r {$index != -1
b430: 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ? \..
b440: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73   [string trim [s
b450: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 72 65 73  tring range $res b460: 75 6c 74 20 30 20 24 69 6e 64 65 78 5d 5d 20 3a ult 0$index]] :
b470: 20 24 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20 20   $result}]].. b480: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... b490: 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 proc compile b4a0: 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 CSharpWith {.. b4b0: 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 6d text m b4c0: 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 emory symbols st b4d0: 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e rict resultsVarN b4e0: 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d ame errorsVarNam b4f0: 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 e fileNames.. b500: 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d 20 args } b510: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. b520: 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 # NOTE: Since b530: 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 we are going to b540: 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 use this method b550: 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 name a lot, assi b560: 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 gn it to a.. b570: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab b580: 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 le first... b590: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64 #.. set ad b5a0: 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 d ReferencedAsse b5b0: 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 mblies.Add.... b5c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N b5d0: 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 20 OTE: Create the b5e0: 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 base command to b5f0: 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64 evaluate and add b600: 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 65 the property se b610: 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 ttings.. # b620: 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 61 that are a b630: 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65 lmost always nee b640: 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20 ded by our unit b650: 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20 tests (i.e. the b660: 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 System.. # b670: 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d and System b680: 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 .Data assembly r b690: 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 eferences)... b6a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set b6b0: 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 63 6f command [list co b6c0: 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74 65 78 mpileCSharp$tex
b6d0: 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f  t $memory$symbo
b6e0: 6c 73 20 24 73 74 72 69 63 74 20 72 65 73 75 6c  ls $strict resul b6f0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ts \.. b700: 65 72 72 6f 72 73 20 24 61 64 64 20 53 79 73 74 errors$add Syst
b710: 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74  em.dll $add Syst b720: 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 em.Data.dll$add
b730: 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d   System.Xml.dll]
b740: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
b750: 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 61     # NOTE: Add a
b760: 6c 6c 20 74 68 65 20 70 72 6f 76 69 64 65 64 20  ll the provided
b770: 66 69 6c 65 20 6e 61 6d 65 73 20 61 73 20 61 73  file names as as
b780: 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65  sembly reference
b790: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
b7a0: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
b7b0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b  ame $fileNames { b7c0: 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e .. lappen b7d0: 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b d command$add [
b7e0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
b7f0: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  e $fileName].. b800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # b810: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: b820: 41 64 64 20 74 68 65 20 65 78 74 72 61 20 61 72 Add the extra ar b830: 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c guments, if any, b840: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 to the command b850: 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 to evaluate... b860: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 #.. eva b870: 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e l lappend comman b880: 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 d$args....
b890: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
b8a0: 3a 20 41 6c 69 61 73 20 74 68 65 20 63 6f 6d 70  : Alias the comp
b8b0: 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c  iler local resul
b8c0: 74 73 20 61 6e 64 20 65 72 72 6f 72 73 20 76 61  ts and errors va
b8d0: 72 69 61 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a  riables to the..
b8e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
b8f0: 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f  riable names pro
b900: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
b910: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
b920: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72 65       upvar 1 $re b930: 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 sultsVarName res b940: 75 6c 74 73 0d 0a 20 20 20 20 20 20 75 70 76 61 ults.. upva b950: 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e 61 r 1$errorsVarNa
b960: 6d 65 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 20  me errors....
b970: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b980: 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65  TE: Evaluate the
b990: 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b 63 6f   constructed [co
b9a0: 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d  mpileCSharp] com
b9b0: 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 6e 20  mand and return
b9c0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
b9d0: 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20     result...
b9e0: 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20    #..      eval
b9f0: 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d  $command.. }. ba00: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d .... proc isM ba10: 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 emoryDb { fileNa ba20: 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d me } {.. #. ba30: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I ba40: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified ba50: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 database file na ba60: 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d me really an in- ba70: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 3f memory database? ba80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ba90: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 return [expr {$
baa0: 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65  fileName eq ":me
bab0: 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20  mory:" || \..
bac0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 72         [string r
bad0: 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 20 30  ange $fileName 0 bae0: 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 12] eq "file::m baf0: 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d emory:"}].. } bb00: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is bb10: 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 TableInDb { name bb20: 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 {varName db} } bb30: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. bb40: 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 # NOTE: Refer bb50: 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 to the specified bb60: 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 variable (e.g. bb70: 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e "db") in the con bb80: 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 text of our.. bb90: 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 # calle bba0: 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 r. It contains bbb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e the database con bbc0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 nection handle t bbd0: 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 hat will be.. bbe0: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 # used bbf0: 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 71 to execute the q bc00: 75 65 72 79 20 75 73 65 64 20 74 6f 20 64 65 74 uery used to det bc10: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 ermine if the na bc20: 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 med table is.. bc30: 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 # pres bc40: 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61 74 61 ent in that data bc50: 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a base... #.. bc60: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
bc70: 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
bc80: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
bc90: 54 45 3a 20 45 78 65 63 75 74 65 20 74 68 65 20  TE: Execute the
bca0: 53 51 4c 20 71 75 65 72 79 20 61 67 61 69 6e 73  SQL query agains
bcb0: 74 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  t the sqlite_mas
bcc0: 74 65 72 20 74 61 62 6c 65 20 74 6f 20 63 68 65  ter table to che
bcd0: 63 6b 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20  ck if..      #
bce0: 20 20 20 20 20 74 68 65 20 6e 61 6d 65 64 20 74       the named t
bcf0: 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74 20  able is present
bd00: 61 6e 64 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a  and return non-z
bd10: 65 72 6f 20 69 66 20 69 74 20 69 73 2e 0d 0a 20  ero if it is...
bd20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
bd30: 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 73 71 6c  turn [expr {[sql
bd40: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
bd50: 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a  e scalar $db \.. bd60: 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 "SELEC bd70: 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 T COUNT(*) FROM bd80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 sqlite_master WH bd90: 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c ERE type = 'tabl bda0: 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b e' AND name = ?; bdb0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b " \.. [ bdc0: 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 69 list param1 Stri bdd0: 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 7d 5d ng$name]] > 0}]
bde0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
bdf0: 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 73  proc trimSql { s
be00: 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65  ql } {..      re
be10: 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c  turn [regsub -al
be20: 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69  l -- {\s+} [stri
be30: 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 20  ng trim $sql] " be40: 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 "].. }..... be50: 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 71 proc executeSq be60: 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65 l { sql {execute be70: 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 none} {fileName be80: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. be90: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng bea0: 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d th$fileName] ==
beb0: 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69   0} then {set fi
bec0: 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d  leName :memory:}
bed0: 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20  ..      setupDb
bee0: 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  $fileName "" "" bef0: 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 66 "" "" "" false f bf00: 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 alse false false bf10: 20 6d 65 6d 44 62 0d 0a 0d 0a 20 20 20 20 20 20 memDb.... bf20: 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 try {.. r bf30: 65 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75 eturn [sql execu bf40: 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 65 te -execute$exe
bf50: 63 75 74 65 20 24 6d 65 6d 44 62 20 24 73 71 6c  cute $memDb$sql
bf60: 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c  ]..      } final
bf70: 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6c  ly {..        cl
bf80: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam bf90: 65 20 6d 65 6d 44 62 20 66 61 6c 73 65 20 66 61 e memDb false fa bfa0: 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 lse.. }.. bfb0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc bfc0: 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 setupDb {.. bfd0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName bfe0: 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 {mode ""} {date bff0: 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b TimeFormat ""} { c000: 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d dateTimeKind ""} c010: 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 {flags ""}.. c020: 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 20 {extra c030: 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 ""} {qualify tru c040: 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d e} {delete true} c050: 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 {uri false}.. c060: 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 6f {tempo c070: 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 4e rary true} {varN c080: 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 ame db} } {.. c090: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO c0a0: 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 TE: First, see i c0b0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 f our caller has c0c0: 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e requested an in c0d0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 -memory database c0e0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. c0f0: 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b set isMemory [ c100: 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 isMemoryDb$file
c110: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  Name]....      #
c120: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
c130: 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73  For now, all tes
c140: 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65 64  t databases used
c150: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
c160: 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20  te are placed..
c170: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74       #       int
c180: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64  o the database d
c190: 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20  irectory.  Each
c1a0: 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c  database and rel
c1b0: 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20  ated files..
c1c0: 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62    #       used b
c1d0: 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20  y a test should
c1e0: 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79  be cleaned up by
c1f0: 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67   that test using
c200: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
c210: 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20      "cleanupDb"
c220: 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77  procedure, below
c230: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
c240: 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79    if {!$isMemory c250: 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 &&$qualify} th
c260: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
c270: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
c280: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
c290: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69  seDirectory] [fi
c2a0: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d  le tail $fileNam c2b0: 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e]].. }.... c2c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # c2d0: 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c NOTE: By defaul c2e0: 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 t, delete any pr c2f0: 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 e-existing datab c300: 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d ase with the sam c310: 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20 e file.. # c320: 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74 name if it c330: 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74 currently exist c340: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. c350: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 if {!$isMemor
c360: 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20  y && $delete && c370: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
c380: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
c390: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
c3a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
c3b0: 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e  mpt to delete an
c3c0: 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64  y pre-existing d
c3d0: 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65  atabase with the
c3e0: 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20   same file..
c3f0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65      #       name
c400: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
c410: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
c420: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f c430: 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d ileName} error]} c440: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c450: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. c460: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 # NOTE: We someh c470: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c ow failed to del c480: 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 ete the file, re c490: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 port why... c4a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. c4b0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
c4c0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
c4d0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
c4e0: 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
c4f0: 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65  NG: failed to de
c500: 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69  lete database fi
c510: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName c520: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c530: 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74 "\" during set c540: 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c up, error: " \n\ c550: 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
c560: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
c570: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
c580: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
c590: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
c5a0: 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
c5b0: 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
c5c0: 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
c5d0: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
c5e0: 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20  er.  The handle
c5f0: 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61  to the opened da
c600: 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73  tabase will be s
c610: 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
c620: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76      #..      upv
c630: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62  ar 1 $varName db c640: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. c650: 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 # NOTE: Start c660: 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 6f building the co c670: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. c680: 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 The only requi c690: 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 red portion.. c6a0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th c6b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str c6c0: 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 20 ing is the data c6d0: 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 6f source, which co c6e0: 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 ntains the.. c6f0: 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 # databa c700: 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 se file name its c710: 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 6c elf. If our cal c720: 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 65 ler wants to use c730: 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 20 a URI as.. c740: 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 74 # the dat c750: 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 68 a source, use th c760: 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 e FullUri connec c770: 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 tion string prop c780: 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 erty to.. # c790: 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 prevent t c7a0: 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 73 he data source s c7b0: 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 tring from being c7c0: 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 mangled... c7d0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 75 #.. if {$u
c7e0: 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ri} then {..
c7f0: 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69      set connecti
c800: 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69  on {FullUri=${fi c810: 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 leName}}.. c820: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c830: 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e set connection c840: 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b {Data Source=${
c850: 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20  fileName}}..
c860: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
c870: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69        # NOTE: Si
c880: 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64 75  nce this procedu
c890: 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61  re has no specia
c8a0: 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77  l knowledge of w
c8b0: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 0d  hat the default.
c8c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
c8d0: 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74 68  etting is for th
c8e0: 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e  e ToFullPath con
c8f0: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
c900: 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a  ropery, always..
c910: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64        #       ad
c920: 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20 6b  d the value we k
c930: 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68 65  now about to the
c940: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
c950: 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ng...      #..
c960: 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
c970: 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61  ction {;ToFullPa
c980: 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a  th=${qualify}}.. c990: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. c9a0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our c9b0: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified c9c0: 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c a journal mode, c9d0: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa c9e0: 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. c9f0: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the ca00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri ca10: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # ca20: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str ca30: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 ing length$mode
ca40: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
ca50: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
ca60: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e  nnection {;Journ
ca70: 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d  al Mode=${mode}} ca80: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... ca90: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO caa0: 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 TE: If our calle cab0: 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 r specified a Da cac0: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 teTime format, a cad0: 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 dd the necessary cae0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # caf0: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 portion of the c cb00: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string cb10: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. cb20: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin cb30: 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 g length$dateTi
cb40: 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74  meFormat] > 0} t
cb50: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
cb60: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
cb70: 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61   {;DateTimeForma
cb80: 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d  t=${dateTimeForm cb90: 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d at}}.. }... cba0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. cbb0: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 # NOTE: If our c cbc0: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 aller specified cbd0: 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 a DateTimeKind, cbe0: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar cbf0: 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 y portion.. cc00: 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 # of the cc10: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin cc20: 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. cc30: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri cc40: 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
cc50: 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68  imeKind] > 0} th
cc60: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
cc70: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
cc80: 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24  {;DateTimeKind=$cc90: 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d {dateTimeKind}}. cca0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... ccb0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT ccc0: 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 E: If there are ccd0: 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 any global (per cce0: 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 test run) connec ccf0: 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 65 tion flags curre cd00: 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 ntly.. # cd10: 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 65 set, use the cd20: 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 m now (i.e. by c cd30: 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 ombining them wi cd40: 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 th the ones for cd50: 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 this.. # cd60: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e connection). cd70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cd80: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist cd90: 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 s ::connection_f cda0: 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 lags] && \.. cdb0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le cdc0: 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 ngth$::connecti
cdd0: 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74  on_flags] > 0} t
cde0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
cdf0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
ce00: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29  : Show (and log)
ce10: 20 74 68 61 74 20 77 65 20 64 65 74 65 63 74 65   that we detecte
ce20: 64 20 73 6f 6d 65 20 67 6c 6f 62 61 6c 20 63 6f  d some global co
ce30: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d  nnection flags..
ce40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ce50: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes ce60: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen ce70: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. ce80: 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 "---- globa ce90: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 l connection fla cea0: 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 20 24 gs detected: "$
ceb0: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
cec0: 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  gs \n]....
ced0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
cee0: 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64  OTE: Combine and
cef0: 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20  /or replace the
cf00: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
cf10: 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74   and then show t
cf20: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
cf30: 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a      new value...
cf40: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
cf50: 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f     set flags [co
cf60: 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67  mbineFlags $flag cf70: 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f s$::connection_
cf80: 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  flags]....
cf90: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ cfa0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA cfb0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. cfc0: 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 "---- combine cfd0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 d connection fla cfe0: 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 67 73 gs are: "$flags
cff0: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d   \n]..      }...
d000: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d010: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
d020: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
d030: 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65  some SQLiteConne
d040: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20  ctionFlags, add
d050: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
d060: 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72     necessary por
d070: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e  tion of the conn
d080: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
d090: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
d0a0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
d0b0: 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20  ength $flags] > d0c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. d0d0: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec d0e0: 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 tion {;Flags=${f
d0f0: 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d  lags}}..      }.
d100: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
d110: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72    # NOTE: If our
d120: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65   caller specifie
d130: 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f  d an extra paylo
d140: 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63  ad to the connec
d150: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
d160: 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65      string, appe
d170: 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20  nd it now...
d180: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
d190: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65  string length $e d1a0: 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 xtra] > 0} then d1b0: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen d1c0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 d connection \; d1d0: 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d$extra..      }.
d1e0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
d1f0: 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74    # NOTE: Open t
d200: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
d210: 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63  ection now, plac
d220: 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68  ing the opaque h
d230: 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20  andle value..
d240: 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20     #       into
d250: 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65  the variable spe
d260: 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61  cified by our ca
d270: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ller...      #..
d280: 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71        set db [sq
d290: 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c  l open -type SQL
d2a0: 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e  ite [subst $conn d2b0: 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 ection]].... d2c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d2d0: 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 E: Configure the d2e0: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 temporary direc d2f0: 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 tory for the new d300: 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 ly opened databa d310: 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 se.. # d320: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 connection now d330: 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c unless our call d340: 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a er forbids it... d350: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i d360: 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 f {$temporary &&
d370: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   ![info exists :
d380: 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79  :no(setTemporary
d390: 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65  Directory)]} the
d3a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c  n {..        sql
d3b0: 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70   execute $db [ap d3c0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. d3d0: 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 "PRAGMA d3e0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 temp_store_direc d3f0: 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 tory = \"" [getT d400: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector d410: 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 y] \"\;].. d420: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. d430: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 # NOTE: Alwa d440: 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f ys return the co d450: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle d460: 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 upon success... d470: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re d480: 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d turn$db..    }.
d490: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
d4a0: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b  DbConnection { {
d4b0: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d  varName db} } {.
d4c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d4d0: 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
d4e0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
d4f0: 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
d500: 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
d510: 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
d520: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
d530: 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20    The handle to
d540: 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65  the database pre
d550: 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76  viously opened v
d560: 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  ia the..      #
d570: 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20        [setupDb]
d580: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64  procedure should
d590: 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65   be stored there
d5a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
d5b0: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa d5c0: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # d5d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d5e0: 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 This returns the d5f0: 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e ADO.NET IDbConn d600: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e ection object in d610: 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a stance for the.. d620: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 # sp d630: 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 ecified databse d640: 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 handle. Since g d650: 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 etting this obje d660: 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a ct relies upon.. d670: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea d680: 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 gle internals, g d690: 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 reat care should d6a0: 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f be taken to avo d6b0: 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d id disposing of. d6c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t d6d0: 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 his object or ot d6e0: 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 herwise putting d6f0: 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c it into an inval d700: 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 id state... d710: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i d720: 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 nfo exists db]} d730: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. d740: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob d760: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla d770: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f gs +NonPublic -o d780: 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 bjectflags +NoDi d790: 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 spose \.. d7a0: 20 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 -alias d7b0: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA d7c0: 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e ctive.connection d7d0: 73 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d 0a 20 s Item$db} \..
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d7f0: 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
d800: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
d810: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
d820: 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74  TE: Success, ret
d830: 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f  urn the opaque o
d840: 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20  bject handle...
d850: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
d860: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re d870: 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 sult.. } d880: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. d890: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # d8a0: 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 NOTE: Failure, d8b0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... d8c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. d8d0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
d8e0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
d8f0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
d900: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
d910: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
d920: 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  get connection h
d930: 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61  andle for databa
d940: 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  se \"" \..
d950: 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c          $db "\", d960: 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
d970: 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
d980: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
d990: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
d9a0: 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  oc freeDbConnect
d9b0: 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63  ion { {varName c
d9c0: 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a  onnection} } {..
d9d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d9e0: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
d9f0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
da00: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f  riable (e.g. "co
da10: 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68  nnection") in th
da20: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
da30: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20   context of our
da40: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61  caller.  The opa
da50: 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
da60: 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54  e for an ADO.NET
da70: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
da80: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69  connection previ
da90: 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62  ously returned b
daa0: 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  y [getDbConnecti
dab0: 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20  on] should be..
dac0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 6f       #       sto
dad0: 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20  red there...
dae0: 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72    #..      upvar
daf0: 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e   1 $varName conn db00: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 ection.... db10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: db20: 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f Attempt to remo db30: 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 ve the opaque ob db40: 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d ject handle from db50: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 the interpreter db60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # db70: 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 now. This [obje db80: 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c ct dispose] call db90: 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c will not actual dba0: 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 ly dispose of th dbb0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # dbc0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 underlying obje dbd0: 63 74 20 62 65 63 61 75 73 65 20 74 68 65 20 2b ct because the + dbe0: 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 NoDispose flag w dbf0: 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 as set on it.. dc00: 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 # duri dc10: 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 ng creation of t dc20: 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 he opaque object dc30: 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 handle... dc40: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in dc50: 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 fo exists connec dc60: 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tion] && \.. dc70: 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 [catch {ob dc80: 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f ject dispose$co
dc90: 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d  nnection} error]
dca0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dcb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
dcc0: 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
dcd0: 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65  failed to remove
dce0: 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70   the handle, rep
dcf0: 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
dd00: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
dd10: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann dd20: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ dd30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d .. "= dd40: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai dd50: 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f led to remove co dd60: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle dd70: 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 \""$connection
dd80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
dd90: 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
dda0: 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. ddb0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... ddc0: 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 . proc addDbC ddd0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e onnection { conn dde0: 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 ection {varName ddf0: 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 db} } {.. # de00: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: de10: 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe de20: 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable de30: 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t de40: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou de50: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # de60: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... de70: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 de80: 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
de90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
dea0: 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20   NOTE: Create a
deb0: 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74  correctly format
dec0: 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ted name for the
ded0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
dee0: 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23  tion to..      #
def0: 20 20 20 20 20 20 20 62 65 20 61 64 64 65 64 20         be added
df00: 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61  to the list mana
df10: 67 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65  ged by the Eagle
df20: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
df30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
df40: 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t db [object inv
df50: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
df60: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
df70: 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e     Eagle._Compon
df80: 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72  ents.Private.For
df90: 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f  matOps DatabaseO
dfa0: 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65  bjectName $conne dfb0: 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 ction \.. dfc0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 SQLiteConnect dfd0: 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f ion [object invo dfe0: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ke Interpreter.G dff0: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d etActive NextId] e000: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. e010: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add e020: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e the database con e030: 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 nection provided e040: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 by our caller t e050: 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 o the list.. e060: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f # of tho e070: 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 se known to the e080: 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 Eagle interprete e090: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. e0a0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke e0b0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl e0c0: 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ic Interpreter.G e0d0: 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 etActive.connect e0e0: 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 ions Add \.. e0f0: 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65$db $conne e100: 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d ction.. }.... e110: 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 . proc cleanu e120: 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b pDb { fileName { e130: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c varName db} {col e140: 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c lect true} {qual e150: 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 ify true}.. e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e170: 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20 {delete true} } e180: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. e190: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp e1a0: 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 t to force all p e1b0: 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 ending "garbage" e1c0: 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 objects to be c e1d0: 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 ollected,.. e1e0: 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 # includi e1f0: 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d ng SQLite statem e200: 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 ents and backup e210: 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 objects; this sh e220: 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 ould allow.. e230: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e # the un e240: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 derlying databas e250: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c e file to be del e260: 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a eted... #.. e270: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 if {$colle
e280: 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ct} then {..
e290: 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61      collectGarba
e2a0: 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ge $::test_chann e2b0: 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... e2c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # e2d0: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t e2e0: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var e2f0: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" e300: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context e310: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # e320: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. e330: 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 The handle to th e340: 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 e database previ e350: 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 ously opened via e360: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # e370: 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 [setupDb] pr e380: 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 ocedure should b e390: 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. e3a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. e3b0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
e3c0: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
e3d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c        # NOTE: Cl
e3e0: 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ose the connecti
e3f0: 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  on to the databa
e400: 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68  se now.  This sh
e410: 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20  ould allow us..
e420: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
e430: 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72  delete the under
e440: 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66  lying database f
e450: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ile...      #..
e460: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
e470: 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61  xists db] && [ca
e480: 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24  tch {sql close $e490: 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e db} error]} then e4a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. e4b0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W e4c0: 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 e somehow failed e4d0: 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61 to close the da e4e0: 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77 tabase, report w e4f0: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a hy... #.. e500: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
e510: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
e520: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
e530: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
e540: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
e550: 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65  o close database
e560: 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72   \"" $db "\", er e570: 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. e580: 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f \n\t$erro
e590: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  r \n]..      }..
e5a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e5b0: 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20   # NOTE: First,
e5c0: 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65  see if our calle
e5d0: 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20  r has requested
e5e0: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  an in-memory dat
e5f0: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  abase...      #.
e600: 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d  .      set isMem
e610: 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20  ory [isMemoryDb
e620: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName].... e630: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N e640: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 OTE: Build the f e650: 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20 ull path to the e660: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 database file na e670: 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c me. For now, al e680: 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20 l test.. # e690: 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 database f e6a0: 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 iles are stored e6b0: 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 in the temporary e6c0: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 directory... e6d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { e6e0: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 !$isMemory && $q e6f0: 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a ualify} then {.. e700: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 set file e710: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 Name [file join e720: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 [getDatabaseDire e730: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 ctory] [file tai e740: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 l$fileName]]..
e750: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
e760: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
e770: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69   Check if the fi
e780: 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e  le still exists.
e790: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e7a0: 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20   if {!$isMemory e7b0: 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 &&$delete && [f
e7c0: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file e7d0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. e7e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. e7f0: 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 # NOTE: Skip d e800: 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 eleting database e810: 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f files if somebo e820: 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 dy sets the glob e830: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 al.. # e840: 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 20 variable to e850: 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 prevent it... e860: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e870: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist e880: 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62 s ::no(cleanupDb e890: 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a File)]} then {.. e8a0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. e8b0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A e8c0: 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 ttempt to delete e8d0: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 the test databa e8e0: 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 se file now... e8f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e900: 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f if {[set co e910: 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 de [catch {file e920: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
e930: 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20  } error]]} then
e940: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
e950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
e960: 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
e970: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
e980: 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
e990: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
e9a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e9b0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes e9c0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen e9d0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. e9e0: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W e9f0: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t ea00: 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 o delete databas ea10: 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 e file \""$file
ea20: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
ea30: 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
ea40: 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f  ng cleanup, erro
ea50: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error ea60: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. ea70: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els ea80: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e {.. # ea90: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO eaa0: 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 TE: Show that we eab0: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin eac0: 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 g the file... ead0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. eae0: 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a set code 0.. eaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput eb00: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
eb10: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
eb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
eb30: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b  ==== WARNING: sk
eb40: 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64  ipped deleting d
eb50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22  atabase file \""
eb60: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. eb70: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" eb80: 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e during cleanup\n eb90: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 "].. }.. eba0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. ebb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ebc0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 # NOTE: The fi ebd0: 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 le does not exis ebe0: 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 t, success!.. ebf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ec00: 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 set code 0.. ec10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret ec20: 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d urn$code..    }
ec30: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65  .....    proc se
ec40: 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61  tupDbInterruptCa
ec50: 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c  llback { channel
ec60: 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20   log } {..
ec70: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " ec80: 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 ---- setting up ec90: 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 debugger interru eca0: 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 pt callback... " ecb0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c ecc0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. ecd0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT ece0: 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 E: Make sure the ecf0: 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 script debugger ed00: 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 65 and the isolate ed10: 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 72 d interpreter ar ed20: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # ed30: 20 20 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 setup and rea ed40: 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 dy for use... ed50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ed60: 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 debug setup true ed70: 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... ed80: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO ed90: 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 TE: Load the nec eda0: 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 essary packages edb0: 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 into the isolate edc0: 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... edd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ede0: 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b 0d debug eval {. edf0: 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 . packa ee00: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 ge require Eagle ee10: 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b .. pack ee20: 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c age require Eagl ee30: 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 e.Library.. ee40: 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 package req ee50: 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d uire Eagle.Test. ee60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... ee70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. ee80: 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th ee90: 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 e necessary vari eea0: 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 ables into the i eeb0: 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 solated interpre eec0: 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ter... #. eed0: 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 . debug i eee0: 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 nvoke 0 set ::te eef0: 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e st_channel$chan
ef00: 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72  nel; # NOTE: For
ef10: 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20   [tputs]...
ef20: 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20     debug invoke
ef30: 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67  0 set ::test_log
ef40: 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46   $log; # NOTE: F ef50: 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 or [tlog]..... ef60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. ef70: 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c # NOTE: Install ef80: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 the callback sc ef90: 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 ript to be evalu efa0: 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c ated in the isol efb0: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 ated.. # efc0: 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 interprete efd0: 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 r when this inte efe0: 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 rpreter is inter eff0: 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 rupted by script f000: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # f010: 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 cancellation, f020: 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d etc... #. f030: 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 . debug c f040: 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b allback apply {{ f050: 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 sender e} {.. f060: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f070: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec f080: 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62 61 k if this callba f090: 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 ck is one that w f0a0: 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 e care about... f0b0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f0c0: 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 65 if {"Cance f0d0: 6c 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b led" in [split [ f0e0: 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 65$e InterruptType
f0f0: 5d 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d  ] ", "]} then {.
f100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
f110: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
f120: 54 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f  TE: Iterate thro
f130: 75 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65  ugh all database
f140: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f   connections kno
f150: 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  wn to the..
f160: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
f170: 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65  arent interprete
f180: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...
f190: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  #..            o
f1a0: 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61  bject foreach -a
f1b0: 6c 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20 20  lias pair \..
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62               [ob
f1d0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
f1e0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 65  gs +NonPublic $e f1f0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e Interpreter.con f200: 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 nections] {.. f210: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. f220: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO f230: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 TE: Attempt to c f240: 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 ancel any SQL qu f250: 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 eries in progres f260: 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 s on this.. f270: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # f280: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec f290: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 tion... f2a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f2b0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch f2c0: 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 {$pair Value.Ca
f2d0: 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68  ncel} error]} th
f2e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
f2f0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t f300: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app f310: 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 endArgs \n \.. f320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f330: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: f340: 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 65 failed to cance f350: 6c 20 71 75 65 72 79 20 66 6f 72 20 63 6f 6e 6e l query for conn f360: 65 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 ection \"" \.. f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f380: 20 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c [$pair Key] "\
f390: 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  ", error: " \n\t
f3a0: 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. f3b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. f3c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. f3d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. f3e0: 20 20 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 }}.. } er f3f0: 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then f400: 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f {.. addCo f410: 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 nstraint interru f420: 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 ptCallback.sqlit f430: 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 e3.... tp f440: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 uts$channel yes
f450: 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  \n..      } else
f460: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
f470: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe f480: 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f ndArgs "no, erro f490: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
f4a0: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   \n]..      }..
f4b0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
f4c0: 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20  c cleanupFile {
f4d0: 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63  fileName {collec
f4e0: 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66  t true} {force f
f4f0: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
f500: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f510: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
f520: 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22  ce all pending "
f530: 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73  garbage" objects
f540: 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64   to be collected
f550: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
f560: 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74   including SQLit
f570: 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  e statements and
f580: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b   backup objects;
f590: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c   this should all
f5a0: 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
f5b0: 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    the underlying
f5c0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
f5d0: 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20  o be deleted...
f5e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
f5f0: 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e   {$collect} then f600: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c {.. coll f610: 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 ectGarbage$::te
f620: 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
f630: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
f640: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
f650: 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20  eck if the file
f660: 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20  still exists...
f670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
f680: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $f690: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then f6a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. f6b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk f6c0: 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 ip deleting test f6d0: 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f files if somebo f6e0: 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 dy sets the glob f6f0: 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 al variable.. f700: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to f710: 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 prevent it... f720: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f730: 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b if {$force || ![
f740: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
f750: 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20  (cleanupFile)]}
f760: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f770: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
f780: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
f790: 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73  o delete the tes
f7a0: 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20  t file now...
f7b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f7c0: 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64      if {[set cod
f7d0: 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64  e [catch {file d
f7e0: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} f7f0: 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b error]]} then { f800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. f810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N f820: 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow f830: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete f840: 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 the file, repor f850: 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... f860: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. f870: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
f880: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
f890: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
f8a0: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
f8b0: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
f8c0: 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c   delete test fil
f8d0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName f8e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. f8f0: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl f900: 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 eanup, error: " f910: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
f920: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
f930: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
f940: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
f950: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
f960: 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70  how that we skip
f970: 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65  ped deleting the
f980: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
f990: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
f9a0: 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20  et code 0....
f9b0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: f9c0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap f9d0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. f9e0: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== f9f0: 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 WARNING: skipped fa00: 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 deleting test f fa10: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
fa20: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
fa30: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
fa40: 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20  eanup\n"]..
fa50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
fa60: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
fa70: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
fa80: 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e   The file does n
fa90: 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73  ot exist, succes
faa0: 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s!..        #..
fab0: 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20         set code
fac0: 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  0..      }....
fad0: 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65      return $code fae0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... faf0: 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 proc collectGarb fb00: 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d age { channel {m fb10: 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30 illiseconds 1000 fb20: 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d } {quiet true} } fb30: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 {.. if {[c fb40: 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 atch {object inv fb50: 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM fb60: 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 emory false} res fb70: 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then fb80: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! fb90: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
fba0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
fbb0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append fbc0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. fbd0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f "---- memo fbe0: 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 ry in use by the fbf0: 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c CLR before coll fc00: 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 ection... " \.. fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65$re
fc20: 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d  sult " bytes\n"]
fc30: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
fc40: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
fc50: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan fc60: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs fc70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " fc80: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa fc90: 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 iled to get CLR fca0: 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 memory usage, er fcb0: 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. fcc0: 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 \n\t$resu
fcd0: 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  lt \n]..      }.
fce0: 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 23  ...      #######
fcf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fd10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fd30: 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ##....      #..
fd40: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70       # NOTE: Rep
fd50: 65 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 20  eatedly attempt
fd60: 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61  to collect garba
fd70: 67 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c  ge until the all
fd80: 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20  otted number..
fd90: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 6d      #       of m
fda0: 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 20  illiseconds has
fdb0: 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 73  elapsed.  Always
fdc0: 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c   attempt to coll
fdd0: 65 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 20  ect garbage..
fde0: 20 20 20 23 20 20 20 20 20 20 20 61 74 20 6c 65     #       at le
fdf0: 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20  ast once...
fe00: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 74   #..      set st
fe10: 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  art [clock secon
fe20: 64 73 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 73  ds]..      set s
fe30: 74 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72  top [expr {$star fe40: 74 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e t + ($millisecon
fe50: 64 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a  ds / 1000)}]....
fe60: 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20        do {..
fe70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
fe80: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
fe90: 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67  o force a full g
fea0: 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f  arbage collectio
feb0: 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61  n now.  Report a
fec0: 6e 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ny..        #
fed0: 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69      error that i
fee0: 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66  s encountered if
fef0: 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20   we fail...
ff00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
ff10: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
ff20: 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
ff30: 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d 20  talMemory true}
ff40: 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
ff50: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
ff60: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append ff70: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. ff80: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN ff90: 49 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c ING: failed full ffa0: 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 garbage collect ffb0: 69 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d ion, error: " \. ffc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c . \ ffd0: 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
ffe0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
fff0: 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c       set now [cl
10000 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20  ock seconds]..
10010 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74      } while {$st 10020 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 art <=$now && $10030 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d 0a now <$stop}....
10040 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
10050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
10090 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
100a0 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
100b0 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
100c0 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 75  mory false} resu
100d0 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
100e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$100f0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 10100 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
10110 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
10120 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
10130 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72       "---- memor
10140 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20  y in use by the
10150 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 63  CLR after collec
10160 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  tion... " \..
10170 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75             $resu 10180 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a lt " bytes\n"].. 10190 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 101a0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 101b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
101c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
101d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
101e0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
101f0 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65  ed to get CLR me
10200 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f  mory usage, erro
10210 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
10220 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74      \n\t $result 10230 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 \n].. }.. 10240 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 10250 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c c getSQLiteHandl 10260 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 eCounts { channe 10270 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 l {quiet false} 10280 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 } {.. set r 10290 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a esult [list].... 102a0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 if {[haveC 102b0 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 onstraint \.. 102c0 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e defin 102d0 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d eConstant.System 102e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 .Data.SQLite.COU 102f0 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e NT_HANDLE]} then 10300 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 10310 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 10320 64 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c dd each critical 10330 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f handle count to 10340 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c the resulting l 10350 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ist... #. 10360 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 10370 20 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e name [list conn 10380 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 ectionCount stat 10390 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 ementCount backu 103a0 70 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 pCount] {.. 103b0 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b set value [ 103c0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 103d0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 103e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 103f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 10400 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 ite.UnsafeNative 10410 4d 65 74 68 6f 64 73 20 24 6e 61 6d 65 5d 0d 0a Methods$name]..
10420 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
10430 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 10450 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
10460 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
10470 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
10480 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
10490 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65   count \"" $name 104a0 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 "\" is "$value
104b0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
104c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  }....          l
104d0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76  append result $v 104e0 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d alue.. }. 104f0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 10500 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
10510 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10520 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
10530 20 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20 63   actual handle c
10540 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 76  ounts are not av
10550 61 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66 6f  ailable; therefo
10560 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20 20  re, just..
10570 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e    #       return
10580 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e 0d   an empty list..
10590 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
105a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 105b0 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 el "---- critica 105c0 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 l handle counts 105d0 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a unavailable\n".. 105e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 105f0 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
10600 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
10610 72 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c 69  roc shutdownSQLi
10620 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 6f  te { channel {fo
10630 72 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69 65  rce false} {quie
10640 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
10650 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
10660 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74  OTE: Make sure t
10670 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65 20  hat SQLite core
10680 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70 6c  library is compl
10690 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e 20  etely shutdown.
106a0 20 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   This..      #
106b0 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20       is used by
106c0 74 65 73 74 73 20 74 68 61 74 20 63 68 61 6e 67  tests that chang
106d0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration
106e0 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 74  options and/or t
106f0 68 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20  hose..      #
10700 20 20 20 20 74 68 61 74 20 6e 65 65 64 20 74 6f      that need to
10710 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67 69   make sure loggi
10720 6e 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  ng is initialize
10730 64 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e 20  d (i.e. just in
10740 63 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20  case..      #
10750 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 63      the SQLite c
10760 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20  ore library was
10770 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 74  initialized in t
10780 68 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f 72  he process prior
10790 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   to..      #
107a0 20 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f 67     the SQLiteLog
107b0 20 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62 6c   class being abl
107c0 65 20 74 6f 20 73 65 74 75 70 20 69 74 73 20 6c  e to setup its l
107d0 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 29  ogging callback)
107e0 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ...      #
107f0 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20   Normally, this
10800 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 70  should only be p
10810 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69  erformed if SQLi
10820 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64  te is loaded and
10830 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
10840 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79  ready for use by
10850 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
10860 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
10870 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 5b   if {$force || [ 10880 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 isSQLiteReady]} 10890 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 108a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 #.. # BUG 108b0 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c FIX: Before call 108c0 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 ing the native s 108d0 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e hutdown function 108e0 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 , make sure both 108f0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 10900 20 20 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d of the PRAGM 10910 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 A related direct 10920 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 ory names are fr 10930 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d eed... #. 10940 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 10950 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 rSQLiteDirectori 10960 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 es$channel true
10970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
10980 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69  [catch {object i
10990 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
109a0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
109b0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
109c0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
109d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
109e0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
109f0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68 75       sqlite3_shu
10a00 74 64 6f 77 6e 7d 20 72 65 73 75 6c 74 5d 20 3d  tdown} result] =
10a10 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
10a20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 10a30 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 10a40 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
10a50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
10a60 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
10a70 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c        "---- call
10a80 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77   sqlite3_shutdow
10a90 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65  n()... ok: " $re 10aa0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 10ab0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 10ac0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10ad0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
10ae0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10af0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 10b00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 10b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10b20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c "---- call sql 10b30 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e ite3_shutdown(). 10b40 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 .. error: " \n\t 10b50 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
10b60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
10b70 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
10b80 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
10b90 63 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65  c reportSQLiteRe
10ba0 73 6f 75 72 63 65 73 20 7b 20 63 68 61 6e 6e 65  sources { channe
10bb0 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  l {quiet false}
10bc0 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d  {collect true} }
10bd0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
10be0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
10bf0 61 6c 6c 20 6f 75 74 70 75 74 20 69 66 20 77 65  all output if we
10c00 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e 20   are running in
10c10 22 71 75 69 65 74 22 20 6d 6f 64 65 2e 0d 0a 20  "quiet" mode...
10c20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
10c30 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e   {[haveConstrain
10c40 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
10c50 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e     defineConstan
10c60 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
10c70 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52  Lite.INTEROP_VIR
10c80 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c  TUAL_TABLE] && \
10c90 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76  ..          [hav
10ca0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20  eConstraint \..
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
10cc0 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
10cd0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54  em.Data.SQLite.T
10ce0 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45  RACK_MEMORY_BYTE
10cf0 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  S]} then {..
10d00 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 10d10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10d20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10d30 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20  l "---- current
10d40 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
10d50 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e   SQLiteMemory...
10d60 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   "..        }...
10d70 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
10d80 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
10d90 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
10da0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
10db0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
10dc0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
10dd0 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20  eMemory \..
10de0 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73             bytes
10df0 41 6c 6c 6f 63 61 74 65 64 7d 20 6d 65 6d 6f 72  Allocated} memor
10e00 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
10e10 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
10e20 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 10e30 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10e40 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10e50 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 10e60 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 10e70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 10e80 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 10e90 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 10ea0 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 unknown.... 10eb0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
10ec0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10ed0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 10ee0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10ef0 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
10f00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
10f10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10f20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 10f30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 10f40 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
10f50 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f  --- maximum memo
10f60 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c  ry in use by SQL
10f70 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a  iteMemory... "..
10f80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
10f90 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
10fa0 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  {object invoke -
10fb0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
10fc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10fd0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
10fe0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d  SQLite.SQLiteMem
10ff0 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
11000 20 20 20 20 20 20 20 6d 61 78 69 6d 75 6d 42 79         maximumBy
11010 74 65 73 41 6c 6c 6f 63 61 74 65 64 7d 20 6d 65  tesAllocated} me
11020 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  mory] == 0} then
11030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
11040 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 11050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 11060 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
11070 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 11080 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 y " bytes\n"].. 11090 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 110a0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 110b0 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 110c0 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 110d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
110e0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
110f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $11100 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 11110 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
11120 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
11130 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
11140 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24  ....      if {!$11150 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 11160 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
11170 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72  annel "---- curr
11180 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73  ent memory in us
11190 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22  e by SQLite... "
111a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
111b0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
111c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
111d0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
111e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
111f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
11200 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
11210 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20  ethods \..
11220 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
11230 6d 65 6d 6f 72 79 5f 75 73 65 64 7d 20 6d 65 6d  memory_used} mem
11240 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
11250 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
11260 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 11270 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 11280 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
11290 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62  Args $memory " b 112a0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 112b0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 112c0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 112d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 112e0 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 Maybe the SQLite 112f0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 core library is 11300 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 unavailable?.. 11310 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11320 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 11330 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 11340 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
11350 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
11360 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 11370 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
11380 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y \n]..        }
11390 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
113a0 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d     set result $m 113b0 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 emory; # NOTE: R 113c0 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d eturn memory in- 113d0 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c 65 use to our calle 113e0 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b r..... if { 113f0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
11400 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $11410 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 channel "---- ma 11420 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 ximum memory in 11430 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e use by SQLite... 11440 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ".. }.... 11450 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 11460 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d {object invoke - 11470 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 11480 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11490 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 114a0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 114b0 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 eMethods \.. 114c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite 114d0 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 3_memory_highwat 114e0 65 72 20 30 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d er 0} memory] == 114f0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 11500 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
11510 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11520 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11530 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
11540 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
11550 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
11560 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
11570 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11580 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74   # NOTE: Maybe t
11590 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
115a0 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69  ibrary is unavai
115b0 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20  lable?..
115c0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  #..        set m
115d0 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
115e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 115f0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 11600 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
11610 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
11620 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 11630 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 11640 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 11650 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b$collect} then {
11660 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63  ..        collec
11670 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65  tGarbage $channe 11680 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 l.. }.... 11690 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
116a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
116b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 116c0 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 "---- current me 116d0 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 mory in use by t 116e0 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 he CLR... ".. 116f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 11700 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object 11710 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f invoke GC GetTo 11720 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d talMemory false} 11730 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 memory] == 0} t 11740 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 11750 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e f {[string is in 11760 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d teger -strict$m
11770 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  emory]} then {..
11780 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$11790 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 117a0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 117b0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
117c0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 117d0 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 117e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 117f0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 11800 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 set memory i 11810 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 nvalid.... 11820 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
11830 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11840 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11850 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 11860 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
11870 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11880 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
11890 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
118a0 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d   memory unknown.
118b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
118c0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 118d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 118e0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
118f0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] 11900 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 11910 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 11920 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
11930 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
11940 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
11950 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61  irectories { cha
11960 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73  nnel {reset fals
11970 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
11980 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
11990 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69  heck if the sqli
119a0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
119b0 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
119c0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
119d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74        #..      t
119e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d  puts $channel \. 119f0 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d . "---- 11a00 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 checking for fu 11a10 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 nction sqlite3_w 11a20 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 11a30 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 ry... ".... 11a40 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11a50 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 : This call to t 11a60 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 11a70 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 11a80 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 unction uses the 11a90 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11aa0 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20 invalid value 0 11ab0 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72 for the first ar 11ac0 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f gument. This co 11ad0 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a de is designed.. 11ae0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to 11af0 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e check if callin 11b00 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 g the function w 11b10 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63 ill raise an exc 11b20 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 eption (i.e... 11b30 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 11b40 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 actual result of 11b50 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f the function do 11b60 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 es not matter as 11b70 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 long as no.. 11b80 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 # direc 11b90 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29 tory is changed) 11ba0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11bb0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 11bd0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 11be0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 11bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 11c00 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 11c10 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 11c20 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 thods \.. 11c30 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 sqlite3_w 11c40 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 11c50 72 79 20 30 20 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 ry 0 null}] == 0 11c60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11c70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 11c80 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 OTE: Calling the 11c90 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 11ca0 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e et_directory fun 11cb0 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a ction does not.. 11cc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 11cd0 63 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 cause an excepti 11ce0 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 on; therefore, i 11cf0 74 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 t must be availa 11d00 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 ble (i.e... 11d10 20 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 # even 11d20 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 though it should 11d30 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 return a failur 11d40 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e e return code in 11d50 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 this.. # 11d60 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 case)... 11d70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11d80 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 11d90 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 11da0 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 t_directory.... 11db0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
11dc0 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20  annel yes\n....
11dd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
11de0 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f    # NOTE: Does o
11df0 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74  ur caller want t
11e00 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65  o reset the dire
11e10 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20  ctories?..
11e20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
11e30 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d  {$reset} then {. 11e40 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 11e50 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 11e60 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 Now make sure th 11e70 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t 11e80 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo 11e90 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 ries are.. 11ea0 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 # rese 11eb0 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 t their default 11ec0 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 values, which sh 11ed0 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 ould be null for 11ee0 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 both... 11ef0 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 # Since 11f00 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 11f10 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 11f20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 function is avai 11f30 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 lable,.. 11f40 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 # use it 11f50 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 11f60 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 for {s 11f70 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e et index 1} {$in
11f80 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69  dex < 3} {incr i
11f90 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20  ndex} {..
11fa0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
11fb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
11fc0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
11fd0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
11fe0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
12000 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
12010 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
12020 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..
12030 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
12040 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
12050 72 65 63 74 6f 72 79 20 24 69 6e 64 65 78 20 6e  rectory $index n 12060 75 6c 6c 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ull} \.. 12070 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 resu 12080 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 12090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 120a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
120b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
120d0 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74  "---- call sqlit
120e0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
120f0 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20  ectory(" $index 12100 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12110 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e ", null)... 12120 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c ok: "$result \
12130 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
12140 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
12150 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12160 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12170 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12180 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 12190 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 ll sqlite3_win32 121a0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 _set_directory(" 121b0 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20$index \..
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20               ",
121d0 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20  null)... error:
121e0 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 121f0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 12200 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 12210 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 12220 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 12230 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
12240 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20  l no\n....
12250 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
12260 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61  OTE: Does our ca
12270 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73  ller want to res
12280 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69  et the directori
12290 65 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e  es?  This can on
122a0 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ly..        #
122b0 20 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64      be performed
122c0 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f   if SQLite is lo
122d0 61 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 66  aded and ready f
122e0 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65  or use by the te
122f0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  st..        #
12300 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20      suite...
12310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
12320 66 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73  f {$reset && [is 12330 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 SQLiteReady]} th 12340 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12350 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 12360 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 OTE: Now make su 12370 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 re the database 12380 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 and temporary di 12390 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 rectories are.. 123a0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 123b0 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 reset their def 123c0 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 ault values, whi 123d0 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c ch should be nul 123e0 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 l for both... 123f0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 12400 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 ince the sqlite3 12410 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 _win32_set_direc 12420 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f tory function do 12430 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 es not.. 12440 20 20 23 20 20 20 20 20 20 20 61 70 70 65 61 72 # appear 12450 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 to be available 12460 2c 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 69 , use the associ 12470 61 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d ated PRAGMA comm 12480 61 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ands.. 12490 23 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 2e # instead. 124a0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 124b0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 124c0 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 directory [list 124d0 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 data_store_dire 124e0 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 ctory temp_store 124f0 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 _directory] {.. 12500 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 set s 12510 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 ql [appendArgs " 12520 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 PRAGMA "$direct
12530 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d  ory " = \"\";"].
12540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
12550 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75  f {[catch {execu
12560 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75  teSql $sql} resu 12570 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 12580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12590 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
125a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
125c0 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52  "---- execute PR
125d0 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72  AGMA " $director 125e0 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c y "... ok: \"" \ 125f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12600 20 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e$result \"\n
12610 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
12620 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
12630 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 12640 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 12650 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 12660 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 "---- exe 12670 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 cute PRAGMA "$d
12680 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72  irectory "... er
12690 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
126a0 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
126b0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 126c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 126d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 126e0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 126f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 12700 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 NOTE: Finally, 12710 73 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 show the current 12720 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 value of the da 12730 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f tabase and tempo 12740 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 rary.. # 12750 20 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e directories. 12760 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 This can only 12770 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 be performed if 12780 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 SQLite is loaded 12790 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 127a0 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us 127b0 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 e by the test su 127c0 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ite... #.. 127d0 20 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 if {[isSQLi 127e0 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b teReady]} then { 127f0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 12800 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 h directory [lis 12810 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 t data_store_dir 12820 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 ectory temp_stor 12830 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a e_directory] {.. 12840 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 12850 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
12860 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b  Args "---- check
12870 69 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 79  ing " $directory 12880 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 "... "].... 12890 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 set sql [a 128a0 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d ppendArgs "PRAGM 128b0 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c A "$directory \
128c0 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ;]....
128d0 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63  if {[catch {exec
128e0 75 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c  uteSql $sql scal 128f0 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 ar} result] == 0 12900 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12910 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
12920 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
12930 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c   "ok: \"" $resul 12940 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 t \"\n].. 12950 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 12960 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
12970 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
12980 72 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e  rgs "error: " \n
12990 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 129a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 129b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 129c0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 129d0 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 roc loadSQLiteTe 129e0 73 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61 stSettings { cha 129f0 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d nnel {suffix ""} 12a00 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 12a10 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 12a20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 12a30 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 74 loading the sett 12a40 69 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 73 ings if their us 12a50 61 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 age has been dis 12a60 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d abled... #. 12a70 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 12a80 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 o exists ::no(sq 12a90 6c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 liteTestSettings 12aa0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 12ab0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 12ac0 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 NOTE: Load cust 12ad0 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f om per-user and/ 12ae0 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 or per-host test 12af0 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a settings now... 12b00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12b10 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 12b20 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f sts ::tcl_platfo 12b30 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 rm(user)]} then 12b40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 12b50 20 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c userSettingsFil 12b60 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e eName [file join 12b70 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 [getCommonDirec 12b80 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 tory] \.. 12b90 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 [appendAr 12ba0 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 gs settings$suf
12bb0 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61  fix . $::tcl_pla 12bc0 74 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67 tform(user) .eag 12bd0 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 le]].... 12be0 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis 12bf0 74 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 ts$userSettings
12c00 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  FileName]} then
12c10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
12c20 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 12c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 12c40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
12c50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c70 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20    "---- loading
12c80 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65  per-user test se
12c90 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
12ca0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
12cb0 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e       $userSettin 12cc0 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e gsFileName \"... 12cd0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 12ce0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 12cf0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 70 if {[catch {up 12d00 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f level 1 [list so 12d10 75 72 63 65 20 24 75 73 65 72 53 65 74 74 69 6e urce$userSettin
12d20 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a  gsFileName]} \..
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d40 20 20 20 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e      error]} then
12d50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
12d60 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 12d70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 12d80 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
12d90 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
12da0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
12db0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
12dc0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
12dd0 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 20  o load per-user
12de0 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
12df0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
12e00 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65           $userSe 12e10 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 ttingsFileName " 12e20 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 12e30 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
12e40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
12e50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
12e60 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
12e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
12e80 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 12e90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 12ea0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
12eb0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12ed0 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c   "---- skipped l
12ee0 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20  oading per-user
12ef0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69  test settings fi
12f00 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
12f10 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65              $use 12f20 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 12f30 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e e "\", it does n 12f40 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. 12f50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 12f60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 12f70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 12f80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12fc0 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 ######.... 12fd0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 12fe0 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 ts ::tcl_platfor 12ff0 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b m(host)]} then { 13000 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 13010 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 13020 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 Name [file join 13030 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 [getCommonDirect 13040 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ory] \.. 13050 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 13060 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 s settings$suff
13070 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  ix . $::tcl_plat 13080 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c form(host) .eagl 13090 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e]].... 130a0 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 130b0 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 s$hostSettingsF
130c0 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
130d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
130e0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 130f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 13100 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
13110 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13130 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70   "---- loading p
13140 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74  er-host test set
13150 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c  tings file \"" \
13160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13170 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67      $hostSetting 13180 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c sFileName \"...\ 13190 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 131a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 131b0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 70 6c if {[catch {upl 131c0 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 evel 1 [list sou 131d0 72 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e 67 rce$hostSetting
131e0 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20  sFileName]} \..
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13200 20 20 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20     error]} then
13210 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
13220 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 13230 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13240 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
13250 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
13260 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13270 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
13280 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
13290 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73   load per-host s
132a0 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
132b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
132c0 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74          $hostSet 132d0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c tingsFileName "\ 132e0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 132f0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
13300 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
13310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
13320 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
13330 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
13340 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 13350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13360 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
13370 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13390 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f  "---- skipped lo
133a0 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74  ading per-host t
133b0 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c  est settings fil
133c0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
133d0 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74             $host 133e0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 133f0 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no 13400 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 t exist\n"].. 13410 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 13420 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 13430 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 13440 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 13450 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f runSQLiteTestPro 13460 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 logue {} {.. 13470 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13480 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 E: Skip running 13490 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f our custom prolo 134a0 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 gue if the main 134b0 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 one has been.. 134c0 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 # skip 134d0 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ped... #.. 134e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 134f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c exists ::no(prol 13500 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 ogue.eagle)]} th 13510 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 13520 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 13530 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 Load the "befor 13540 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 e-constraints" c 13550 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 ustom per-user a 13560 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a nd/or per-host.. 13570 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 13580 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f test settings no 13590 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 w... #.. 135a0 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 135b0 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 [list loadSQLit 135c0 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a eTestSettings$:
135d0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62  :test_channel .b
135e0 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  efore]....
135f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
13600 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79  OTE: Skip all Sy
13610 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
13620 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61   related file ha
13630 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67  ndling (deleting
13640 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
13650 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20     copying, and
13660 6c 6f 61 64 69 6e 67 29 20 69 66 20 77 65 20 61  loading) if we a
13670 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64  re so instructed
13680 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
13690 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
136a0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
136b0 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
136c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
136d0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
136e0 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
136f0 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c  o delete any fil
13700 65 73 20 69 66 20 77 65 20 61 72 65 20 73 6f 20  es if we are so
13710 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
13720 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13730 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
13740 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
13750 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  eSqliteFiles)]}
13760 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13770 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73      tryDeleteAss
13780 65 6d 62 6c 79 20 73 71 6c 69 74 65 33 2e 64 6c  embly sqlite3.dl
13790 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  l..            r
137a0 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
137b0 66 69 6c 65 5f 73 71 6c 69 74 65 33 2e 64 6c 6c  file_sqlite3.dll
137c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
137d0 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
137e0 79 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  y SQLite.Interop
137f0 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
13800 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69    removeConstrai
13810 6e 74 20 66 69 6c 65 5f 53 51 4c 69 74 65 2e 49  nt file_SQLite.I
13820 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 0d 0a 20 20  nterop.dll....
13830 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
13840 65 74 65 41 73 73 65 6d 62 6c 79 20 53 79 73 74  eteAssembly Syst
13850 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
13860 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..
13870 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  removeConstraint
13880 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74   file_System.Dat
13890 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 0d 0a  a.SQLite.dll....
138a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44              tryD
138b0 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53 79  eleteAssembly Sy
138c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
138d0 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20  .Linq.dll..
138e0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e         removeCon
138f0 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 53 79 73  straint file_Sys
13900 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
13910 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Linq.dll..
13920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
13930 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
13940 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
13950 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63  r the "autoSelec
13960 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  t" runtime optio
13970 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d  n.  If present,.
13980 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
13990 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75     attempt to au
139a0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65  tomatically sele
139b0 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76 61  ct the first ava
139c0 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  ilable..
139d0 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
139e0 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f  (or "release") o
139f0 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73  f SQLite and Sys
13a00 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d  tem.Data.SQLite.
13a10 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
13a20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 20     for use with
13a30 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
13a40 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
13a50 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
13a60 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75  RuntimeOption au
13a70 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20  toSelect]} then
13a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
13a90 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c  f {![checkForSQL
13aa0 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 13ab0 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d t_channel true]} 13ac0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13ad0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 13ae0 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a QLiteReleases$:
13af0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72  :test_channel tr
13b00 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
13b10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
13b20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
13b30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
13b40 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
13b50 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c 64  verify the build
13b60 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 77 65   directory if we
13b70 20 61 72 65 20 73 6f 0d 0a 20 20 20 20 20 20 20   are so..
13b80 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 72     #       instr
13b90 75 63 74 65 64 3b 20 6f 74 68 65 72 77 69 73 65  ucted; otherwise
13ba0 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61  , make sure it a
13bb0 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20 6f  ctually exists o
13bc0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  r..          #
13bd0 20 20 20 20 20 68 61 6c 74 20 74 68 65 20 65 6e       halt the en
13be0 74 69 72 65 20 74 65 73 74 69 6e 67 20 70 72 6f  tire testing pro
13bf0 63 65 73 73 20 69 66 20 69 74 20 64 6f 65 73 20  cess if it does
13c00 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20 20  not exist...
13c10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13c20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
13c30 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79  ists ::no(verify
13c40 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29 5d  BuildDirectory)]
13c50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13c60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13c70 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 20       # NOTE: At
13c80 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 20  this point, the
13c90 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20  build directory
13ca0 4d 55 53 54 20 65 78 69 73 74 20 61 73 20 61 0d  MUST exist as a.
13cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
13cc0 20 20 20 20 20 76 61 6c 69 64 20 64 69 72 65 63       valid direc
13cd0 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65 73  tory for the tes
13ce0 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f 20  ting process to
13cf0 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20  continue...
13d00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13d10 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74        set direct
13d20 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69 72  ory [getBuildDir
13d30 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20  ectory]....
13d40 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c         if {![fil
13d50 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74  e exists $direct 13d60 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ory] || \.. 13d70 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c ![fil 13d80 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 e isdirectory$d
13d90 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
13da0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
13db0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
13dc0 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70    # NOTE: Just p
13dd0 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79  rior to actually
13de0 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73   halting the tes
13df0 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20  ting process,..
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
13e10 20 20 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f       add an erro
13e20 72 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f  r to the test lo
13e30 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  g file...
13e40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13e50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 13e60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 13e70 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 13e90 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 ---- could not v 13ea0 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 erify build dire 13eb0 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 ctory \""$direc
13ec0 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  tory \..
13ed0 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61            "\", a
13ee0 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65  ll testing halte
13ef0 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  d\n"]....
13f00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13f10 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
13f20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69 70 74  Raising a script
13f30 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 69 73   error from this
13f40 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68 61   point should ha
13f50 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  lt..
13f60 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65    #       the te
13f70 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a  sting process...
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
13f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  .              e
13fa0 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73  rror [appendArgs
13fb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13fc0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
13fd0 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69   verify build di
13fe0 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72  rectory \"" $dir 13ff0 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 14000 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", 14010 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c all testing hal 14020 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 ted"].. 14030 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 14040 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 }.... # 14050 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 14060 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 TE: Skip trying 14070 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 to copy any file 14080 73 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 s if we are so i 14090 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 140a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 140b0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 140c0 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 140d0 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the 140e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 140f0 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 tryCopyAssembly 14100 20 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 sqlite3.dll.. 14110 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 14120 79 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65 yAssembly SQLite 14130 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 .Interop.dll.. 14140 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 14150 79 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d yAssembly System 14160 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 14170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 14180 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 79 yCopyAssembly Sy 14190 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 141a0 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 .Linq.dll.. 141b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 141c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 141d0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 # NOTE: Skip tr 141e0 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 ying to load any 141f0 20 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 files if we are 14200 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d so instructed.. 14210 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 14220 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 14230 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 14240 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d oadSqliteFiles)] 14250 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14260 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 tryLoadAss 14270 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 embly System.Dat 14280 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 a.SQLite.dll.. 14290 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 142a0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 142b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin 142c0 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 q.dll.. 142d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 142e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 142f0 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 OTE: Skip trying 14300 20 74 6f 20 64 65 6c 65 74 65 20 65 78 74 65 72 to delete exter 14310 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 77 65 20 nal files if we 14320 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 are so instructe 14330 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 14340 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 14350 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 14360 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 o(deleteSqliteEx 14370 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 ternalFiles)]} t 14380 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14390 20 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c tryDeleteBuil 143a0 64 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65 72 2e dFile Installer. 143b0 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a exe.mda.config.. 143c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 143d0 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 74 eleteBuildFile t 143e0 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 est.exe.mda.conf 143f0 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ig.. 14400 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 14410 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e le testlinq.exe. 14420 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 mda.config.. 14430 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 14440 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14450 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 14460 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 65 78 rying to copy ex 14470 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 ternal files if 14480 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 we are so instru 14490 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 144a0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 144b0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 144c0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 ::no(copySqliteE 144d0 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 xternalFiles)]} 144e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 144f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 14500 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 # NOTE: Copy 14510 74 68 65 20 4d 44 41 20 63 6f 6e 66 69 67 75 72 the MDA configur 14520 61 74 69 6f 6e 20 66 69 6c 65 20 66 6f 72 20 74 ation file for t 14530 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 74 he Eagle shell t 14540 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 o the.. 14550 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 # build 14560 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 output director 14570 79 3b 20 68 6f 77 65 76 65 72 2c 20 75 73 65 20 y; however, use 14580 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 the name of the 14590 6c 65 67 61 63 79 0d 0a 20 20 20 20 20 20 20 20 legacy.. 145a0 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 145b0 20 65 78 65 63 75 74 61 62 6c 65 2e 20 20 54 68 executable. Th 145c0 69 73 20 77 69 6c 6c 20 6d 61 6b 65 20 73 75 72 is will make sur 145d0 65 20 74 68 61 74 20 74 68 65 20 6c 65 67 61 63 e that the legac 145e0 79 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 y tests.. 145f0 20 20 20 20 20 23 20 20 20 20 20 20 20 72 75 6e # run 14600 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 73 with the same s 14610 65 74 20 6f 66 20 4d 44 41 73 20 63 6f 6e 66 69 et of MDAs confi 14620 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 gured... 14630 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 14640 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 tryCopyBinary 14650 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e File EagleShell. 14660 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 exe.mda.config I 14670 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 nstaller.exe.mda 14680 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 .config.. 14690 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 tryCopyBina 146a0 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c ryFile EagleShel 146b0 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 l.exe.mda.config 146c0 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f test.exe.mda.co 146d0 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 nfig.. 146e0 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 tryCopyBinaryF 146f0 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 ile EagleShell.e 14700 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 xe.mda.config te 14710 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 stlinq.exe.mda.c 14720 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 onfig.. 14730 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 14740 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 14750 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 14760 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
14770 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
14780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
14790 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
147a0 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 33 2e 64  n of \"sqlite3.d
147b0 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  ll\"... " \..
147c0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
147d0 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e   version [getBin
147e0 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69  aryFileName sqli
147f0 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20  te3.dll]] \n]..
14800 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
14810 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
14820 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 14830 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 14840 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 14850 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 14860 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 14870 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 \"SQLite.Interop 14880 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 .dll\"... " \.. 14890 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 148a0 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 148b0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 inaryFileName SQ 148c0 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 148d0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 148e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 148f0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 14900 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
14910 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
14920 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
14930 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
14940 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
14950 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
14960 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  l\"... " \..
14970 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
14980 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
14990 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65  ryFileName Syste
149a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
149b0 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  l]] \n]..
149c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
149d0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
149e0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 149f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 14a00 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 14a10 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 14a20 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 ersion of \"Syst 14a30 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L 14a40 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c inq.dll\"... " \ 14a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14a60 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 [file version [g 14a70 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 14a80 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 14a90 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c ite.Linq.dll]] \ 14aa0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d n].. }... 14ab0 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 73 73 . set ass 14ac0 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 emblies [object 14ad0 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e invoke AppDomain 14ae0 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 .CurrentDomain G 14af0 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d etAssemblies]... 14b00 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object 14b10 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 foreach assembly 14b20 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a$assemblies {..
14b30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
14b40 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 79  tring match \{Sy
14b50 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
14b60 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 68  * $assembly]} th 14b70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14b80 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
14b90 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
14ba0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
14bb0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75         "---- fou
14bc0 6e 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24  nd assembly: " $14bd0 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 assembly \n].. 14be0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 14bf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 14c00 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 14c10 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
14c20 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
14c30 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
14c40 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73  define constants
14c50 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61   for \"System.Da
14c60 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22  ta.SQLite\"... "
14c70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
14c80 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
14c90 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
14ca0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
14cc0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14cd0 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65  e.SQLite3 Define
14ce0 43 6f 6e 73 74 61 6e 74 73 7d 20 5c 0d 0a 20 20  Constants} \..
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d00 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d  defineConstants]
14d10 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
14d20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
14d30 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 14d40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f [appendArgs [fo 14d50 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 rmatList [lsort 14d60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14d70 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61$defineConsta
14d80 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d  nts] <none>] \n]
14d90 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
14da0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
14db0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 14dc0 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c channel unknown\ 14dd0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a n.. }.. 14de0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 14df0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 14e00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
14e10 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
14e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
14e30 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65 72 73  ---- source vers
14e40 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e  ion of \"System.
14e50 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c  Data.SQLite.dll\
14e60 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  "... "....
14e70 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
14e80 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
14e90 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
14ea0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
14eb0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
14ec0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
14ed0 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65  nnection Provide
14ee0 72 56 65 72 73 69 6f 6e 7d 20 5c 0d 0a 20 20 20  rVersion} \..
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
14f00 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
14f10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
14f20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
14f30 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d  ngth $version] = 14f40 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 14f50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 set v 14f60 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 ersion null.. 14f70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 14f80 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
14f90 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
14fa0 70 70 65 6e 64 41 72 67 73 20 24 76 65 72 73 69  ppendArgs $versi 14fb0 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 on \n].. 14fc0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 14fd0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
14fe0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
14ff0 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
15000 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
15010 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
15020 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
15030 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 15040 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 15050 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 "---- sourc 15060 65 20 63 68 65 63 6b 6f 75 74 20 6f 66 20 5c 22 e checkout of \" 15070 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 15080 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d te.dll\"... "... 15090 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 150a0 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e catch {object in 150b0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 150c0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 150d0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 150e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 150f0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 QLiteConnection 15100 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 49 64 ProviderSourceId 15110 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } \.. 15120 20 20 20 20 20 20 20 73 6f 75 72 63 65 49 64 5d sourceId] 15130 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 15140 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 15150 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 string length$s
15160 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
15170 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15180 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 49       set sourceI
15190 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  d null..
151a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
151b0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 151c0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 151d0 41 72 67 73 20 24 73 6f 75 72 63 65 49 64 20 5c Args$sourceId \
151e0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
151f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
15200 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 15210 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 t_channel unknow 15220 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n\n.. } 15230 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 15240 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15250 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 15260 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 62 75 the available bu 15270 69 6c 64 73 20 28 61 6e 64 20 22 72 65 6c 65 61 ilds (and "relea 15280 73 65 73 22 29 20 6f 66 20 53 51 4c 69 74 65 20 ses") of SQLite 15290 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 and.. # 152a0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 152b0 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 20 20 .SQLite... 152c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 152d0 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 ckForSQLiteBuild 152e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
152f0 6c 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  l..        check
15300 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65  ForSQLiteRelease
15310 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 15320 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 15330 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 15340 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 Now, we need to 15350 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c 69 know if the SQLi 15360 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 15370 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 is available.. 15380 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69 # (i 15390 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20 .e. because the 153a0 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73 managed-only Sys 153b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 153c0 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 assembly can.. 153d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f # lo 153e0 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 68 ad without it; h 153f0 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f owever, it canno 15400 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 t do anything us 15410 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20 eful without.. 15420 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 # it 15430 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 73 ). If we are us 15440 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f ing the mixed-mo 15450 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 20 de assembly and 15460 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20 we already.. 15470 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 6e # foun 15480 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 68 d it (above), th 15490 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 is should always 154a0 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 20 succeed... 154b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 154c0 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 eckForSQLiteLibr 154d0 61 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ary$::test_chan
154e0 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
154f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
15500 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53  : Check if the S
15510 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73  QLite interop as
15520 73 65 6d 62 6c 79 20 69 73 20 61 76 61 69 6c 61  sembly is availa
15530 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble...        #.
15540 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
15550 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 24  rSQLiteInterop $15560 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 15570 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 15580 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 15590 63 6b 20 74 68 65 20 53 51 4c 69 74 65 20 64 61 ck the SQLite da 155a0 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f tabase and tempo 155b0 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 rary directories 155c0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 155d0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 155e0 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 LiteDirectories 155f0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
15600 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15610 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
15620 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69  tempt to determi
15630 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f  ne if various co
15640 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
15650 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20  ns needed for..
15660 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
15670 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  est constraints
15680 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72  were enabled for
15690 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73   the managed ass
156a0 65 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20  embly.  There..
156b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
156c0 72 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d  re some compile-
156d0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61  time options tha
156e0 74 20 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 65  t must also have
156f0 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20   been enabled..
15700 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
15710 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61  or the interop a
15720 73 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72  ssembly in order
15730 20 74 6f 20 62 65 20 65 66 66 65 63 74 69 76 65   to be effective
15740 2e 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20  .  For those..
15750 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70        #       op
15760 74 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62  tions, it will b
15770 65 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 69  e assumed that i
15780 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f  t was enabled fo
15790 72 20 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20  r the interop..
157a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
157b0 73 73 65 6d 62 6c 79 20 69 66 20 69 74 20 77 61  ssembly if it wa
157c0 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68  s enabled for th
157d0 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  e managed assemb
157e0 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ly...        #..
157f0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
15800 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b  defineConstant [
15810 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
15820 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54 45 20      CHECK_STATE
15830 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44 45 42  COUNT_HANDLE DEB
15840 55 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43  UG INTEROP_CODEC
15850 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 5c   INTEROP_DEBUG \
15860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e  ..            IN
15870 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f  TEROP_EXTENSION_
15880 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f  FUNCTIONS INTERO
15890 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 49  P_LEGACY_CLOSE I
158a0 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c 0d 0a 20 20  NTEROP_LOG \..
158b0 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
158c0 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e  P_TEST_EXTENSION
158d0 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
158e0 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 20 4e 45  _TABLE NET_20 NE
158f0 54 5f 33 35 20 5c 0d 0a 20 20 20 20 20 20 20 20  T_35 \..
15900 20 20 20 20 4e 45 54 5f 34 30 20 4e 45 54 5f 34      NET_40 NET_4
15910 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 5f 43 4f  5 NET_451 NET_CO
15920 4d 50 41 43 54 5f 32 30 20 50 4c 41 54 46 4f 52  MPACT_20 PLATFOR
15930 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
15940 52 4b 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  RK \..
15950 20 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45    PRELOAD_NATIVE
15960 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52 47 45  _LIBRARY RETARGE
15970 54 41 42 4c 45 20 53 51 4c 49 54 45 5f 53 54 41  TABLE SQLITE_STA
15980 4e 44 41 52 44 20 5c 0d 0a 20 20 20 20 20 20 20  NDARD \..
15990 20 20 20 20 20 54 48 52 4f 57 5f 4f 4e 5f 44 49       THROW_ON_DI
159a0 53 50 4f 53 45 44 20 54 52 41 43 45 20 54 52 41  SPOSED TRACE TRA
159b0 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 54 52  CE_CONNECTION TR
159c0 41 43 45 5f 48 41 4e 44 4c 45 20 5c 0d 0a 20 20  ACE_HANDLE \..
159d0 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f            TRACE_
159e0 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f 53 54  PRELOAD TRACE_ST
159f0 41 54 45 4d 45 4e 54 20 54 52 41 43 45 5f 57 41  ATEMENT TRACE_WA
15a00 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d 4f  RNING TRACK_MEMO
15a10 52 59 5f 42 59 54 45 53 20 5c 0d 0a 20 20 20 20  RY_BYTES \..
15a20 20 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45          USE_INTE
15a30 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50  ROP_DLL USE_PREP
15a40 41 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20  ARE_V2 WINDOWS]
15a50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
15a60 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
15a70 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63  : Check if the c
15a80 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
15a90 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20  on is listed in
15aa0 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20  the list of..
15ab0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22         #       "
15ac0 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73  define constants
15ad0 22 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20  " kept track of
15ae0 62 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  by the managed a
15af0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
15b00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
15b10 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
15b20 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a  efineConstant $: 15b30 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 :test_channel$d
15b40 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20  efineConstant..
15b50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
15b60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
15b70 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
15b80 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79   current build y
15b90 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c  ear.  Basically,
15ba0 20 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d   this indicates.
15bb0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
15bc0 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f   which version o
15bd0 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72  f MSBuild and/or
15be0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77   Visual Studio w
15bf0 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20  as used to..
15c00 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70      #       comp
15c10 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79  ile the assembly
15c20 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20   binaries under
15c30 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  test...        #
15c40 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
15c50 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 15c60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 15c70 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo 15c80 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ 15c90 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e Lite build year. 15ca0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 15cb0 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 set year [getBui 15cc0 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 ldYear].. 15cd0 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b addConstraint [ 15ce0 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 appendArgs build 15cf0 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 Year.$year]..
15d00 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 15d10 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 15d20 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 endArgs \"$year
15d30 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20   \"\n]....
15d40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
15d50 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63  OTE: Check the c
15d60 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e  urrent build con
15d70 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69  figuration.  Thi
15d80 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  s should normall
15d90 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
15da0 20 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65     be either "De
15db0 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65  bug" or "Release
15dc0 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
15dd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 15de0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 15df0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 15e00 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 15e10 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 15e20 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 e build configur 15e30 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 ation... ".... 15e40 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 set config 15e50 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c uration [getBuil 15e60 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d dConfiguration]. 15e70 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 15e80 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 15e90 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 gs buildConfigur 15ea0 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 ation.$configur
15eb0 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ation]..
15ec0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 15ed0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15ee0 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 s \"$configurat
15ef0 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  ion \"\n]....
15f00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15f10 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73  # NOTE: Try to s
15f20 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70  etup an interrup
15f30 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  t callback using
15f40 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75   the script debu
15f50 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20  gger..        #
15f60 20 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20        that will
15f70 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71  cancel all SQL q
15f80 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65  ueries in progre
15f90 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62  ss for all datab
15fa0 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ase..        #
15fb0 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73       connections
15fc0 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69   known to this i
15fd0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
15fe0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15ff0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
16000 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74  s ::no(sqliteInt
16010 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d  erruptCallback)]
16020 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16030 20 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72      setupDbInter
16040 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a  ruptCallback $:: 16050 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a test_channel$::
16060 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20  test_log..
16070 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
16080 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
16090 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20  : Check for the
160a0 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f  native runtime o
160b0 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75  ption, which wou
160c0 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a  ld mean we are..
160d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
160e0 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d  using the mixed-
160f0 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  mode assembly...
16100 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16110 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69     checkForRunti
16120 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74  meOption $::test 16130 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d _channel native. 16140 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 16150 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 16160 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 eck if the test 16170 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 suite should cou 16180 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 nt the number of 16190 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 connections.. 161a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f # "o 161b0 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 pened" and "clos 161c0 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f ed" from the poo 161d0 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 l when determini 161e0 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 ng if a test.. 161f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 16200 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 ssed. Disabling 16210 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 this behavior i 16220 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 s sometimes nece 16230 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 ssary (e.g... 16240 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 # dur 16250 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 ing the release 16260 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 testing process) 16270 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 because there a 16280 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 re several.. 16290 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 162a0 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 s that rely on t 162b0 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 he "opened from 162c0 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e pool" count bein 162d0 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 g greater.. 162e0 20 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 # than 162f0 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 zero. These tes 16300 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 ts may fail due 16310 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 to the non-deter 16320 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 ministic.. 16330 20 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 # behavi 16340 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 or of the CLR GC 16350 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 , even when ther 16360 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 e is no bug in t 16370 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 he code.. 16380 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 # being t 16390 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ested... 163a0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 163b0 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e ForRuntimeOption 163c0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
163d0 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d   noPoolCounts...
163e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
163f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f      # NOTE: Repo
16400 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20  rt the resource
16410 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72  usage prior to r
16420 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73  unning any tests
16430 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
16440 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69        reportSQLi
16450 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74  teResources $::t 16460 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 16470 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 16480 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 # NOTE: Show t 16490 68 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63 he active test c 164a0 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 onstraints... 164b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 164c0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
164d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
164e0 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69  s "---- constrai
164f0 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  nts: " \..
16500 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73        [formatLis
16510 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e  t [lsort [getCon
16520 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65  straints]] <none
16530 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  >] \n]....
16540 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
16550 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65  OTE: Save the te
16560 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66  st constraints f
16570 6f 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64  or use by thread
16580 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69  s created in thi
16590 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
165a0 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64     application d
165b0 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20  omain.  This is
165c0 6e 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73  necessary becaus
165d0 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d  e all the Eagle.
165e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
165f0 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20   "test context"
16600 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70  information is p
16610 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20  er-thread...
16620 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
16630 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
16640 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69   ::test_constrai
16650 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  nts]} then {..
16660 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65          set ::te
16670 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24  st_constraints $16680 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f ::eagle_tests(co 16690 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 nstraints).. 166a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 166b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 166c0 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 TE: Load the "af 166d0 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 ter-constraints" 166e0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 custom per-user 166f0 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 and/or per-host 16700 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 16710 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 test settings 16720 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 16730 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c . uplevel 16740 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 1 [list loadSQL 16750 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 iteTestSettings 16760 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
16770 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20  .after]....
16780 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
16790 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20  NOTE: Show when
167a0 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c  our tests actual
167b0 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d  ly began (now)..
167c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
167d0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 167e0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 167f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 16800 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 "---- Syste 16810 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 m.Data.SQLite te 16820 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c sts began at " \ 16830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 .. [c 16840 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f lock format [clo 16850 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d ck seconds]] \n] 16860 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 16870 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 ..... proc ru 16880 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f nSQLiteTestEpilo 16890 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 gue {} {.. 168a0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 168b0 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 Skip running ou 168c0 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 r custom epilogu 168d0 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e e if the main on 168e0 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 e has been.. 168f0 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 # skippe 16900 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 16910 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 16920 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 ists ::no(epilog 16930 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e ue.eagle)]} then 16940 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 16950 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 16960 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 how when our tes 16970 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 ts actually ende 16980 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 d (now)... 16990 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 169a0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
169b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
169c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
169d0 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  --- System.Data.
169e0 53 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64  SQLite tests end
169f0 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20  ed at " \..
16a00 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f         [clock fo
16a10 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
16a20 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  nds]] \n]....
16a30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16a40 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65  # BUGFIX: Before
16a50 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69   checking the fi
16a60 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e  nal resources in
16a70 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20   use by SQLite,
16a80 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20  make..        #
16a90 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74          sure bot
16aa0 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20  h of the PRAGMA
16ab0 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72  related director
16ac0 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65  y names are free
16ad0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
16ae0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
16af0 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73  QLiteDirectories
16b00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 16b10 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... 16b20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 16b30 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 TE: Also report 16b40 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 the resource usa 16b50 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 ge after running 16b60 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 the tests... 16b70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 16b80 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f reportSQLiteReso 16b90 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 urces$::test_ch
16ba0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
16bb0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
16bc0 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63  TE: Report the c
16bd0 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
16be0 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e  ounts after runn
16bf0 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a  ing the tests...
16c00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16c10 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64     getSQLiteHand
16c20 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74  leCounts \$::test
16c30 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20  _channel..
16c40 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
16c50 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
16c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c90 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..
16ca0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
16cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 20  ###############
16cc0 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23  END Eagle ONLY #
16cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############..
16cf0 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
16d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
16d40 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
16d50 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 6e  NOTE: Save the n
16d60 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65 63  ame of the direc
16d70 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tory containing
16d80 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d  this file...  #.
16d90 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
16da0 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65  ists common_dire
16db0 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
16dc0 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64      set common_d
16dd0 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
16de0 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72  irname [info scr
16df0 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ipt]]..  }....
16e00 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f  #..  # NOTE: Pro
16e10 76 69 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e  vide the System.
16e20 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
16e30 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20   package to the
16e40 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
16e50 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f  #..  package pro
16e60 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61  vide System.Data
16e70 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30  .SQLite.Test 1.0
16e80 0d 0a 7d 0d 0a                                   ..}..