System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 56fdfb3652da115979bbabe3cb00a0f712c800a0:

• File Tests/common.eagle — part of check-in [1a3f35c77a] at 2013-12-31 07:40:32 on branch trunk — Update test suite infrastructure to make it possible to easily test the native library pre-loading code. (user: mistachkin size: 101723)

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 7b 70 6c 61 74 66 6f 72  ileName {platfor
4bf0: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
4c00: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
4c10: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70  : Returns the sp
4c20: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  ecified file nam
4c30: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  e as if it were
4c40: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a  located in the..
4c50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
4c60: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64  ild directory, d
4c70: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69  iscarding any di
4c80: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74  rectory informat
4c90: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20  ion present..
4ca0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68     #       in th
4cb0: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70  e file name as p
4cc0: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
4cd0: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
4ce0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66  .      return [f
4cf0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
4d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c  ..          [fil
4d10: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64  e join [getBuild
4d20: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 4d30: 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 form [file tail 4d40: 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20$fileName]]]..
4d50: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
4d60: 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74   getBinaryDirect
4d70: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
4d80: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
4d90: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
4da0: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
4db0: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
4dc0: 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  test application
4dd0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4de0: 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65  itself (i.e. the
4df0: 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73   Eagle shell) is
4e00: 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20   located.  This
4e10: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d  will be used as.
4e20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
4e30: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66  he destination f
4e40: 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 53 79  or the copied Sy
4e50: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
4e60: 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20   native and..
4e70: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67     #       manag
4e80: 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69  ed assemblies (i
4e90: 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 69 73  .e. because this
4ea0: 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   is one of the f
4eb0: 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20  ew places..
4ec0: 20 23 20 20 20 20 20 20 20 77 68 65 72 65 20 74   #       where t
4ed0: 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75  he CLR will actu
4ee0: 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f  ally find and lo
4ef0: 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79  ad them properly
4f00: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
4f10: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
4f20: 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72  sts ::binary_dir
4f30: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
4f40: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
4f50: 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79  length $::binary 4f60: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 4f70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4f80: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4f90: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 4fa0: 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 of the binary d 4fb0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 4fc0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 4fd0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 4fe0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 4ff0: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 5000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 5010: 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f eturn$::binary_
5020: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
5030: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
5040: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20     return [info
5050: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d  binary]..      }
5060: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
5070: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69  proc getBinaryFi
5080: 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d  leName { fileNam
5090: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
50a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
50b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
50c0: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rns the specifie
50d0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69  d file name as i
50e0: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65  f it were locate
50f0: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
5100: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
5110: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72  irectory, discar
5120: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f  ding any directo
5130: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ry information p
5140: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20  resent..      #
5150: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c        in the fil
5160: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64  e name as provid
5170: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
5180: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
5190: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
51a0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
51b0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
51c0: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
51d0: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 51e0: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
51f0: 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d  eName]]]..    }.
5200: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
5210: 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61  CoreBinaryFileNa
5220: 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22  me { {platform "
5230: 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 66 61 6c  "} {standard fal
5240: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
5250: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5260: 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c  Returns the full
5270: 20 70 61 74 68 20 66 6f 72 20 74 68 65 20 66 69   path for the fi
5280: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
5290: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core..
52a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74       #       nat
52b0: 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65  ive library code
52c0: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
52d0: 72 6d 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63  rm.  First, chec
52e0: 6b 20 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20  k and see if..
52f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
5300: 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69  SQLite core nati
5310: 76 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61  ve library has a
5320: 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64  lready been load
5330: 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20  ed.  Next,..
5340: 20 20 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61    #       fallba
5350: 63 6b 20 74 6f 20 77 68 61 74 20 74 68 65 20 66  ck to what the f
5360: 75 6c 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20  ull path should
5370: 62 65 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65  be, based on whe
5380: 74 68 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20  ther the..
5390: 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f  #       mixed-mo
53a0: 64 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62  de assembly is b
53b0: 65 69 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68  eing used and th
53c0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75  e name of the cu
53d0: 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  rrent..      #
53e0: 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a       platform...
53f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
5400: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
5410: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
5420: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
5430: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
5440: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
5450: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5460: 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
5470: 20 20 20 20 5f 53 51 4c 69 74 65 4e 61 74 69 76      _SQLiteNativ
5480: 65 4d 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 7d  eModuleFileName}
5490: 20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20   fileName] == 0
54a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
54b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $54c0: 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 fileName] > 0} t 54d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 54e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 54f0: 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 : The SQLite cor 5500: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 5510: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee 5520: 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 n loaded via.. 5530: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 5540: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 5550: 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 pre-loader. Re 5560: 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e turn that file n 5570: 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ame now... 5580: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 5590: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 urn$fileName..
55a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
55b0: 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f  if {[hasRuntimeO
55c0: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74  ption native]} t
55d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
55e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
55f0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78  : Return the mix
5600: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79  ed-mode assembly
5610: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
5620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
5630: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
5640: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
5650: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
5660: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
5670: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 5680: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 5690: 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 ite.dll]].. 56a0: 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 6e } elseif {$stan
56b0: 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  dard} then {..
56c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
56d0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
56e0: 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20  the native-only
56f0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite
5700: 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
5710: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
5720: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
5730: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
5740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
5750: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
5760: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 5770: 6c 61 74 66 6f 72 6d 20 73 71 6c 69 74 65 33 2e latform sqlite3. 5780: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 dll]].. } e 5790: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 57a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 57b0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 : Return the nat 57c0: 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 ive-only interop 57d0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e assembly file n 57e0: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ame... #. 57f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 5800: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5810: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 5820: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 [file join [getB 5830: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 inaryDirectory] 5840: 24 70 6c 61 74 66 6f 72 6d 20 53 51 4c 69 74 65$platform SQLite
5850: 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a  .Interop.dll]]..
5860: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5870: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
5880: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b  ommonDirectory {
5890: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
58a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
58b0: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
58c0: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ns the directory
58d0: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20   where the test
58e0: 73 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23  scripts..      #
58f0: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
5900: 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65   located.  By de
5910: 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74  fault, this just
5920: 20 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 67   returns the Eag
5930: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
5940: 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f    binary directo
5950: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
5960: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
5970: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ists ::common_di
5980: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
5990: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
59a0: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f   length $::commo 59b0: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 n_directory] > 0 59c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 59d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 59e0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 59f0: 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 n of the common 5a00: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 5a10: 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 en set;.. 5a20: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 5a30: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 re, use it... 5a40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5a50: 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e return$::common
5a60: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
5a70: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
5a80: 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f  o exists ::vendo
5a90: 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  r_directory] &&
5aa0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
5ab0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76  ring length $::v 5ac0: 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d endor_directory] 5ad0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 5ae0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5af0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 5b00: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e ation of the ven 5b10: 64 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 dor directory ha 5b20: 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 s been set;.. 5b30: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 5b40: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. 5b50: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5b60: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 return$::ve
5b70: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a  ndor_directory..
5b80: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
5b90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
5ba0: 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c  cl_library] && \
5bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
5bc0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63  ing length $::tc 5bd0: 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 l_library] > 0 & 5be0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 5bf0: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory 5c00: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d$::tcl_library]
5c10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5c20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
5c30: 4f 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c  OTE: The variabl
5c40: 65 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74  e with the locat
5c50: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70  ion of the scrip
5c60: 74 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20  t library is..
5c70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
5c80: 74 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f  t and appears to
5c90: 20 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 63   be a real direc
5ca0: 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65  tory (i.e. not e
5cb0: 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20  mbedded..
5cc0: 20 23 20 20 20 20 20 20 20 77 69 74 68 69 6e 20   #       within
5cd0: 61 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f  a file); therefo
5ce0: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
5cf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
5d00: 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69  return $::tcl_li 5d10: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 brary.. } e 5d20: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 5d30: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 5d40: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 : Fallback to th 5d50: 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 e directory cont 5d60: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 aining the execu 5d70: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 table... 5d80: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 5d90: 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d n [info binary]. 5da0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 5db0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 5dc0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 DatabaseDirector 5dd0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 5de0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 5df0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 5e00: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 5e10: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 5e20: 73 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 st databases.. 5e30: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 5e40: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 5e50: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 5e60: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t 5e70: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 5e80: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 5e90: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for 5ea0: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... 5eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 5ec0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 5ed0: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 5ee0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 5ef0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 5f00: 67 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f gth$::database_
5f10: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
5f20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
5f30: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
5f40: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
5f50: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
5f60: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
5f70: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
5f80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
5f90: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
5fa0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
5fb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 5fc0: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 5fd0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 5fe0: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 5ff0: 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 s ::scratch_dire 6000: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 6010: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6020: 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 ength$::scratch
6030: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
6040: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
6050: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
6060: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
6070: 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20   of the scratch
6080: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
6090: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
60a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
60b0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
60c0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
60d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 60e0: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo 60f0: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 6100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 6110: 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 rn [getTemporary 6120: 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a Path].. }.. 6130: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 6140: 6f 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 oc getTemporaryD 6150: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 6160: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6170: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 6180: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 6190: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 61a0: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 the temporary f 61b0: 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 iles.. # 61c0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo 61d0: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau 61e0: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us 61f0: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary 6200: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6210: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config 6220: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy 6230: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. 6240: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 6250: 65 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 exists ::tempora 6260: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ry_directory] && 6270: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 6280: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
6290: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74  temporary_direct
62a0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
62b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
62c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
62d0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
62e0: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
62f0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
6300: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
6310: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
6320: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
6330: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6340: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70    return $::temp 6350: 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d orary_directory. 6360: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 6370: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 6380: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director 6390: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 63a0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 63b0: 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 h$::scratch_dir
63c0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
63d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
63e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
63f0: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
6400: 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65  the scratch dire
6410: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f  ctory has been o
6420: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20  verridden;..
6430: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
6440: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
6450: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6460: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72     return $::scr 6470: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a atch_directory.. 6480: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 6490: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 64a0: 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 getTemporaryPath 64b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 64c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 64d0: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 etTestOverridesP 64e0: 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 reamble { {extra 64f0: 56 61 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b VarNames ""} } { 6500: 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 72 4e .. set varN 6510: 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 ames [list].... 6520: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6530: 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 NOTE: If availab 6540: 6c 65 2c 20 73 74 61 72 74 20 77 69 74 68 20 74 le, start with t 6550: 68 65 20 6d 61 73 74 65 72 20 6c 69 73 74 20 6f he master list o 6560: 66 20 74 65 73 74 20 6f 76 65 72 72 69 64 65 0d f test override. 6570: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v 6580: 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 ariables... 6590: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 65a0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 65b0: 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 26 26 20 t_overrides] && 65c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 65d0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 ength$::test_ov
65e0: 65 72 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 68  errides] > 0} th
65f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76  en {..        ev
6600: 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61  al lappend varNa
6610: 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72  mes $::test_over 6620: 72 69 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a rides.. }.. 6630: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6640: 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 # NOTE: If requ 6650: 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c ested by our cal 6660: 6c 65 72 2c 20 61 64 64 20 61 6e 79 20 61 64 64 ler, add any add 6670: 69 74 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 itional variable 6680: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6690: 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f names to copy no 66a0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. 66b0: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 66c0: 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 5d 20$extraVarNames]
66d0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
66e0: 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e       eval lappen
66f0: 64 20 76 61 72 4e 61 6d 65 73 20 24 65 78 74 72  d varNames $extr 6700: 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 aVarNames.. 6710: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 6720: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui 6730: 6c 64 20 74 68 65 20 73 63 72 69 70 74 20 66 72 ld the script fr 6740: 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 74 agment to be ret 6750: 75 72 6e 65 64 20 62 79 20 70 72 6f 63 65 73 73 urned by process 6760: 69 6e 67 20 65 61 63 68 0d 0a 20 20 20 20 20 20 ing each.. 6770: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 6780: 20 6e 61 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 name and adding 6790: 20 74 68 65 20 6e 65 63 65 63 65 73 73 61 72 79 the nececessary 67a0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment 67b0: 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 s for.. # 67c0: 20 20 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a each one... 67d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 67e0: 65 74 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a et result "".... 67f0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 foreach va 6800: 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 rName$varNames
6810: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
6820: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
6830: 69 6c 64 20 74 68 65 20 71 75 61 6c 69 66 69 65  ild the qualifie
6840: 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
6850: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  e name...
6860: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
6870: 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70  fullVarName [app
6880: 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 61 72 4e  endArgs :: $varN 6890: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ame].... 68a0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 68b0: 45 3a 20 44 6f 65 73 20 74 68 65 20 76 61 72 69 E: Does the vari 68c0: 61 62 6c 65 20 65 78 69 73 74 20 69 6e 20 74 68 able exist in th 68d0: 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 is interpreter c 68e0: 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 ontext?.. 68f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 6900: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 66 75 [info exists$fu
6910: 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e  llVarName]} then
6920: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
6930: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
6940: 45 3a 20 41 70 70 65 6e 64 20 61 20 73 63 72 69  E: Append a scri
6950: 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 74  pt fragment to t
6960: 68 65 20 72 65 73 75 6c 74 20 74 68 61 74 20 77  he result that w
6970: 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20  ill correctly..
6980: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
6990: 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 69   copy any contai
69a0: 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f  ned value to ano
69b0: 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 65 72  ther interpreter
69c0: 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20   context...
69d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
69e0: 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20    append result
69f0: 5c 6e 20 22 73 65 74 20 22 20 24 66 75 6c 6c 56  \n "set " $fullV 6a00: 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 arName " \{" [se 6a10: 74 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 t$fullVarName]
6a20: 5c 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  \}..        }..
6a30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
6a40: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6a50: 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   If the result c
6a60: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
6a70: 6f 72 65 20 73 63 72 69 70 74 20 66 72 61 67 6d  ore script fragm
6a80: 65 6e 74 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a  ents, append a..
6a90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65        #       ne
6aa0: 77 6c 69 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d  wline...      #.
6ab0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
6ac0: 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c  ng length $resul 6ad0: 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. 6ae0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 append r 6af0: 65 73 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 esult \n.. 6b00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 6b10: 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
6b20: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
6b30: 74 41 70 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62  tAppDomainPreamb
6b40: 6c 65 20 7b 20 7b 70 72 65 66 69 78 20 22 22 7d  le { {prefix ""}
6b50: 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7d 20 7b   {suffix ""} } {
6b60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6b70: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
6b80: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
6b90: 61 20 74 65 73 74 20 73 65 74 75 70 20 73 63 72  a test setup scr
6ba0: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 73 75 69  ipt fragment sui
6bb0: 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20  table for..
6bc0: 20 23 20 20 20 20 20 20 20 65 76 61 6c 75 61 74   #       evaluat
6bd0: 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74 65 72 70  ion by an interp
6be0: 72 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e  reter created in
6bf0: 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 61 70 70   an isolated app
6c00: 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  lication..
6c10: 23 20 20 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20  #       domain.
6c20: 20 54 68 65 20 73 63 72 69 70 74 20 66 72 61 67   The script frag
6c30: 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72  ment being retur
6c40: 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 72 72  ned will be surr
6c50: 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20 20 20 20  ounded by..
6c60: 20 23 20 20 20 20 20 20 20 74 68 65 20 70 72 65   #       the pre
6c70: 66 69 78 20 61 6e 64 20 73 75 66 66 69 78 20 22  fix and suffix "
6c80: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73  script fragments
6c90: 22 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f  " specified by o
6ca0: 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20  ur caller,..
6cb0: 20 20 23 20 20 20 20 20 20 20 69 66 20 61 6e 79    #       if any
6cc0: 2e 20 20 54 68 65 20 65 6e 74 69 72 65 20 73 63  .  The entire sc
6cd0: 72 69 70 74 20 62 65 69 6e 67 20 72 65 74 75 72  ript being retur
6ce0: 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 62 73  ned will be subs
6cf0: 74 69 74 75 74 65 64 20 76 69 61 0d 0a 20 20 20  tituted via..
6d00: 20 20 20 23 20 20 20 20 20 20 20 5b 73 75 62 73     #       [subs
6d10: 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  t], in the conte
6d20: 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72  xt of our caller
6d30: 2c 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 72  , before being r
6d40: 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20  eturned...
6d50: 23 20 20 20 20 20 20 20 54 68 69 73 20 73 74 65  #       This ste
6d60: 70 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73  p is necessary s
6d70: 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69  o that some limi
6d80: 74 65 64 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f  ted context info
6d90: 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  rmation,..
6da0: 23 20 20 20 20 20 20 20 70 72 69 6d 61 72 69 6c  #       primaril
6db0: 79 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65  y related to the
6dc0: 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f   testing directo
6dd0: 72 69 65 73 2c 20 63 61 6e 20 62 65 20 74 72 61  ries, can be tra
6de0: 6e 73 66 65 72 72 65 64 0d 0a 20 20 20 20 20 20  nsferred..
6df0: 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 69  #       to the i
6e00: 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20 74 68  nterpreter in th
6e10: 65 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69  e isolated appli
6e20: 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d  cation domain, m
6e30: 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20 20 20 20  aking it..
6e40: 23 20 20 20 20 20 20 20 61 62 6c 65 20 74 6f 20  #       able to
6e50: 73 75 63 63 65 73 73 66 75 6c 6c 79 20 72 75 6e  successfully run
6e60: 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71 75   tests that requ
6e70: 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ire one or more
6e80: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  of the..      #
6e90: 20 20 20 20 20 20 66 69 6c 65 73 20 69 6e 20 6f        files in o
6ea0: 6e 65 20 6f 66 20 74 68 65 20 74 65 73 74 69 6e  ne of the testin
6eb0: 67 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20  g directories.
6ec0: 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b  Callers should k
6ed0: 65 65 70 20 69 6e 0d 0a 20 20 20 20 20 20 23 20  eep in..      #
6ee0: 20 20 20 20 20 20 6d 69 6e 64 20 74 68 61 74 20        mind that
6ef0: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 20  the test script
6f00: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72  fragment being r
6f10: 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72  eturned cannot r
6f20: 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ely on..      #
6f30: 20 20 20 20 20 20 61 6e 79 20 73 63 72 69 70 74        any script
6f40: 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 75   library procedu
6f50: 72 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  res that are not
6f60: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
6f70: 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20   Eagle..      #
6f80: 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 70 61        library pa
6f90: 63 6b 61 67 65 20 28 69 2e 65 2e 20 22 69 6e 69  ckage (i.e. "ini
6fa0: 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75  t.eagle"), inclu
6fb0: 64 69 6e 67 20 74 68 6f 73 65 20 70 72 6f 76 69  ding those provi
6fc0: 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20  ded by..      #
6fd0: 20 20 20 20 20 20 74 68 65 20 45 61 67 6c 65 20        the Eagle
6fe0: 74 65 73 74 20 70 61 63 6b 61 67 65 2c 20 75 6e  test package, un
6ff0: 6c 65 73 73 20 74 68 65 20 66 69 6c 65 20 63 6f  less the file co
7000: 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d 20 69 73  ntaining them is
7010: 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
7020: 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20         manually
7030: 76 69 61 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d  via some other m
7040: 65 63 68 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62  echanism (e.g. b
7050: 79 20 69 6e 63 6c 75 64 69 6e 67 20 61 70 70 72  y including appr
7060: 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20 20 23  opriate..      #
7070: 20 20 20 20 20 20 20 5b 70 61 63 6b 61 67 65 20         [package
7080: 72 65 71 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75  require] or [sou
7090: 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e  rce] commands in
70a0: 20 74 68 65 20 70 72 65 66 69 78 20 6f 72 20 73   the prefix or s
70b0: 75 66 66 69 78 0d 0a 20 20 20 20 20 20 23 20 20  uffix..      #
70c0: 20 20 20 20 20 73 63 72 69 70 74 20 66 72 61 67       script frag
70d0: 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61  ments).  Also, a
70e0: 6c 6c 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  ll variable refe
70f0: 72 65 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e  rences and all n
7100: 65 73 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20  ested..      #
7110: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69       commands (i
7120: 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20 73 71 75  .e. those in squ
7130: 61 72 65 20 62 72 61 63 6b 65 74 73 29 20 63 6f  are brackets) co
7140: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 66  ntained in the f
7150: 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20  inal..      #
7160: 20 20 20 20 73 63 72 69 70 74 20 66 72 61 67 6d      script fragm
7170: 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20 75 70 20  ent will end up
7180: 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20  being evaluated
7190: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f  in the context o
71a0: 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  f the..      #
71b0: 20 20 20 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74       calling int
71c0: 65 72 70 72 65 74 65 72 20 61 6e 64 20 6e 6f 74  erpreter and not
71d0: 20 74 68 65 20 74 61 72 67 65 74 20 69 6e 74 65   the target inte
71e0: 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64 20  rpreter created
71f0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  in the..      #
7200: 20 20 20 20 20 20 69 73 6f 6c 61 74 65 64 20 61        isolated a
7210: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
7220: 6e 20 75 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c  n unless the dol
7230: 6c 61 72 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72  lar signs and/or
7240: 20 73 71 75 61 72 65 0d 0a 20 20 20 20 20 20 23   square..      #
7250: 20 20 20 20 20 20 20 62 72 61 63 6b 65 74 73 20         brackets
7260: 61 72 65 20 73 70 65 63 69 61 6c 6c 79 20 71 75  are specially qu
7270: 6f 74 65 64 20 77 69 74 68 20 62 61 63 6b 73 6c  oted with backsl
7280: 61 73 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ashes...      #.
7290: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75  .      return [u
72a0: 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73  plevel 1 [list s
72b0: 75 62 73 74 20 5b 61 70 70 65 6e 64 41 72 67 73  ubst [appendArgs
72c0: 20 24 70 72 65 66 69 78 20 7b 0d 0a 20 20 20 20   $prefix {.. 72d0: 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 72e0: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 72f0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 7300: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 7310: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ke Interpreter.G 7320: 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e 74 etActive AddRunt 7330: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 7340: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 7350: 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f 76 65 } [getTestOve 7360: 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 5b rridesPreamble [ 7370: 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 5f 63 list path test_c 7380: 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78 hannel]]$suffix
7390: 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ]]]..    }.....
73a0: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42     proc tryCopyB
73b0: 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65  inaryFile { file
73c0: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
73d0: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20  "} {newFileName
73e0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ""} } {..      s
73f0: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  et sourceFileNam
7400: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  e [getBinaryFile
7410: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  Name $fileName$
7420: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
7430: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
7440: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65  ists $sourceFile 7450: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 7460: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
7470: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
7480: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
7490: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
74a0: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69  ipped copying bi
74b0: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73  nary file \"" $s 74c0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. 74d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" 74e0: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex 74f0: 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ist\n"].... 7500: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. 7510: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 7520: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
7530: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30  newFileName] > 0
7540: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7550: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
7560: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
7570: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e  leName $newFileN 7580: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
7590: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
75a0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
75b0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
75c0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69  uildFileName $fi 75d0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
75e0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
75f0: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69      set targetDi
7600: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69  rectory [file di
7610: 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c  rname $targetFil 7620: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 eName].... 7630: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 7640: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 7650: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 ![file exists$t
7660: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d  argetDirectory]}
7670: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
7680: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b           file mk
7690: 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63  dir $targetDirec 76a0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 tory.. 76b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 76c0: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d file copy - 76d0: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c force$sourceFil
76e0: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c  eName $targetFil 76f0: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 eName}] == 0} th 7700: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 7710: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
7720: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
7730: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
7740: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e 61  ---- copied bina
7750: 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  ry file from \""
7760: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 7770: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 "\" to \"" \.. 7780: 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67$targ
7790: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
77a0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
77b0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
77c0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 77d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 77e0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 77f0: 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 failed to copy 7800: 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d binary file from 7810: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
7820: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
7830: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24      "\" to \"" $7840: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ 7850: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 "\n].. }.. 7860: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 7870: 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 c tryCopyBuildFi 7880: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 le { fileName {p 7890: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 latform ""} {new 78a0: 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b FileName ""} } { 78b0: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 .. set sour 78c0: 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 ceFileName [getB 78d0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 uildFileName$fi
78e0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform 78f0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! 7900: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f [file exists$so
7910: 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  urceFileName]} t
7920: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
7930: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 7940: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 7950: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 7960: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f "---- skipped co 7970: 70 79 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 pying build file 7980: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
7990: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
79a0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
79b0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
79c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
79d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
79e0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
79f0: 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61  ength $newFileNa 7a00: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d me] > 0} then {. 7a10: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 . set tar 7a20: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 getFileName [get 7a30: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
7a40: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61  newFileName $pla 7a50: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 tform].. } 7a60: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 7a70: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 set targetFileNa 7a80: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil 7a90: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
7aa0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20  $platform].. 7ab0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 }.... set 7ac0: 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 targetDirectory 7ad0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 [file dirname$
7ae0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d  targetFileName].
7af0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
7b00: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
7b10: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
7b20: 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69  exists $targetDi 7b30: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b rectory]} then { 7b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 7b50: 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 file mkdir$ta
7b60: 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20  rgetDirectory..
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
7b90: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24  le copy -force $7ba0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 sourceFileName$
7bb0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 7d 5d  targetFileName}]
7bc0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
7bd0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 7be0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 7bf0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 7c00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 7c10: 70 69 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 pied build file 7c20: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 from \""$source
7c30: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20  FileName "\" to
7c40: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
7c50: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61     $targetFileNa 7c60: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. 7c70: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 7c80: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
7c90: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
7ca0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
7cb0: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20     "---- failed
7cc0: 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 20 66 69  to copy build fi
7cd0: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 7ce0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. 7cf0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 "\" t 7d00: 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c o \""$targetFil
7d10: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
7d20: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
7d30: 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65      proc tryDele
7d40: 74 65 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66  teBinaryFile { f
7d50: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
7d60: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
7d70: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67   set fileName [g
7d80: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
7d90: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
7da0: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  form]....      i
7db0: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
7dc0: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 7dd0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 7de0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
7df0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
7e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
7e10: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65  --- skipped dele
7e20: 74 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65  ting binary file
7e30: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 7e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ 7e50: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e 7e60: 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 xist\n"].... 7e70: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. 7e80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 7e90: 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 {[catch {file de 7ea0: 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d lete$fileName}]
7eb0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
7ec0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 7ed0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 7ee0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 7ef0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 "---- de 7f00: 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 6c leted binary fil 7f10: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
7f20: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
7f30: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
7f40: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 7f50: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 7f60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 7f70: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to 7f80: 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69 delete binary fi 7f90: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
7fa0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
7fb0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
7fc0: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 69  roc tryDeleteBui
7fd0: 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  ldFile { fileNam
7fe0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
7ff0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
8000: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c  ileName [getBuil
8010: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  dFileName $fileN 8020: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
8030: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
8040: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 8050: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 8060: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
8070: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
8080: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
8090: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69         "---- ski
80a0: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 75  pped deleting bu
80b0: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69  ild file \"" $fi 80c0: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. 80d0: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do 80e0: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] 80f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 .... retu 8100: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rn.. }.... 8110: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 8120: 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
8130: 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74  leName}] == 0} t
8140: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
8150: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 8160: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 8170: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8180: 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 "---- deleted bu 8190: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ild file \""$fi
81a0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
81b0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
81c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 81d0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 81e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 81f0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 "---- fai 8200: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 led to delete bu 8210: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ild file \""$fi
8220: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
8230: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
8240: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70  .    proc tryCop
8250: 79 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65  yAssembly { file
8260: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
8270: 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7d 20  "} {pdb true} }
8280: 7b 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79  {..      tryCopy
8290: 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e  BuildFile $fileN 82a0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 0d ame$platform...
82b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d  .      if {$pdb} 82c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 82d0: 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c tryCopyBuildFil 82e0: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d e [appendArgs \. 82f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 8300: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c le rootname$fil
8310: 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c  eName] .pdb] $pl 8320: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 7d 0d atform.. }. 8330: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 8340: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 73 roc tryDeleteAss 8350: 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 embly { fileName 8360: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { 8370: 70 64 62 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 pdb true} } {.. 8380: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 tryDeleteBi 8390: 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 naryFile$fileNa
83a0: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a  me $platform.... 83b0: 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 if {$pdb}
83c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
83d0: 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
83e0: 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ile [appendArgs
83f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
8400: 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66  file rootname $f 8410: 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 ileName] .pdb]$
8420: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
8430: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
8440: 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 73   proc tryLoadAss
8450: 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65  embly { fileName
8460: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d   {platform ""} }
8470: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69   {..      set fi
8480: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72  leName [getBinar
8490: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  yFileName $fileN 84a0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
84b0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
84c0: 63 68 20 7b 73 65 74 20 61 73 73 65 6d 62 6c 79  ch {set assembly
84d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
84e0: 20 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d    [object load -
84f0: 6c 6f 61 64 74 79 70 65 20 46 69 6c 65 20 2d 61  loadtype File -a
8500: 6c 69 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  lias $fileName]} 8510: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 8520: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8530: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 # NOTE: Now, 8540: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar 8550: 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e y test constrain 8560: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 8570: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 8580: 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e aint [file rootn 8590: 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 ame [file tail$
85a0: 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20  fileName]]....
85b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
85c0: 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
85d0: 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  e image runtime
85e0: 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65  version from the
85f0: 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73   assembly becaus
8600: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
8610: 20 20 20 73 65 76 65 72 61 6c 20 74 65 73 74 73     several tests
8620: 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69   rely on it havi
8630: 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c  ng a certain val
8640: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ue...        #..
8650: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
8660: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
8670: 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  s [file tail $fi 8680: 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 leName] _ \.. 8690: 20 20 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d [$assem
86a0: 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65  bly ImageRuntime
86b0: 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20  Version]]....
86c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
86d0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
86e0: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20  he full path of
86f0: 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e  the loaded file.
8700: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8710: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c       return $fil 8720: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a eName.. }.. 8730: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 .. return " 8740: 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ".. }..... 8750: 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 proc isSQLiteRe 8760: 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ady {} {.. 8770: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 8780: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 8790: 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d must return non- 87a0: 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 zero only if the 87b0: 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a SQLite native.. 87c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 # li 87d0: 62 72 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 brary and the Sy 87e0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 87f0: 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 8800: 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 y are loaded.. 8810: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 8820: 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 ready for use by 8830: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 8840: 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 Currently, thi 8850: 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 s procedure.. 8860: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c # shoul 8870: 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 d be called only 8880: 20 61 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c after the [tryL 8890: 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f oadAssembly] pro 88a0: 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 cedure has.. 88b0: 20 20 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 # been c 88c0: 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 alled to probe f 88d0: 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 or the System.Da 88e0: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 ta.SQLite manage 88f0: 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 d assembly.. 8900: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 # and th 8910: 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 e [checkForSQLit 8920: 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 e] procedure has 8930: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 been called to 8940: 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 probe for.. 8950: 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c # the SQL 8960: 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 ite native libra 8970: 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 ry; otherwise, t 8980: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 his procedure wi 8990: 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 ll simply.. 89a0: 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 # always 89b0: 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 return zero... 89c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 89d0: 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 urn [expr {.. 89e0: 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons 89f0: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 traint System.Da 8a00: 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 ta.SQLite] && [h 8a10: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 aveConstraint SQ 8a20: 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d Lite].. }]. 8a30: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 8a40: 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 6e 65 roc matchMachine 8a50: 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d { platform } {. 8a60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8a70: 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 # NOTE: An empty 8a80: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 string for the 8a90: 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 platform means t 8aa0: 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 hat the build is 8ab0: 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 not.. # 8ac0: 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 [primarily] 8ad0: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 a native build; 8ae0: 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c therefore, it al 8af0: 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 ways matches... 8b00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 8b10: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 8b20: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30$platform] == 0
8b30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
8b40: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
8b50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
8b60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
8b70: 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66   Does the specif
8b80: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74  ied platform mat
8b90: 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72  ch up to the cur
8ba0: 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20  rent process?..
8bb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
8bc0: 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b   {$platform eq [ 8bd0: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 machineToPlatfor 8be0: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 m$::tcl_platfor
8bf0: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65  m(machine)]} the
8c00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
8c10: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
8c20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
8c30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
8c40: 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f  specified platfo
8c50: 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rm does not matc
8c60: 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c  h up with the pl
8c70: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20  atform..      #
8c80: 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75        for the cu
8c90: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
8ca0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
8cb0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
8cc0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
8cd0: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75  checkForSQLiteBu
8ce0: 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ilds { channel {
8cf0: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20  select false} }
8d00: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
8d10: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
8d20: 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 62  for every possib
8d30: 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61  le valid combina
8d40: 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75  tion of values u
8d50: 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20  sed when..
8d60: 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67  #       locating
8d70: 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f   out the build o
8d80: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c  utput directory,
8d90: 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76   showing each av
8da0: 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23  ailable..      #
8db0: 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 72         build var
8dc0: 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65  iation along the
8dd0: 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   way...      #..
8de0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
8df0: 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65  tive [list false
8e00: 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20   true] {..
8e10: 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b    foreach year [
8e20: 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b  getBuildYears] {
8e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
8e40: 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ach configuratio
8e50: 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69  n [getBuildConfi
8e60: 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20  gurations] {..
8e70: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
8e80: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
8e90: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20   Figure out the
8ea0: 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20  effective build
8eb0: 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20  platform.  This
8ec0: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..
8ed0: 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e  #       based on
8ee0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not
8ef0: 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61  a [primarily] na
8f00: 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20  tive build..
8f10: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
8f20: 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  is being used.
8f30: 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20  For [primarily]
8f40: 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64  non-native build
8f50: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..
8f60: 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69 6c  #       this wil
8f70: 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74  l be an empty st
8f80: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ring...
8f90: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
8fa0: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b    set platform [
8fb0: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d  getBuildPlatform
8fc0: 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20   $native].... 8fd0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
8fe0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
8ff0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
9000: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
9010: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
9020: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
9030: 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a  ld \"" [expr \..
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9050: 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69  {$native ? "nati 9060: 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 ve/" : ""}] [exp 9070: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt 9080: 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h \.. 9090: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20$platform]
90a0: 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67  > 0 ? [appendArg
90b0: 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a  s $platform /] : 90c0: 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 ""}]$year \..
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
90e0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   $configuration 90f0: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 "\"... "].... 9100: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 9110: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9120: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 Build the fully 9130: 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 qualified direct 9140: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 ory where the ne 9150: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 cessary.. 9160: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com 9170: 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 ponents for Syst 9180: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 em.Data.SQLite s 9190: 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d hould be found.. 91a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 91b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 91c0: 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 directory [joinB 91d0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e uildDirectory$n
91e0: 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20  ative \..
91f0: 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
9200: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d  ldBaseDirectory]
9210: 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d   $year$platform
9220: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d   $configuration] 9230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 9240: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 9250: 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 NOTE: Do the ne 9260: 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78 cessary files ex 9270: 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c ist? Currently, 9280: 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d no other steps. 9290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # 92a0: 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74 are taken t 92b0: 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62 75 o verify this bu 92c0: 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20 ild is actually 92d0: 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 viable... 92e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 92f0: 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 if {[isBuild 9300: 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 Available$nativ
9310: 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74  e $directory]} t 9320: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 9330: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9340: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 # NOTE: Wh 9350: 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d en in "select" m 9360: 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c ode, automatical 9370: 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 ly select the fi 9380: 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rst.. 9390: 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c # avail 93a0: 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79 able build of Sy 93b0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 93c0: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e and then return 93d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 93e0: 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74 # immediat 93f0: 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ely... 9400: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 9410: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 if {$select
9420: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e   && [matchMachin
9430: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  e $platform]} th 9440: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9450: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9460: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 9470: 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 Manually overri 9480: 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 de all the build 9490: 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 directory selec 94a0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 tion.. 94b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 94c0: 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69 lated test setti 94d0: 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 ngs in order to 94e0: 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 force this build 94f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9500: 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 # of Sys 9510: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 9520: 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 to be used... 9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9550: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e object invoke In 9560: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 9570: 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 ive [expr {$nati
9580: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ve ? \..
9590: 20 20 20 20 20 20 20 20 20 20 20 20 22 41 64 64              "Add
95a0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a  RuntimeOption" :
95b0: 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f   "RemoveRuntimeO
95c0: 70 74 69 6f 6e 22 7d 5d 20 20 6e 61 74 69 76 65  ption"}]  native
95d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
95e0: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79      set ::test_y
95f0: 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20  ear $year.. 9600: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a set : 9610: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 :test_platform$
9620: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
9630: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
9640: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
9650: 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  on $configuratio 9660: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n.... 9670: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
9680: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
9690: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
96a0: 20 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c         "yes, sel
96b0: 65 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b  ected (" [expr {
96c0: 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76  $native ? "nativ 96d0: 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 e/" : ""}] \.. 96e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 96f0: 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 [expr {[string 9700: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
9710: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64  m] > 0 ? [append
9720: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
9730: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61              $pla 9740: 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 tform /] : ""}] 9750: 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75$year / $configu 9760: 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d ration ")\n"]... 9770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 9780: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. 9790: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 97a0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 97b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
97c0: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20  nnel yes\n..
97d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
97e0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
97f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
9800: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 9810: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 no\n.. 9820: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 9830: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 9840: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 9850: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. 9860: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 9870: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c heckForSQLiteRel 9880: 65 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 eases { channel 9890: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d {select false} } 98a0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 98b0: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 98c0: 20 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 for past releas 98d0: 65 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 es of System.Dat 98e0: 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 a.SQLite in the 98f0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 9900: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e # contain 9910: 65 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 ed in the "Syste 9920: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 m.Data.SQLite" e 9930: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 nvironment varia 9940: 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 ble, if.. # 9950: 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d present.. 9960: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9970: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 9980: 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 ::env(System.Da 9990: 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c ta.SQLite)] && \ 99a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 99b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e ing length$::en
99c0: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  v(System.Data.SQ
99d0: 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e  Lite)] > 0} then
99e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
99f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
9a00: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
9a10: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f  ualified directo
9a20: 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63  ry where the nec
9a30: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20  essary..
9a40: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e  #       componen
9a50: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ts for System.Da
9a60: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64  ta.SQLite should
9a70: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20   be found...
9a80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
9a90: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69  et directory [fi
9aa0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
9ab0: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
9ac0: 20 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53          $::env(S 9ad0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 9ae0: 65 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 e) [getReleaseVe 9af0: 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 rsion]]].... 9b00: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9b10: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
9b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
9b30: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
9b40: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
9b50: 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20  ite release \""
9b60: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $9b70: 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e directory "\"... 9b80: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 "].... i 9b90: 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 f {[isReleaseAva 9ba0: 69 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 ilable$director
9bb0: 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65  y platform]} the
9bc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
9bd0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
9be0: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20  h $platform] == 9bf0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 9c00: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 9c10: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 orm unknown.. 9c20: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 9c30: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 if {$selec
9c40: 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69  t && [matchMachi
9c50: 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74  ne $platform]} t 9c60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 9c70: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 set ::build_d 9c80: 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 irectory$direct
9c90: 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ory....
9ca0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 9cb0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 l [appendArgs "y 9cc0: 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 es, selected (" 9cd0: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
9ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
9cf0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
9d00: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
9d20: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 9d30: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 endArgs "yes (" 9d40: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
9d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
9d60: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
9d70: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
9d80: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. 9d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 9da0: 61 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 ach path [lsort 9db0: 2d 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c -decreasing [fil 9dc0: 65 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 e list$director
9dd0: 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20  y *]] {..
9de0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
9df0: 78 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20  xists $path] && 9e00: 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector 9e10: 79 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b y$path]} then {
9e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9e30: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 9e40: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9e60: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 9e70: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S 9e80: 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 QLite release \" 9e90: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 9ea0: 20 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22$path "\"
9eb0: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
9ec0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52          if {[isR
9ed0: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20  eleaseAvailable
9ee0: 24 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d  $path platform]} 9ef0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9f00: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st 9f10: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
9f20: 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65  tform] == 0} the
9f30: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
9f40: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
9f50: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20  orm unknown..
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9f80: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && 9f90: 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 [matchMachine$
9fa0: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
9fb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
9fc0: 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64       set ::build
9fd0: 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68  _directory $path 9fe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 9ff0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
a000: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
a010: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20   "yes, selected
a020: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c  (" $platform ")\ a030: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... a040: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return a050: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. a060: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a080: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
a090: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
a0a0: 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  s (" $platform " a0b0: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 )\n"].. a0c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. a0d0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { a0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. a0f0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
a100: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20   no\n..
a110: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
a120: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
a130: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
a140: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
a150: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch a160: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg a170: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. a180: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 "---- environme a190: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 nt variable \"Sy a1a0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a1b0: 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 \" is not " \.. a1c0: 20 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c "set, a1d0: 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 skipping check a1e0: 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c for releases...\ a1f0: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a n"].. }.... a200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal a210: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... a220: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS a230: 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 QLiteLibrary { c a240: 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 hannel } {.. a250: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
a260: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
a270: 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20  for SQLite core
a280: 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a  library... "....
a290: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
a2a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
a2b0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
a2c0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
a2d0: 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  c System.Data.SQ
a2e0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a  Lite.SQLite3 \..
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
a300: 4c 69 74 65 56 65 72 73 69 6f 6e 7d 20 76 65 72  LiteVersion} ver
a310: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
a320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
a330: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
a340: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
a350: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73  rned version was
a360: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d   null.  If so, m
a370: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20  ake it easy..
a380: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
a390: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
a3a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
a3b0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve a3c0: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the a3d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s a3e0: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. a3f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... a400: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. a410: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt a420: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo a430: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden a440: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S a450: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # a460: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr a470: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. a480: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca a490: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. a4a0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in a4b0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non a4c0: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 Public System.Da a4d0: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite a4e0: 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 3 \.. a4f0: 20 20 20 20 20 53 51 4c 69 74 65 53 6f 75 72 63 SQLiteSourc a500: 65 49 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 eId} sourceId]} a510: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a520: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # a530: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 NOTE: We failed a540: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo a550: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden a560: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 tifier... a570: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. a580: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b set sourceId unk a590: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d nown.. }. a5a0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. a5b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch a5c0: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 eck if the retur a5d0: 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 ned Fossil sourc a5e0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 e identifier was a5f0: 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 null. If.. a600: 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 # so, a610: 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 make it easy to a620: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # a630: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s a640: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f tring length$so
a650: 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68  urceId] == 0} th
a660: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
a670: 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c  set sourceId nul
a680: 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  l..        }....
a690: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a6a0: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
a6b0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
a6c0: 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20  library appears
a6d0: 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e  to be available.
a6e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
a6f0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
a700: 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20  nt SQLite....
a710: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan a720: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs a730: 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e "yes ("$version
a740: 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22   " " $sourceId " a750: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 )\n"].. } e a760: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t a770: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
a780: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..
a790: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
a7a0: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e  checkForSQLiteIn
a7b0: 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20  terop { channel
a7c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  } {..      tputs
a7d0: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- a7e0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c checking for SQL a7f0: 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 ite interop asse a800: 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 mbly... ".... a810: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. a820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f . o a830: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl a840: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 ags +NonPublic S a850: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a860: 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 e.SQLite3 \.. a870: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 Inter a880: 6f 70 56 65 72 73 69 6f 6e 7d 20 76 65 72 73 69 opVersion} versi a890: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { a8a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a8b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che a8c0: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return a8d0: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e ed version was n a8e0: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b ull. If so, mak a8f0: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 e it easy.. a900: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 # to sp a910: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ot... #.. a920: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str a930: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 ing length$vers
a940: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
a950: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
a960: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20   version null..
a970: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
a980: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
a990: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
a9a0: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
a9b0: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
a9c0: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c  fier for the SQL
a9d0: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ite..        #
a9e0: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72       core librar
a9f0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
aa00: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
aa10: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
aa20: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
aa30: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
aa40: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61  blic System.Data
aa50: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
aa60: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
aa70: 20 20 20 49 6e 74 65 72 6f 70 53 6f 75 72 63 65     InteropSource
aa80: 49 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74  Id} sourceId]} t
aa90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
aaa0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
aab0: 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20  NOTE: We failed
aac0: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73  to query the Fos
aad0: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74  sil source ident
aae0: 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ifier...
aaf0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
ab00: 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e  et sourceId unkn
ab10: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  own..        }..
ab20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
ab30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
ab40: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
ab50: 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65  ed Fossil source
ab60: 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20   identifier was
ab70: 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20  null.  If..
ab80: 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d     #       so, m
ab90: 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73  ake it easy to s
aba0: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  pot...        #.
abb0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
abc0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75  ring length $sou abd0: 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 rceId] == 0} the abe0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s abf0: 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c et sourceId null ac00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... ac10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ac20: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 # NOTE: Yes, t ac30: 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f he SQLite intero ac40: 70 20 61 73 73 65 6d 62 6c 79 20 61 70 70 65 61 p assembly appea ac50: 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 rs to be availab ac60: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. ac70: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst ac80: 72 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 raint SQLiteInte ac90: 72 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 rop.... t aca0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
acb0: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28  ppendArgs "yes (
acc0: 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24  " $version " "$
acd0: 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d  sourceId ")\n"].
ace0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
acf0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $ad00: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. ad10: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... ad20: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF ad30: 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f orSQLiteDefineCo ad40: 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c nstant { channel ad50: 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 name } {.. ad60: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
ad70: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
ad80: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
ad90: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
ada0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64  em.Data.SQLite d
adb0: 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c  efine constant \
adc0: 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  "" $name \.. add0: 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d "\"... "]. ade0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca adf0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. ae00: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo ae10: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu ae20: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 blic System.Data ae30: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 ae40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. ae50: 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 DefineConstants ae60: 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 } defineConstant ae70: 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. ae80: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 . if {[ls ae90: 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f earch -exact -no aea0: 63 61 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 case$defineCons
aeb0: 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20  tants $name] != aec0: 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 -1} then {.. aed0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. aee0: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 # NOTE: Yes, aef0: 74 68 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 this define cons af00: 74 61 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 tant was enabled af10: 20 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 when the manage af20: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 d.. # af30: 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 assembly wa af40: 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 s compiled... af50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. af60: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain af70: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 64 65 t [appendArgs de af80: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 fineConstant.Sys af90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. afa0: 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20$name]....
afb0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan afc0: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. afd0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. afe0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
aff0: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
b000: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
b010: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
b020: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72  puts $channel er b030: 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a ror\n.. }.. b040: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr b050: 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f oc getDateTimeFo b060: 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 rmat {} {.. b070: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE b080: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 : This procedure b090: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 simply returns b0a0: 74 68 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 the "default" Da b0b0: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 teTime format us b0c0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # b0d0: 20 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 by the test su b0e0: 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ite... #.. b0f0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e b100: 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 xists ::datetime b110: 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 _format] && \.. b120: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string b130: 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 length$::datet
b140: 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d  ime_format] > 0}
b150: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b160: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
b170: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d  TE: Return the m
b180: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64  anually overridd
b190: 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  en value for the
b1a0: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
b1b0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b1c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: b1d0: 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d datetime_format. b1e0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. b1f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. b200: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu b210: 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 rn an ISO8601 Da b220: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f teTime format co b230: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 mpatible with SQ b240: 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 Lite,.. # b250: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da b260: 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 ta.SQLite, and s b270: 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e uitable for roun b280: 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 d-tripping with b290: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # b2a0: 20 20 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c DateTime cl b2b0: 61 73 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 ass of the frame b2c0: 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 work. If this v b2d0: 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c alue is changed, b2e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # b2f0: 20 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 various tests b300: 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 may fail... b310: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re b320: 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64 turn "yyyy-MM-dd b330: 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 HH:mm:ss.FFFFFF b340: 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 FK".. }.. b350: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc b360: 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 enumerableToLis b370: 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d t { enumerable } b380: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 {.. set re b390: 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 sult [list].... b3a0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string b3b0: 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 length$enumera
b3c0: 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e  ble] == 0 || $en b3d0: 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c umerable eq "nul b3e0: 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 l"} then {.. b3f0: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
b400: 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  lt..      }....
b410: 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
b420: 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20  ach -alias item
b430: 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20  $enumerable {.. b440: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri b450: 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d ng length$item]
b460: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
b470: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
b480: 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f  result [$item To b490: 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 String].. b4a0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... b4b0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
b4c0: 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
b4d0: 20 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64     proc catchAnd
b4e0: 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20  Return { script
b4f0: 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73  {stackTrace fals
b500: 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d  e} {strict true}
b510: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
b520: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61       # NOTE: Eva
b530: 6c 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74  luate the script
b540: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
b550: 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72   caller in their
b560: 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20   context,..
b570: 20 23 20 20 20 20 20 20 20 63 61 70 74 75 72 69   #       capturi
b580: 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 75  ng both the resu
b590: 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 72  lt and the retur
b5a0: 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23  n code...      #
b5b0: 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65  ..      set code
b5c0: 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c   [catch {uplevel
b5d0: 20 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 75   1 $script} resu b5e0: 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a lt].... #.. b5f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 # NOTE: Di b600: 64 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f d the script pro b610: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal b620: 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e ler NOT raise an b630: 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 error?.. # b640: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 .. if {$str
b650: 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20  ict && $code == b660: 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 0 || !$strict &&
b670: 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65   $code != 1} the b680: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. b690: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: b6a0: 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e Success. Return b6b0: 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 a list with the b6c0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 return code and b6d0: 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 the result... b6e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. b6f0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 return [list$c
b700: 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20  ode $result].. b710: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 } elseif {$s
b720: 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20  tackTrace} then
b730: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
b740: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
b750: 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c  ilure.  Our call
b760: 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20  er wants a full
b770: 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 20  stack trace (if
b780: 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20  applicable),..
b790: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
b7a0: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68  turn a list with
b7b0: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
b7c0: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result
b7d0: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20  verbatim...
b7e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
b7f0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65  turn [list $code b800: 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20$result]..
b810: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
b820: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
b830: 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20  NOTE: Failure.
b840: 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20  Our caller does
b850: 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20  not want a full
b860: 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d  stack trace (if.
b870: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
b880: 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65   applicable), re
b890: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68  turn a list with
b8a0: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
b8b0: 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20  , the error..
b8c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 64       #       cod
b8d0: 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70  e for the interp
b8e0: 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65  reter, and the e
b8f0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20  rror message up
b900: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
b910: 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68  #       point wh
b920: 65 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 72  ere the stack tr
b930: 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74  ace should start
b940: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b950: 20 20 20 20 20 20 73 65 74 20 69 6e 64 65 78 20        set index
b960: 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 22 20  [string first "
b970: 20 20 61 74 20 22 20 24 72 65 73 75 6c 74 5d 3b    at " $result]; b980: 20 23 20 48 41 43 4b 3a 20 52 65 6c 69 61 62 6c # HACK: Reliabl b990: 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 e?.... re b9a0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 turn [list$code
b9b0: 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5b 65   $::errorCode [e b9c0: 78 70 72 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d xpr {$index != -
b9d0: 31 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  1 ? \..
b9e0: 20 20 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20     [string trim
b9f0: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 72  [string range $r ba00: 65 73 75 6c 74 20 30 20 24 69 6e 64 65 78 5d 5d esult 0$index]]
ba10: 20 3a 20 24 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20   : $result}]].. ba20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... ba30: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 .. proc compi ba40: 6c 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a leCSharpWith {.. ba50: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74 text ba60: 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 memory symbols ba70: 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 strict resultsVa ba80: 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e rName errorsVarN ba90: 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 ame fileNames.. baa0: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20 args bab0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. bac0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 # NOTE: Sinc bad0: 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 e we are going t bae0: 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f o use this metho baf0: 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 d name a lot, as bb00: 73 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 sign it to a.. bb10: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari bb20: 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 able first... bb30: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set bb40: 61 64 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 add ReferencedAs bb50: 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a semblies.Add.... bb60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # bb70: 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 NOTE: Create th bb80: 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 e base command t bb90: 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 o evaluate and a bba0: 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 dd the property bbb0: 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 settings.. bbc0: 23 20 20 20 20 20 20 20 74 68 61 74 20 61 72 65 # that are bbd0: 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e almost always n bbe0: 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 eeded by our uni bbf0: 74 20 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 t tests (i.e. th bc00: 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 e System.. bc10: 23 20 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 # and Syst bc20: 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 em.Data assembly bc30: 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 references)... bc40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se bc50: 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 t command [list bc60: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d \.. com bc70: 70 69 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 pileCSharp$text
bc80: 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c   $memory$symbol
bc90: 73 20 24 73 74 72 69 63 74 20 72 65 73 75 6c 74  s $strict result bca0: 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 s errors \.. bcb0: 20 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65$add Syste
bcc0: 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65  m.dll $add Syste bcd0: 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 m.Data.dll$add
bce0: 53 79 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69  System.Transacti
bcf0: 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20  ons.dll \..
bd00: 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d       $add System bd10: 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 .Xml.dll].... bd20: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO bd30: 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 TE: Add all the bd40: 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 provided file na bd50: 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 mes as assembly bd60: 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 references... bd70: 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 #.. fore bd80: 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 ach fileName$fi
bd90: 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
bda0: 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61     lappend comma
bdb0: 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61  nd $add [getBina bdc0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
bdd0: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  Name]..      }..
bde0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
bdf0: 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65   # NOTE: Add the
be00: 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73   extra arguments
be10: 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65  , if any, to the
be20: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c   command to eval
be30: 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uate...      #..
be40: 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
be50: 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73  nd command $args be60: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. be70: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 # NOTE: Alias be80: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f the compiler lo be90: 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 cal results and bea0: 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 errors variables beb0: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 to the.. # bec0: 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 variable bed0: 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 names provided b bee0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... bef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 #.. up bf00: 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 56 61 var 1$resultsVa
bf10: 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20  rName results..
bf20: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 65 72       upvar 1 $er bf30: 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f rorsVarName erro bf40: 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 rs.... #.. bf50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 # NOTE: Eva bf60: 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74 72 luate the constr bf70: 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53 ucted [compileCS bf80: 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e harp] command an bf90: 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20 20 d return the.. bfa0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 # resu bfb0: 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 lt... #.. bfc0: 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e eval$comman
bfd0: 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  d..    }.....
bfe0: 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62   proc isMemoryDb
bff0: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d   { fileName } {.
c000: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
c010: 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 73  # NOTE: Is the s
c020: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
c030: 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c  e file name real
c040: 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  ly an in-memory
c050: 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 20  database?..
c060: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
c070: 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d   [expr {$fileNam c080: 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 e eq ":memory:" c090: 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. c0a0: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 66 [string range$f
c0b0: 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 71  ileName 0 12] eq
c0c0: 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22   "file::memory:"
c0d0: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  }]..    }.....
c0e0: 20 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 6e    proc isTableIn
c0f0: 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e 61  Db { name {varNa
c100: 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20  me db} } {..
c110: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
c120: 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20  E: Refer to the
c130: 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62  specified variab
c140: 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69  le (e.g. "db") i
c150: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
c160: 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20   our..      #
c170: 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20      caller.  It
c180: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74  contains the dat
c190: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
c1a0: 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c   handle that wil
c1b0: 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20  l be..      #
c1c0: 20 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 63      used to exec
c1d0: 75 74 65 20 74 68 65 20 71 75 65 72 79 20 75 73  ute the query us
c1e0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine
c1f0: 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  if the named tab
c200: 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20  le is..      #
c210: 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20       present in
c220: 74 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d 0a  that database...
c230: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
c240: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName c250: 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. c260: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 78 65 # NOTE: Exe c270: 63 75 74 65 20 74 68 65 20 53 51 4c 20 71 75 65 cute the SQL que c280: 72 79 20 61 67 61 69 6e 73 74 20 74 68 65 20 73 ry against the s c290: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 qlite_master tab c2a0: 6c 65 20 74 6f 20 63 68 65 63 6b 20 69 66 0d 0a le to check if.. c2b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th c2c0: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 e named table is c2d0: 20 70 72 65 73 65 6e 74 20 61 6e 64 20 72 65 74 present and ret c2e0: 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 urn non-zero if c2f0: 69 74 20 69 73 2e 0d 0a 20 20 20 20 20 20 23 0d it is... #. c300: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 . return [e c310: 78 70 72 20 7b 5b 73 71 6c 20 65 78 65 63 75 74 xpr {[sql execut c320: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 e -execute scala c330: 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 r$db \..
c340: 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54     "SELECT COUNT
c350: 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  (*) FROM sqlite_
c360: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
c370: 65 20 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20  e = 'table' AND
c380: 6e 61 6d 65 20 3d 20 3f 3b 22 20 5c 0d 0a 20 20  name = ?;" \..
c390: 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61          [list pa
c3a0: 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 6d  ram1 String $nam c3b0: 65 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d e]] > 0}].. } c3c0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr c3d0: 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d imSql { sql } {. c3e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 . return [r c3f0: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c egsub -all -- {\ c400: 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d s+} [string trim c410: 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20$sql] " "]..
c420: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
c430: 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c  executeSql { sql
c440: 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20   {execute none}
c450: 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20  {fileName ""} }
c460: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  {..      if {[st
c470: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c  ring length $fil c480: 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 eName] == 0} the c490: 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 n {set fileName c4a0: 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 :memory:}.. c4b0: 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 setupDb$fileNa
c4c0: 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
c4d0: 22 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61  " false false fa
c4e0: 6c 73 65 20 66 61 6c 73 65 20 6d 65 6d 44 62 0d  lse false memDb.
c4f0: 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  ...      try {..
c500: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
c510: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
c520: 63 75 74 65 20 24 65 78 65 63 75 74 65 20 24 6d  cute $execute$m
c530: 65 6d 44 62 20 24 73 71 6c 5d 0d 0a 20 20 20 20  emDb $sql].. c540: 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 } finally {.. c550: 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 cleanupDb c560: 20 24 66 69 6c 65 4e 61 6d 65 20 6d 65 6d 44 62$fileName memDb
c570: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..
c580: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
c590: 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44  .    proc setupD
c5a0: 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b {..
c5b0: 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20   fileName {mode
c5c0: 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72  ""} {dateTimeFor
c5d0: 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d  mat ""} {dateTim
c5e0: 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73  eKind ""} {flags
c5f0: 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   ""}..
c600: 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75    {extra ""} {qu
c610: 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c  alify true} {del
c620: 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66  ete true} {uri f
c630: 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20  alse}..
c640: 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72     {temporary tr
c650: 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d  ue} {varName db}
c660: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
c670: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72       # NOTE: Fir
c680: 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63  st, see if our c
c690: 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73  aller has reques
c6a0: 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  ted an in-memory
c6b0: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
c6c0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69    #..      set i
c6d0: 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72  sMemory [isMemor
c6e0: 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  yDb $fileName].. c6f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. c700: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 # NOTE: For now c710: 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 , all test datab c720: 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65 ases used by the c730: 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20 test suite are c740: 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 placed.. # c750: 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 into the d c760: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 atabase director c770: 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73 y. Each databas c780: 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 e and related fi c790: 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 les.. # c7a0: 20 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73 used by a tes c7b0: 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 t should be clea c7c0: 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74 ned up by that t c7d0: 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 est using the.. c7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c # "cl c7f0: 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 eanupDb" procedu c800: 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 re, below... c810: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! c820: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75$isMemory && $qu c830: 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 alify} then {.. c840: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN c850: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ c860: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 getDatabaseDirec c870: 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c tory] [file tail c880: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20$fileName]]..
c890: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
c8a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
c8b0: 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65  By default, dele
c8c0: 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74  te any pre-exist
c8d0: 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74  ing database wit
c8e0: 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d  h the same file.
c8f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
c900: 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e  ame if it curren
c910: 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20  tly exists...
c920: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
c930: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64  !$isMemory &&$d
c940: 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65  elete && [file e
c950: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] c960: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c970: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N c980: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to c990: 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 delete any pre-e c9a0: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 xisting database c9b0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 with the same f c9c0: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ile.. # c9d0: 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 name... c9e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i c9f0: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 f {[catch {file ca00: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
ca10: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
ca20: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
ca30: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
ca40: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
ca50: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  ed to delete the
ca60: 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68   file, report wh
ca70: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  y...          #.
ca80: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
ca90: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel caa0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= cac0: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai cad0: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 led to delete da cae0: 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" caf0: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
cb00: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
cb10: 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72  uring setup, err
cb20: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro cb30: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d r \n].. } cb40: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cb50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO cb60: 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the cb70: 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia cb80: 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") cb90: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o cba0: 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # cbb0: 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 caller. Th cbc0: 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 e handle to the cbd0: 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 opened database cbe0: 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 will be stored t cbf0: 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. cc00: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
cc10: 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
cc20: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
cc30: 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69  TE: Start buildi
cc40: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
cc50: 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f  n string.  The o
cc60: 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f 72  nly required por
cc70: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
cc80: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
cc90: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20  ction string is
cca0: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c  the data source,
ccb0: 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains
ccc0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
ccd0: 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65     database file
cce0: 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49   name itself.  I
ccf0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e  f our caller wan
cd00: 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 20  ts to use a URI
cd10: 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  as..      #
cd20: 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63    the data sourc
cd30: 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55  e, use the FullU
cd40: 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  ri connection st
cd50: 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f  ring property to
cd60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
cd70: 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 61  prevent the data
cd80: 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66   source string f
cd90: 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65  rom being mangle
cda0: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
cdb0: 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65     if {$uri} the cdc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set cdd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c connection {Ful cde0: 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d lUri=${fileName}
cdf0: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
ce00: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
ce10: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20  onnection {Data
ce20: 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d  Source=${fileNam ce30: 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e}}.. }.... ce40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # ce50: 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 NOTE: Since thi ce60: 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 s procedure has ce70: 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c no special knowl ce80: 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 edge of what the ce90: 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 default.. cea0: 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 # setting ceb0: 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c is for the ToFul cec0: 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e lPath connection ced0: 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c string propery, cee0: 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 always.. # cef0: 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20 76 add the v cf00: 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f alue we know abo cf10: 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 ut to the connec cf20: 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 tion string... cf30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 #.. app cf40: 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { cf50: 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 ;ToFullPath=${qu
cf60: 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20  alify}}....
cf70: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
cf80: 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
cf90: 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72  specified a jour
cfa0: 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68  nal mode, add th
cfb0: 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74  e necessary port
cfc0: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
cfd0: 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
cfe0: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
cff0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
d000: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
d010: 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20  gth $mode] > 0} d020: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. d030: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f append connectio d040: 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 n {;Journal Mode d050: 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 =${mode}}..
d060: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
d070: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
d080: 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
d090: 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 20  fied a DateTime
d0a0: 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20  format, add the
d0b0: 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20  necessary..
d0c0: 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e   #       portion
d0d0: 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
d0e0: 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
d0f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
d100: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
d110: 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  h $dateTimeForma d120: 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. d130: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c d140: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 onnection {;Date d150: 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 TimeFormat=${dat
d160: 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20  eTimeFormat}}..
d170: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
d180: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
d190: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
d1a0: 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
d1b0: 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65  imeKind, add the
d1c0: 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
d1d0: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
d1e0: 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
d1f0: 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
d200: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d210: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
d220: 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64  th $dateTimeKind d230: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. d240: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co d250: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 nnection {;DateT d260: 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 imeKind=${dateTi
d270: 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20  meKind}}..
d280: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
d290: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
d2a0: 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c 6f  here are any glo
d2b0: 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 75  bal (per test ru
d2c0: 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  n) connection fl
d2d0: 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20  ags currently..
d2e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74       #       set
d2f0: 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 28  , use them now (
d300: 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 6e  i.e. by combinin
d310: 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 20  g them with the
d320: 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a 20  ones for this..
d330: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
d340: 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20  nection)...
d350: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
d360: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6e  nfo exists ::con
d370: 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 26  nection_flags] &
d380: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
d390: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: d3a0: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag d3b0: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a s] > 0} then {.. d3c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d3d0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show d3e0: 28 61 6e 64 20 6c 6f 67 29 20 74 68 61 74 20 77 (and log) that w d3f0: 65 20 64 65 74 65 63 74 65 64 20 73 6f 6d 65 20 e detected some d400: 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f global connectio d410: 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 n flags... d420: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu d430: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
d440: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
d450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
d460: 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65  --- global conne
d470: 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 65  ction flags dete
d480: 63 74 65 64 3a 20 22 20 24 3a 3a 63 6f 6e 6e 65  cted: " $::conne d490: 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 6e 5d 0d ction_flags \n]. d4a0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d4b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co d4c0: 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 mbine and/or rep d4d0: 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 lace the connect d4e0: 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 ion flags and th d4f0: 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 en show the.. d500: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 # new d510: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 value... d520: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set d530: 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c flags [combineFl d540: 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f ags$flags $::co d550: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d nnection_flags]. d560: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs d570: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
d580: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
d590: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
d5a0: 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65  - combined conne
d5b0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a  ction flags are:
d5c0: 20 22 20 24 66 6c 61 67 73 20 5c 6e 5d 0d 0a 20   " $flags \n].. d5d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... d5e0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: d5f0: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s d600: 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 pecified some SQ d610: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c LiteConnectionFl d620: 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 ags, add the.. d630: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 # nece d640: 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 ssary portion of d650: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection d660: 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... d670: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { d680: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
d690: 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e  flags] > 0} then
d6a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
d6b0: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
d6c0: 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d  Flags=${flags}}. d6d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... d6e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d6f0: 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller d700: 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 specified an ex d710: 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 tra payload to t d720: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 he connection.. d730: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 # str d740: 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e ing, append it n d750: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. d760: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string d770: 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e length$extra] >
d780: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
d790: 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
d7a0: 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d  ction \; $extra. d7b0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... d7c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT d7d0: 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 E: Open the data d7e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection d7f0: 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 now, placing the d800: 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 opaque handle v d810: 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 alue.. # d820: 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 into the var d830: 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 iable specified d840: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... d850: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s d860: 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 et db [sql open d870: 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 -type SQLite [su d880: 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d bst$connection]
d890: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
d8a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66      # NOTE: Conf
d8b0: 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72  igure the tempor
d8c0: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f  ary directory fo
d8d0: 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e  r the newly open
d8e0: 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ed database..
d8f0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
d900: 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73  ction now unless
d910: 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62   our caller forb
d920: 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23  ids it...      #
d930: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d  ..      if {$tem d940: 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f porary && ![info d950: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 exists ::no(set d960: 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f TemporaryDirecto d970: 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ry)]} then {.. d980: 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 sql execut d990: 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 e$db [appendArg
d9a0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
d9b0: 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   "PRAGMA temp_st
d9c0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory =
d9d0: 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  \"" [getTemporar
d9e0: 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b  yDirectory] \"\;
d9f0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
da00: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
da10: 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75  OTE: Always retu
da20: 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  rn the connectio
da30: 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75  n handle upon su
da40: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ccess...      #.
da50: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64  .      return $d da60: 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 b.. }..... da70: 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 proc getDbConne da80: 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 ction { {varName da90: 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 db} } {.. daa0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: dab0: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp dac0: 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable dad0: 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in dae0: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o daf0: 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # db00: 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 caller. The h db10: 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 andle to the dat db20: 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 abase previously db30: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d opened via the. db40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ db50: 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 setupDb] procedu db60: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f re should be sto db70: 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 red there... db80: 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar db90: 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
dba0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
dbb0: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65   # NOTE: This re
dbc0: 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45  turns the ADO.NE
dbd0: 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  T IDbConnection
dbe0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance
dbf0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23  for the..      #
dc00: 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64         specified
dc10: 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e   databse handle.
dc20: 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20    Since getting
dc30: 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69  this object reli
dc40: 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23  es upon..      #
dc50: 20 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74         Eagle int
dc60: 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61  ernals, great ca
dc70: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b  re should be tak
dc80: 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70  en to avoid disp
dc90: 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20  osing of..
dca0: 23 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a  #       this obj
dcb0: 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65  ect or otherwise
dcc0: 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f   putting it into
dcd0: 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74   an invalid stat
dce0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
dcf0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
dd00: 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d  sts db]} then {.
dd10: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
dd20: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
dd30: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
dd40: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
dd50: 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c  Public -objectfl
dd60: 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 5c  ags +NoDispose \
dd70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
dd80: 20 20 2d 61 6c 69 61 73 20 49 6e 74 65 72 70 72    -alias Interpr
dd90: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63  eter.GetActive.c
dda0: 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20  onnections Item
ddb0: 24 64 62 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20  $db} \.. ddc0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 result] ddd0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. dde0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ddf0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 # NOTE: Suc de00: 63 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 cess, return the de10: 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 opaque object h de20: 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... de30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 #.. r de40: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
de50: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
de60: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
de70: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
de80: 46 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20  Failure, report
de90: 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  why...
dea0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  #..          tpu
deb0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann dec0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ ded0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. dee0: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f def0: 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e ailed to get con df00: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 nection handle f df10: 6f 72 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 or database \"" df20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. df30: 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a$db "\", error:
df40: 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result df50: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. df60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. df70: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 ... proc free df80: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b DbConnection { { df90: 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 varName connecti dfa0: 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 on} } {.. # dfb0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: dfc0: 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe dfd0: 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable dfe0: 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f (e.g. "connectio dff0: 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 n") in the.. e000: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 # contex e010: 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e t of our caller. e020: 20 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a The opaque obj e030: 65 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 ect handle for a e040: 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 n ADO.NET.. e050: 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 # connect e060: 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 ion previously r e070: 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 eturned by [getD e080: 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f bConnection] sho e090: 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 uld be.. # e0a0: 20 20 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 stored the e0b0: 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. e0c0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
e0d0: 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  Name connection.
e0e0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e0f0: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
e100: 74 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20  t to remove the
e110: 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61  opaque object ha
e120: 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e  ndle from the in
e130: 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20  terpreter..
e140: 20 23 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54   #       now.  T
e150: 68 69 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70  his [object disp
e160: 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e  ose] call will n
e170: 6f 74 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70  ot actually disp
e180: 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ose of the..
e190: 20 20 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c    #       underl
e1a0: 79 69 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61  ying object beca
e1b0: 75 73 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f  use the +NoDispo
e1c0: 73 65 20 66 6c 61 67 20 77 61 73 20 73 65 74 20  se flag was set
e1d0: 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20  on it..      #
e1e0: 20 20 20 20 20 64 75 72 69 6e 67 20 63 72 65 61       during crea
e1f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71  tion of the opaq
e200: 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65  ue object handle
e210: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e220: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
e230: 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26  ts connection] &
e240: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
e250: 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69  catch {object di
e260: 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f  spose $connectio e270: 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 n} error]} then e280: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. e290: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We e2a0: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed e2b0: 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 to remove the ha e2c0: 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 ndle, report why e2d0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. e2e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
e2f0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
e300: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e310: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
e320: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
e330: 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f  remove connectio
e340: 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f  n handle \"" $co e350: 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 nnection \.. e360: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 "\", err e370: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
e380: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  r \n]..      }..
e390: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
e3a0: 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69  oc addDbConnecti
e3b0: 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  on { connection
e3c0: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b  {varName db} } {
e3d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e3e0: 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
e3f0: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
e400: 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
e410: 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
e420: 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
e430: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
e440: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
e450: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa e460: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # e470: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e480: 43 72 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 Create a correct e490: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d ly formatted nam e4a0: 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 e for the databa e4b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f se connection to e4c0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # e4d0: 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 be added to the e4e0: 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 list managed by e4f0: 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 the Eagle interp e500: 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d reter... #. e510: 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f . set db [o e520: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl e530: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ e540: 0d 0a 20 20 20 20 20 20 20 20 20 20 45 61 67 6c .. Eagl e550: 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 e._Components.Pr e560: 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 ivate.FormatOps e570: 44 61 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 DatabaseObjectNa e580: 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c me$connection \
e590: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
e5a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62  teConnection [ob
e5b0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
e5c0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
e5d0: 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20  e NextId]]....
e5e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
e5f0: 4f 54 45 3a 20 41 64 64 20 74 68 65 20 64 61 74  OTE: Add the dat
e600: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e610: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
e620: 20 63 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c   caller to the l
e630: 69 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ist..      #
e640: 20 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77     of those know
e650: 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69  n to the Eagle i
e660: 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
e670: 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65     #..      obje
e680: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
e690: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65   +NonPublic Inte
e6a0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
e6b0: 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64  e.connections Ad
e6c0: 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24  d \..          $e6d0: 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a db$connection..
e6e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
e6f0: 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66  oc cleanupDb { f
e700: 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65  ileName {varName
e710: 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72   db} {collect tr
e720: 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75  ue} {qualify tru
e730: 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e}..
e740: 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65           {delete
e750: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
e760: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e770: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
e780: 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20  rce all pending
e790: 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74  "garbage" object
e7a0: 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65  s to be collecte
e7b0: 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  d,..      #
e7c0: 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69    including SQLi
e7d0: 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  te statements an
e7e0: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73  d backup objects
e7f0: 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  ; this should al
e800: 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20  low..      #
e810: 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e     the underlyin
e820: 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  g database file
e830: 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a  to be deleted...
e840: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
e850: 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65  f {$collect} the e860: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c n {.. col e870: 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 lectGarbage$::t
e880: 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
e890: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
e8a0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
e8b0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
e8c0: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
e8d0: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
e8e0: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
e8f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e900: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e  caller.  The han
e910: 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62  dle to the datab
e920: 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  ase previously o
e930: 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20  pened via the..
e940: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65       #       [se
e950: 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65  tupDb] procedure
e960: 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65   should be store
e970: 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20  d there...
e980: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
e990: 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a   $varName db.... e9a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # e9b0: 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 NOTE: Close the e9c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 connection to t e9d0: 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e he database now. e9e0: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c This should al e9f0: 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20 low us.. # ea00: 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 to delete ea10: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 the underlying d ea20: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 atabase file... ea30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if ea40: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 {[info exists d ea50: 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71 b] && [catch {sq ea60: 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 l close$db} err
ea70: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
ea80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ea90: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
eaa0: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f  ow failed to clo
eab0: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  se the database,
eac0: 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
ead0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
eae0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c eaf0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr eb00: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. eb10: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: eb20: 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 failed to close eb30: 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 database \""$d
eb40: 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20  b "\", error: "
eb50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c  \..            \
eb60: 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. eb70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... eb80: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE eb90: 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 : First, see if eba0: 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 our caller has r ebb0: 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d equested an in-m ebc0: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d emory database.. ebd0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ebe0: 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 set isMemory [is ebf0: 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 MemoryDb$fileNa
ec00: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  me]....      #..
ec10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
ec20: 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74  ild the full pat
ec30: 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  h to the databas
ec40: 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f  e file name.  Fo
ec50: 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d  r now, all test.
ec60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
ec70: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72  atabase files ar
ec80: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the
ec90: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
eca0: 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ory...      #..
ecb0: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem ecc0: 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d ory &&$qualify}
ecd0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ece0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
ecf0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
ed00: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory]
ed10: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65  [file tail $file ed20: 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d Name]].. }. ed30: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ed40: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check ed50: 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c if the file stil ed60: 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 l exists... ed70: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
ed80: 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c  isMemory && $del ed90: 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 ete && [file exi eda0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
edb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
edc0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
edd0: 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67  E: Skip deleting
ede0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files
edf0: 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73  if somebody sets
ee00: 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20   the global..
ee10: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72       #       var
ee20: 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74  iable to prevent
ee30: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
ee40: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
ee50: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
ee60: 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d  cleanupDbFile)]}
ee70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ee80: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
ee90: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
eea0: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65  to delete the te
eeb0: 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  st database file
eec0: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20   now...
eed0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
eee0: 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74   {[set code [cat
eef0: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete
ef00: 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72  $fileName} error ef10: 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. ef20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ef30: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W ef40: 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 e somehow failed ef50: 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 to delete the f ef60: 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ile, report why. ef70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. ef80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu ef90: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
efa0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
efb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
efc0: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
efd0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
efe0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file
eff0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. f000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . f010: 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea f020: 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e nup, error: " \n f030: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
f040: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
f050: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
f060: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f070: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
f080: 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65  w that we skippe
f090: 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66  d deleting the f
f0a0: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...
f0b0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
f0c0: 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20   code 0....
f0d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te f0e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe f0f0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. f100: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA f110: 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 RNING: skipped d f120: 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 eleting database f130: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
f140: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
f150: 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20       "\" during
f160: 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20  cleanup\n"]..
f170: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
f180: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
f190: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
f1a0: 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73  E: The file does
f1b0: 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63   not exist, succ
f1c0: 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d  ess!..        #.
f1d0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64  .        set cod
f1e0: 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e 0..      }....
f1f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f        return $co f200: 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 de.. }..... f210: 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 49 6e proc setupDbIn f220: 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 terruptCallback f230: 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 { channel log } f240: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 {.. tputs$
f250: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65  channel "---- se
f260: 74 74 69 6e 67 20 75 70 20 64 65 62 75 67 67 65  tting up debugge
f270: 72 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c  r interrupt call
f280: 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  back... "....
f290: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
f2a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f2b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65      # NOTE: Make
f2c0: 20 73 75 72 65 20 74 68 65 20 73 63 72 69 70 74   sure the script
f2d0: 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 74 68   debugger and th
f2e0: 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72  e isolated inter
f2f0: 70 72 65 74 65 72 20 61 72 65 0d 0a 20 20 20 20  preter are..
f300: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 75      #       setu
f310: 70 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20  p and ready for
f320: 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  use...        #.
f330: 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 73  .        debug s
f340: 65 74 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a  etup true true..
f350: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f360: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61       # NOTE: Loa
f370: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
f380: 70 61 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68  packages into th
f390: 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72  e isolated inter
f3a0: 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  preter...
f3b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75   #..        debu
f3c0: 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20  g eval {..
f3d0: 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
f3e0: 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  ire Eagle..
f3f0: 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
f400: 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61  uire Eagle.Libra
f410: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61  ry..          pa
f420: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
f430: 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20  gle.Test..
f440: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
f450: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f460: 3a 20 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73  : Copy the neces
f470: 73 61 72 79 20 76 61 72 69 61 62 6c 65 73 20 69  sary variables i
f480: 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64  nto the isolated
f490: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
f4a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f4b0: 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30    debug invoke 0
f4c0: 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e   set ::test_chan
f4d0: 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20  nel $channel; # f4e0: 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 NOTE: For [tputs f4f0: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 ]... debu f500: 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a g invoke 0 set : f510: 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 :test_log$log;
f520: 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f  # NOTE: For [tlo
f530: 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  g].....        #
f540: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f550: 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61  : Install the ca
f560: 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f  llback script to
f570: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e   be evaluated in
f580: 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20   the isolated..
f590: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
f5a0: 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 6e 20  nterpreter when
f5b0: 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72  this interpreter
f5c0: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 20   is interrupted
f5d0: 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20  by script..
f5e0: 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 63 65     #       cance
f5f0: 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20  llation, etc...
f600: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f610: 20 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b    debug callback
f620: 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20   apply {{sender
f630: 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  e} {..
f640: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
f650: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
f660: 69 73 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f  is callback is o
f670: 6e 65 20 74 68 61 74 20 77 65 20 63 61 72 65 20  ne that we care
f680: 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 20  about...
f690: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
f6a0: 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e  f {"Canceled" in
f6b0: 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65   [split [$e Inte f6c0: 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d rruptType] ", "] f6d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f6e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. f6f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 # NOTE: Ite f700: 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c rate through all f710: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec f720: 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 tions known to t f730: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. f740: 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 # parent i f750: 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... f760: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f770: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f f780: 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa f790: 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ir \.. f7a0: 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e [object in f7b0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non f7c0: 50 75 62 6c 69 63 20 24 65 20 49 6e 74 65 72 70 Public$e Interp
f7d0: 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e  reter.connection
f7e0: 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  s] {..
f7f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
f800: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
f810: 65 6d 70 74 20 74 6f 20 63 61 6e 63 65 6c 20 61  empt to cancel a
f820: 6e 79 20 53 51 4c 20 71 75 65 72 69 65 73 20 69  ny SQL queries i
f830: 6e 20 70 72 6f 67 72 65 73 73 20 6f 6e 20 74 68  n progress on th
f840: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..
f850: 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61    #       databa
f860: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
f880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
f890: 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72  f {[catch {$pair f8a0: 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 Value.Cancel} e f8b0: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t f8d0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
f8e0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
f8f0: 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   \n \..
f900: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
f910: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
f920: 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79   to cancel query
f930: 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   for connection
f940: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
f950: 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69             [$pai f960: 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f r Key] "\", erro f970: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
f980: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
f990: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
f9a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
f9b0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20  }..        }}..
f9c0: 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d       } error] ==
f9d0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
f9e0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
f9f0: 74 20 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62  t interruptCallb
fa00: 61 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20  ack.sqlite3....
fa10: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch fa20: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 annel yes\n.. fa30: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. fa40: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
fa50: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
fa60: 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "no, error: " \n
fa70: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. fa80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... fa90: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e .. proc clean faa0: 75 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d upFile { fileNam fab0: 65 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d e {collect true} fac0: 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d {force false} } fad0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. fae0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem faf0: 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 pt to force all fb00: 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 pending "garbage fb10: 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 " objects to be fb20: 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 collected,.. fb30: 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ fb40: 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 ing SQLite state fb50: 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 ments and backup fb60: 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 objects; this s fb70: 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 hould allow.. fb80: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 # the u fb90: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 nderlying databa fba0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 se file to be de fbb0: 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d leted... #. fbc0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
fbd0: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
fbe0: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
fbf0: 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  age $::test_chan fc00: 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a nel.. }.... fc10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # fc20: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if fc30: 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 the file still e fc40: 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d xists... #. fc50: 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 . if {[file fc60: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
fc70: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
fc80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
fc90: 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65   NOTE: Skip dele
fca0: 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20  ting test files
fcb0: 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73  if somebody sets
fcc0: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
fcd0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
fce0: 20 20 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74        to prevent
fcf0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
fd00: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f  .        if {$fo fd10: 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 rce || ![info ex fd20: 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 ists ::no(cleanu fd30: 70 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d pFile)]} then {. fd40: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. fd50: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: fd60: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 Attempt to delet fd70: 65 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 e the test file fd80: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 now... fd90: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if fda0: 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 {[set code [catc fdb0: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 h {file delete$
fdc0: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d  fileName} error]
fdd0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
fde0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fdf0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
fe00: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20   somehow failed
fe10: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69  to delete the fi
fe20: 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d  le, report why..
fe30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
fe50: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe fe60: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . fe80: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: fe90: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete fea0: 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 test file \""$
feb0: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
fed0: 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20  during cleanup,
fee0: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e fef0: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. ff00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } ff10: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. ff20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. ff30: 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 # NOTE: Show tha ff40: 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c t we skipped del ff50: 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d eting the file.. ff60: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. ff70: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code ff80: 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0.... ff90: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
ffa0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
ffb0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
ffc0: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
ffd0: 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  : skipped deleti
ffe0: 6e 67 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22  ng test file \""
fff0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. 10000 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" 10010 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e during cleanup\n 10020 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 "].. }.. 10030 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 10040 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 10050 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 # NOTE: The fi 10060 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 le does not exis 10070 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 t, success!.. 10080 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10090 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 set code 0.. 100a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 100b0 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d urn$code..    }
100c0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f  .....    proc co
100d0 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 63  llectGarbage { c
100e0 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63  hannel {millisec
100f0 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65  onds 1000} {quie
10100 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  t true} } {..
10110 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
10120 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
10130 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66  GetTotalMemory f
10140 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d  alse} result] ==
10150 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
10160 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 10170 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10180 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10190 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
101a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
101b0 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  ---- memory in u
101c0 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 62 65  se by the CLR be
101d0 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e  fore collection.
101e0 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
101f0 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22 20        $result " 10200 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 10210 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 10220 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 10230 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
10240 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
10250 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
10260 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
10270 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20   get CLR memory
10280 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20  usage, error: "
10290 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c  \..            \
102a0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 102b0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 102c0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 102d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 102e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 102f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10300 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 ###########.... 10310 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 10320 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 NOTE: Repeatedly 10330 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c attempt to coll 10340 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 ect garbage unti 10350 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e l the allotted n 10360 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 umber.. # 10370 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 of millisec 10380 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 onds has elapsed 10390 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 . Always attemp 103a0 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 t to collect gar 103b0 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 bage.. # 103c0 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 at least onc 103d0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 103e0 20 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c set start [cl 103f0 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 ock seconds].. 10400 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 set stop [ex 10410 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d pr {$start + ($m 10420 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 illiseconds / 10 10430 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 00)}].... d 10440 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a o {.. #.. 10450 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10460 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 Attempt to force 10470 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 a full garbage 10480 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 collection now. 10490 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 Report any.. 104a0 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72 # err 104b0 6f 72 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 or that is encou 104c0 6e 74 65 72 65 64 20 69 66 20 77 65 20 66 61 69 ntered if we fai 104d0 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 l... #.. 104e0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 104f0 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke 10500 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 10510 72 79 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d ry true} error]} 10520 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10530 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10540 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
10550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
10560 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
10570 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67  iled full garbag
10580 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72  e collection, er
10590 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
105a0 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72          \n\t $er 105b0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 105c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 }.... se 105d0 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63 t now [clock sec 105e0 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20 77 onds].. } w 105f0 68 69 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 hile {$start <=
10600 24 6e 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24  $now &&$now < $10610 73 74 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 stop}.... # 10620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10660 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 ########.... 10670 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 10680 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 ject invoke GC G 10690 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 etTotalMemory fa 106a0 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 lse} result] == 106b0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 106c0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
106d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
106e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 106f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 10710 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 --- memory in us 10720 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 e by the CLR aft 10730 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e er collection... 10740 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 10750 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79$result " by
10760 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
10770 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
10780 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
10790 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 107a0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 107b0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 107c0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g 107d0 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 et CLR memory us 107e0 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d age, error: " \. 107f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c . \n\ 10800 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
10810 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
10820 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51  ..    proc getSQ
10830 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73  LiteHandleCounts
10840 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65   { channel {quie
10850 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
10860 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
10870 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  list]....      i
10880 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
10890 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
108a0 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61      defineConsta
108b0 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
108c0 51 4c 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44  QLite.COUNT_HAND
108d0 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  LE]} then {..
108e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
108f0 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68  # NOTE: Add each
10900 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
10910 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65   count to the re
10920 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20  sulting list...
10930 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10940 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b    foreach name [
10950 6c 69 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43  list connectionC
10960 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f  ount statementCo
10970 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d  unt backupCount]
10980 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
10990 74 20 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20  t value [object
109a0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
109b0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
109c0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
109d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
109e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
109f0 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20   $name].... 10a00 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
10a10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10a20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 10a30 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10a40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10a50 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 "---- critic 10a60 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 al handle count 10a70 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 \""$name "\" is
10a80 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20   " $value \n].. 10a90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 10aa0 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 10ab0 72 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 result$value..
10ac0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10ad0 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65  } elseif {!$quie 10ae0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 10af0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 10b00 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c NOTE: The actual 10b10 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 handle counts a 10b20 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 re not available 10b30 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 ; therefore, jus 10b40 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 10b50 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 return an emp 10b60 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 ty list... 10b70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 10b80 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
10b90 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  - critical handl
10ba0 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c  e counts unavail
10bb0 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d  able\n"..      }
10bc0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
10bd0 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 10be0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 .... proc shu 10bf0 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 tdownSQLite { ch 10c00 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c annel {force fal 10c10 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 se} {quiet false 10c20 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 10c30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 10c40 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c ke sure that SQL 10c50 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 10c60 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 is completely s 10c70 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a hutdown. This.. 10c80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 # is 10c90 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 used by tests t 10ca0 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 hat change confi 10cb0 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 guration options 10cc0 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 and/or those.. 10cd0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha 10ce0 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 t need to make s 10cf0 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 ure logging is i 10d00 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e nitialized (i.e. 10d10 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 just in case.. 10d20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 10d30 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 10d40 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c rary was initial 10d50 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 ized in the proc 10d60 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 ess prior to.. 10d70 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 10d80 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 SQLiteLog class 10d90 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 being able to se 10da0 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 tup its logging 10db0 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 callback)... 10dc0 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c # Normal 10dd0 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 ly, this should 10de0 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 only be performe 10df0 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c d if SQLite is l 10e00 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 oaded and.. 10e10 20 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 # ready f 10e20 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te 10e30 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 st suite... 10e40 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 #.. if {$f
10e50 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74  orce || [isSQLit
10e60 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
10e70 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
10e80 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65      # BUGFIX: Be
10e90 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65  fore calling the
10ea0 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e   native shutdown
10eb0 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20   function, make
10ec0 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20  sure both..
10ed0 20 20 20 23 20 20 20 20 20 20 20 20 20 6f 66 20     #         of
10ee0 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74  the PRAGMA relat
10ef0 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d  ed directory nam
10f00 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20  es are freed...
10f10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10f20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
10f30 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 61  Directories $cha 10f40 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 nnel true.... 10f50 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 10f60 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d {object invoke - 10f70 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 10f80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10f90 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 10fa0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 10fb0 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 10fd0 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 7d 20 lite3_shutdown} 10fe0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 10ff0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 11000 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
11010 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
11020 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 11030 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 11050 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite 11060 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 3_shutdown()... 11070 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e ok: "$result \n
11080 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
11090 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
110b0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 110c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 110d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
110e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
110f0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
11100 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68   call sqlite3_sh
11110 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f  utdown()... erro
11120 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 11130 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 11140 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 11150 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 11160 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 .. proc repor 11170 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 tSQLiteResources 11180 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 { channel {quie 11190 74 20 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 t false} {collec 111a0 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 t true} } {.. 111b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 111c0 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75 74 TE: Skip all out 111d0 70 75 74 20 69 66 20 77 65 20 61 72 65 20 72 75 put if we are ru 111e0 6e 6e 69 6e 67 20 69 6e 20 22 71 75 69 65 74 22 nning in "quiet" 111f0 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d mode... #. 11200 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 11210 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 Constraint \.. 11220 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 defi 11230 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste 11240 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e m.Data.SQLite.IN 11250 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 TEROP_VIRTUAL_TA 11260 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 BLE] && \.. 11270 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 [haveConstr 11280 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 aint \.. 11290 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 defineCons 112a0 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 tant.System.Data 112b0 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45 .SQLite.TRACK_ME 112c0 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 MORY_BYTES]} the 112d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 112e0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
112f0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
11300 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 11310 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory 11320 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 in use by SQLite 11330 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 Memory... ".. 11340 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 11350 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 11360 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 11370 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 11380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11390 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 113a0 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 ite.SQLiteMemory 113b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 113c0 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 bytesAllocat 113d0 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 ed} memory] == 0 113e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 113f0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
11400 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11410 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11420 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 11430 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
11440 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
11450 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
11460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
11470 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
11480 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
11490 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 114a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 114b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
114c0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 114d0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 114e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 114f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
11500 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
11510 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 11520 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 hannel "---- max 11530 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 imum memory in u 11540 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f se by SQLiteMemo 11550 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 ry... ".. 11560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 11570 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object 11580 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 11590 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 115b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 115c0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c 0d 0a SQLiteMemory \.. 115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 115e0 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f maximumBytesAllo 115f0 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d cated} memory] = 11600 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 11610 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
11620 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
11630 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 11640 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 11650 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
11660 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
11670 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
11680 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
11690 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
116a0 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  own....
116b0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 116c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 116d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
116e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 116f0 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 11700 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 11710 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 11720 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11730 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11740 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " 11750 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d ---- current mem 11760 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 ory in use by SQ 11770 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 Lite... ".. 11780 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 11790 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 [catch {object i 117a0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 117b0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 117c0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 117d0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 117e0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 117f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11800 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f sqlite3_memory_ 11810 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d used} memory] == 11820 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 11830 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
11840 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11850 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11860 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
11870 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
11880 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
11890 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
118a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
118b0 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74   # NOTE: Maybe t
118c0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
118d0 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69  ibrary is unavai
118e0 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20  lable?..
118f0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  #..        set m
11900 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
11910 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 11920 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 11930 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
11940 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
11950 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 11960 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 11970 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set 11980 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 result$memory;
11990 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d  # NOTE: Return m
119a0 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20  emory in-use to
119b0 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20  our caller.....
119c0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 119d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 119e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
119f0 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d   "---- maximum m
11a00 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
11a10 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20  SQLite... "..
11a20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
11a30 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
11a40 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
11a50 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
11a60 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
11a70 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
11a80 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11a90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
11aa0 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72     sqlite3_memor
11ab0 79 5f 68 69 67 68 77 61 74 65 72 20 30 7d 20 6d  y_highwater 0} m
11ac0 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
11ad0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
11ae0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11af0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 11b00 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
11b10 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 11b20 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 11b30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 11b40 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 11b50 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 11b60 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 11b70 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 11b80 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 11b90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11ba0 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 11bb0 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 11bc0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
11bd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
11be0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 11bf0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
11c00 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
11c10 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
11c20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 11c30 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 11c40 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 11c50 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 e$channel..
11c60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
11c70 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11c80 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 11c90 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
11ca0 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
11cb0 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e   use by the CLR.
11cc0 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  .. "..      }...
11cd0 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
11ce0 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
11cf0 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
11d00 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 79  ry false} memory
11d10 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
11d20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
11d30 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d  ing is integer -
11d40 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d  strict $memory]} 11d50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11d60 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11d70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11d80 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 11d90 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
11da0 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
11db0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
11dc0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
11dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
11de0 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d   memory invalid.
11df0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
11e00 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 11e20 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
11e30 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 11e40 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 11e50 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 11e60 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 11e70 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 11e80 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 11e90 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
11ea0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11eb0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11ec0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
11ed0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
11ee0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
11ef0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 11f00 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 11f10 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF 11f20 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 orSQLiteDirector 11f30 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 ies { channel {r 11f40 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d eset false} } {. 11f50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 11f60 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 11f70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e the sqlite3_win 11f80 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 11f90 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 function is ava 11fa0 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 ilable... # 11fb0 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 .. tputs$c
11fc0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
11fd0 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
11fe0 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ng for function
11ff0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
12000 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22  t_directory... "
12010 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12020 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
12030 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69  call to the 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 66 75 6e 63 74 69 6f 6e  rectory function
12060 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20   uses the..
12070 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64   #       invalid
12080 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65   value 0 for the
12090 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
120a0 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64    This code is d
120b0 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23  esigned..      #
120c0 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20         to check
120d0 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66  if calling the f
120e0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69  unction will rai
120f0 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  se an exception
12100 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20  (i.e...      #
12110 20 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20       the actual
12120 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
12130 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20  nction does not
12140 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61  matter as long a
12150 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  s no..      #
12160 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73      directory is
12170 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20   changed)...
12180 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
12190 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
121a0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
121b0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
121c0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
121d0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
121e0 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
121f0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c  eNativeMethods \
12200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12210 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
12220 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75  t_directory 0 nu
12230 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ll}] == 0} then
12240 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
12250 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61        # NOTE: Ca
12260 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  lling the sqlite
12270 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
12280 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64  ctory function d
12290 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  oes not..
122a0 20 23 20 20 20 20 20 20 20 63 61 75 73 65 20 61   #       cause a
122b0 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65  n exception; the
122c0 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20  refore, it must
122d0 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e  be available (i.
122e0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  e...        #
122f0 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20      even though
12300 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e  it should return
12310 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 72   a failure retur
12320 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a  n code in this..
12330 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
12340 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  case)...
12350 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
12360 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33  nstraint sqlite3
12370 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
12380 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tory....
12390 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y 123a0 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 es\n.... 123b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 123c0 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c E: Does our call 123d0 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 er want to reset 123e0 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 the directories 123f0 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ?.. #.. 12400 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 if {$reset
12410 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12420 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
12430 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b   # NOTE: Now mak
12440 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62  e sure the datab
12450 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72  ase and temporar
12460 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72  y directories ar
12470 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #
12480 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72       reset their
12490 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c   default values,
124a0 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65   which should be
124b0 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d   null for both..
124c0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
124d0 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c     Since the sql
124e0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
124f0 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
12500 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d  n is available,.
12510 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
12520 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20     use it...
12530 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12540 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65     for {set inde
12550 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33  x 1} {$index < 3 12560 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b } {incr index} { 12570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 12580 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 125a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 125b0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 125c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 125d0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 125e0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 125f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d NativeMethods \. 12600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 12610 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e sqlite3_win 12620 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 12630 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20 5c 0d$index null} \.
12640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
12650 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d 3d 20       result] ==
12660 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
12670 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $12680 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 12690 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 126a0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 126b0 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 all sqlite3_win3 126c0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 2_set_directory( 126d0 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 "$index \..
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c                ",
126f0 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20   null)... ok: "
12700 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 12710 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 12720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 12730 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
12740 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12760 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
12770 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
12780 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78  rectory(" $index 12790 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 127a0 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e ", null).. 127b0 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 127c0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
127d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
127e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
127f0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
12800 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
12810 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 12820 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 12830 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do 12840 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 es our caller wa 12850 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 nt to reset the 12860 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 54 68 directories? Th 12870 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 is can only.. 12880 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 # be 12890 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c performed if SQL 128a0 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e ite is loaded an 128b0 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 d ready for use 128c0 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 by the test.. 128d0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 69 # sui 128e0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te... #.. 128f0 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
12900 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 65 52  et && [isSQLiteR
12910 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  eady]} then {..
12920 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
12930 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
12940 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  w make sure the
12950 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
12960 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
12970 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  es are..
12980 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20    #       reset
12990 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61  their default va
129a0 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75  lues, which shou
129b0 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62  ld be null for b
129c0 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  oth...
129d0 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68  #       Since th
129e0 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
129f0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75  set_directory fu
12a00 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d  nction does not.
12a10 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
12a20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 65 20     appear to be
12a30 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 74  available, use t
12a40 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 50 52  he associated PR
12a50 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20  AGMA commands..
12a60 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
12a70 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20   instead...
12a80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12a90 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74    foreach direct
12aa0 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73  ory [list data_s
12ab0 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74  tore_directory t
12ac0 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
12ad0 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ory] {..
12ae0 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70      set sql [app
12af0 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 20  endArgs "PRAGMA
12b00 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 20 3d  " $directory " = 12b10 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 \"\";"].... 12b20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 12b30 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 ch {executeSql$
12b40 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20  sql} result] ==
12b50 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
12b60 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $12b70 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 12b80 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 12b90 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 "---- e 12ba0 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 xecute PRAGMA " 12bb0 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20$directory "...
12bc0 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ok: \"" \..
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65               $re 12be0 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 sult \"\n].. 12bf0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 12c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12c10 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
12c20 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12c40 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52  "---- execute PR
12c50 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72  AGMA " $director 12c60 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 y "... error: " 12c70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12c80 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
12c90 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
12ca0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
12cb0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
12cc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
12cd0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
12ce0 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68  Finally, show th
12cf0 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value
12d00 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
12d10 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20  and temporary..
12d20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
12d30 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20  ectories.  This
12d40 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66  can only be perf
12d50 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20  ormed if SQLite
12d60 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20  is loaded..
12d70 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61   #       and rea
12d80 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
12d90 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
12da0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
12db0 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79   {[isSQLiteReady
12dc0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12dd0 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63     foreach direc
12de0 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f  tory [list data_
12df0 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory
12e00 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
12e10 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  tory] {..
12e20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 12e30 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d l [appendArgs "- 12e40 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24 --- checking "$
12e50 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22  directory "... "
12e60 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ]....          s
12e70 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72  et sql [appendAr
12e80 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69  gs "PRAGMA " $di 12e90 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 rectory \;].... 12ea0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 12eb0 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 tch {executeSql 12ec0 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73$sql scalar} res
12ed0 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
12ee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
12ef0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 12f00 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c ppendArgs "ok: \ 12f10 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d ""$result \"\n]
12f20 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
12f30 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
12f40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12f50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 72 [appendArgs "er 12f60 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
12f70 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
12f80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
12f90 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
12fa0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61  ....    proc loa
12fb0 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69  dSQLiteTestSetti
12fc0 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73  ngs { channel {s
12fd0 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74  uffix ""} {quiet
12fe0 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
12ff0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
13000 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67  TE: Skip loading
13010 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 66   the settings if
13020 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61 73   their usage has
13030 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d   been disabled..
13040 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13050 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
13060 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73  s ::no(sqliteTes
13070 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65  tSettings)]} the
13080 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
13090 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
130a0 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d  Load custom per-
130b0 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d  user and/or per-
130c0 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e  host test settin
130d0 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  gs now...
130e0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
130f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
13100 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72  cl_platform(user
13110 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
13120 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53 65        set userSe
13130 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b  ttingsFileName [
13140 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f  file join [getCo
13150 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c  mmonDirectory] \
13160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13170 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74  [appendArgs sett
13180 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24  ings $suffix .$
13190 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75  ::tcl_platform(u
131a0 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d  ser) .eagle]]...
131b0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
131c0 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 65  file exists $use 131d0 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 131e0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 131f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
13200 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
13210 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
13220 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 13230 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13240 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 13250 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 loading per-use 13260 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 r test settings 13270 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75$u
13290 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
132a0 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20  ame \"...\n]..
132b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
132c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
132d0 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31  catch {uplevel 1
132e0 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75   [list source $u 132f0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 13300 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 ame]} \.. 13310 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err 13320 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 13330 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 13340 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
13350 20 20 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 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 133a0 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 failed to load 133b0 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67 per-user setting 133c0 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 133e0 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46$userSettingsF
133f0 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72  ileName "\", err
13400 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 13410 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 13420 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 13430 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 13440 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 13450 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
13460 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
13470 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
13480 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 13490 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 134a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 134b0 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 skipped loading 134c0 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 per-user test se 134d0 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 134e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 134f0 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e$userSettin
13500 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20  gsFileName "\",
13510 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
13520 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  t\n"]..
13530 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
13540 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
13550 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23          ########
13560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
135a0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
135b0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63  info exists ::tc
135c0 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29  l_platform(host)
135d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
135e0 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 74       set hostSet
135f0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66  tingsFileName [f
13600 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d  ile join [getCom
13610 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d  monDirectory] \.
13620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
13630 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69  appendArgs setti
13640 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a  ngs $suffix .$:
13650 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f  :tcl_platform(ho
13660 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a  st) .eagle]]....
13670 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66            if {[f
13680 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 74  ile exists $host 13690 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 136a0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 136b0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
136c0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
136d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
136e0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 136f0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 13700 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 13710 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 loading per-host 13720 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 test settings f 13730 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 13740 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f$ho
13750 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
13760 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20  me \"...\n]..
13770 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
13780 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
13790 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20  atch {uplevel 1
137a0 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f  [list source $ho 137b0 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa 137c0 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 me]} \.. 137d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro 137e0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 137f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
13800 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13820 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 13830 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13850 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 13860 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 failed to load p 13870 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 er-host settings 13880 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 138a0 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69$hostSettingsFi
138b0 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f  leName "\", erro
138c0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 138d0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 138e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 138f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 13900 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 13910 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
13920 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
13930 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $13940 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13950 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 13960 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 13970 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 kipped loading p 13980 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 13990 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 139a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 139b0 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67$hostSetting
139c0 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69  sFileName "\", i
139d0 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
139e0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
139f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
13a00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
13a10 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
13a20 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69      proc runSQLi
13a30 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b  teTestPrologue {
13a40 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
13a50 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
13a60 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73   running our cus
13a70 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20  tom prologue if
13a80 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73  the main one has
13a90 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20   been..      #
13aa0 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20       skipped...
13ab0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
13ac0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
13ad0 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61  ::no(prologue.ea
13ae0 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  gle)]} then {..
13af0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13b00 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
13b10 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74  he "before-const
13b20 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70  raints" custom p
13b30 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70  er-user and/or p
13b40 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20  er-host..
13b50 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65   #       test se
13b60 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20  ttings now...
13b70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13b80 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
13b90 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65  loadSQLiteTestSe
13ba0 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63  ttings $::test_c 13bb0 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d hannel .before]. 13bc0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 13bd0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 # NOTE: De 13be0 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 termine the name 13bf0 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 s of the native 13c00 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 platform and arc 13c10 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 13c20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 13c30 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get 13c40 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 BuildPlatform tr 13c50 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ue].. set 13c60 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 architecture [a 13c70 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c rchitectureForPl 13c80 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d atform$platform
13c90 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
13ca0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
13cb0 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72  Show the platfor
13cc0 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75  m and architectu
13cd0 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  re used to help
13ce0 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20  locate the..
13cf0 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69      #       nati
13d00 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d  ve build files..
13d10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13d20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 13d30 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 13d40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13d50 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 "---- platf 13d60 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 orm for locating 13d70 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 native build fi 13d80 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 les is \"" \.. 13d90 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
13da0 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  orm \"\n]....
13db0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 13dc0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 13dd0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 13de0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 "---- arch 13df0 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 itecture for loc 13e00 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 ating native bui 13e10 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 ld files is \"" 13e20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
13e30 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c  architecture \"\
13e40 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
13e50 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
13e60 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66   Build a list of
13e70 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
13e80 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
13e90 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
13ea0 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
13eb0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
13ec0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
13ed0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
13ee0 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d  Lite.dll.config]
13ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
13f00 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
13f10 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
13f20 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64  uxiliary Managed
13f30 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73   Debugging Assis
13f40 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20  tants (MDA)..
13f50 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
13f60 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
13f70 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
13f80 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
13f90 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66       set mdaConf
13fa0 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
13fb0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
13fc0 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d   Installer.exe.m
13fd0 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 2e 65  da.config test.e
13fe0 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d  xe.mda.config \.
13ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
14000 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f  tlinq.exe.mda.co
14010 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nfig]....
14020 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
14030 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69  TE: Build the li
14040 73 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73  st of native ass
14050 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
14060 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65   we handle.  The
14070 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
14080 20 20 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79    reason the "Sy
14090 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
140a0 2e 64 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e  .dll" file is in
140b0 63 6c 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a  cluded here is..
140c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
140d0 62 65 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64  because it could
140e0 20 62 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f   be the mixed-mo
140f0 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  de assembly...
14100 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14110 20 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e   set nativeFileN
14120 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  ames [list \..
14130 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
14140 33 2e 64 6c 6c 20 53 51 4c 69 74 65 2e 49 6e 74  3.dll SQLite.Int
14150 65 72 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e  erop.dll System.
14160 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
14170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
14180 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
14190 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66  uild the list of
141a0 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
141b0 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  y files that we
141c0 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20  handle...
141d0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
141e0 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
141f0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
14200 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
14210 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73  a.SQLite.dll Sys
14220 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
14230 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  Linq.dll]....
14240 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14250 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  # NOTE: Remove a
14260 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  ny test constrai
14270 6e 74 73 20 74 68 61 74 20 72 65 66 65 72 20 74  nts that refer t
14280 6f 20 74 68 65 20 6e 61 74 69 76 65 20 61 6e 64  o the native and
14290 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  /or..        #
142a0 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73       managed ass
142b0 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
142c0 20 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73   we handle unles
142d0 73 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d  s forbidden from
142e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
142f0 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20    doing so...
14300 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14310 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
14320 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d  s ::no(sqliteRem
14330 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  oveConstraints)]
14340 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14350 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
14360 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65  Name $configFile 14370 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 14380 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 14390 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 143a0 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
143b0 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
143c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
143d0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 143e0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 daConfigFileName 143f0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 14400 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 14410 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 14420 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
14430 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
14440 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
14450 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 14460 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 14470 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 14480 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 14490 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 ndArgs file_$fi
144a0 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
144b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
144c0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
144d0 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e  me $managedFileN 144e0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 144f0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 14500 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 14510 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 file_$fileName
14520 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
14530 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
14540 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14550 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c  # NOTE: Skip all
14560 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
14570 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65  ite related file
14580 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74   handling (delet
14590 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  ing,..        #
145a0 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61        copying, a
145b0 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69  nd loading) if i
145c0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
145d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
145e0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
145f0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65   ::no(sqliteFile
14600 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
14610 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14620 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
14630 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74   trying to delet
14640 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69  e any files if i
14650 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
14660 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14670 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
14680 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
14690 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74  SqliteFiles)]} t
146a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
146b0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
146c0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
146d0 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65  SqliteConfigFile
146e0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
146f0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
14700 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e  ch fileName $con 14710 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14730 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 tryDeleteBinaryF 14740 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 ile$fileName..
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14760 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14770 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
14780 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
14790 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
147a0 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74  NativeFiles)]} t
147b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
147c0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
147d0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
147e0 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74  teSqliteImplicit
147f0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
14800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14810 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
14820 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 14830 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 14840 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 14850 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e eAssembly$fileN
14860 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
14870 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
14880 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
14890 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
148a0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
148b0 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74  deleteSqlitePlat
148c0 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c  formFiles)] && \
148d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
148e0 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
148f0 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  th $platform] > 14900 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 14910 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 14920 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 ch fileName$nat
14930 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14950 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d    tryDeleteAssem
14960 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  bly $fileName$p
14970 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  latform..
14980 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
14990 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
149b0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
149c0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
149d0 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65  ArchitectureFile
149e0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
149f0 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
14a00 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68  ing length $arch 14a10 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 itecture] > 0} t 14a20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14a30 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 14a40 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
14a50 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14a70 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
14a80 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69  $fileName$archi
14a90 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  tecture..
14aa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
14ab0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
14ac0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
14ad0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
14ae0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
14af0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 6e  (deleteSqliteMan
14b00 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65  agedFiles)]} the
14b10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
14b20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
14b30 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65  ame $managedFile 14b40 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 14b50 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 14b60 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 teAssembly$file
14b70 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
14b80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
14b90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
14ba0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
14bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
14bc0 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68  TE: Check for th
14bd0 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72  e "autoSelect" r
14be0 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20  untime option.
14bf0 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20  If present,..
14c00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
14c10 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
14c20 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74  tically select t
14c30 68 65 20 66 69 72 73 74 20 61 76 61 69 6c 61 62  he first availab
14c40 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  le..          #
14c50 20 20 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20        build (or
14c60 22 72 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51  "release") of SQ
14c70 4c 69 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e  Lite and System.
14c80 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20  Data.SQLite..
14c90 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
14ca0 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20  or use with the
14cb0 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
14cc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14cd0 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
14ce0 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65  imeOption autoSe
14cf0 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lect]} then {..
14d00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
14d10 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42  [checkForSQLiteB
14d20 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68  uilds $::test_ch 14d30 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 annel true]} the 14d40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 14d50 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 14d60 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 eReleases$::tes
14d70 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a  t_channel true..
14d80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
14d90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
14da0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14db0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
14dc0 70 20 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69  p trying to veri
14dd0 66 79 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  fy the build dir
14de0 65 63 74 6f 72 79 20 69 66 20 69 6e 73 74 72 75  ectory if instru
14df0 63 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  cted;..
14e00 20 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69   #       otherwi
14e10 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74  se, make sure it
14e20 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73   actually exists
14e30 20 6f 72 20 68 61 6c 74 20 74 68 65 20 65 6e 74   or halt the ent
14e40 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ire..          #
14e50 20 20 20 20 20 20 20 74 65 73 74 69 6e 67 20 70         testing p
14e60 72 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f 65  rocess if it doe
14e70 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20  s not exist...
14e80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14e90 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
14ea0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69  exists ::no(veri
14eb0 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  fyBuildDirectory
14ec0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
14ed0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14ee0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
14ef0 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68  t this point, th
14f00 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
14f10 79 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 20  y MUST exist as
14f20 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  a..            #
14f30 20 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 72         valid dir
14f40 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74  ectory for the t
14f50 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74  esting process t
14f60 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20  o continue...
14f70 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
14f80 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65          set dire
14f90 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44  ctory [getBuildD
14fa0 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20  irectory]....
14fb0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66           if {![f
14fc0 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65  ile exists $dire 14fd0 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 ctory] || \.. 14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 ![f 14ff0 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 ile isdirectory 15000 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65$directory]} the
15010 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
15020 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
15030 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74      # NOTE: Just
15040 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c   prior to actual
15050 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74  ly halting the t
15060 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d  esting process,.
15070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
15080 20 20 20 20 20 20 20 61 64 64 20 61 6e 20 65 72         add an er
15090 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73 74 20  ror to the test
150a0 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  log file...
150b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
150c0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
150d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 150e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15100 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 "---- could not 15110 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 verify build di 15120 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 rectory \""$dir
15130 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
15140 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
15150 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c   all testing hal
15160 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20  ted\n"]....
15170 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
15180 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
15190 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69  : Raising a scri
151a0 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68  pt error from th
151b0 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20  is point should
151c0 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20  halt..
151d0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
151e0 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e  testing process.
151f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15200 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
15210 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
15220 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
15230 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
15240 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20  ot verify build
15250 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64  directory \"" $d 15260 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 15280 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 ", all testing h 15290 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 alted"].. 152a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 152b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 152c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 152d0 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 152e0 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 g to copy any fi 152f0 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 les if instructe 15300 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 15310 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 15320 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 15330 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 69 6c 65 o(copySqliteFile 15340 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 15350 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 15360 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 15370 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66 69 67 copySqliteConfig 15380 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 15390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 153a0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 153b0 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73$configFileNames
153c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
153d0 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64      tryCopyBuild
153e0 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  File $fileName.. 153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 15400 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 15410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 15420 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 15430 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e ::no(copySqliteN 15440 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 ativeFiles)]} th 15450 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 15460 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 15470 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 15480 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c qliteImplicitFil 15490 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 154b0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
154c0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
154d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
154e0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
154f0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  mbly $fileName.. 15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15510 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 15520 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 15530 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 15540 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 15550 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c qlitePlatformFil 15560 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 15570 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 [st 15580 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
15590 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
155a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
155b0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
155c0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 155d0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 155e0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 155f0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
15600 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  Name $platform.. 15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15620 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 15630 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 15640 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 15650 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 15660 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 qliteArchitectur 15670 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 eFiles)] && \.. 15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15690 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 156a0 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e$architecture] >
156b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
156c0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
156d0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 156e0 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 156f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 15700 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 15710 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 ly$fileName $ar 15720 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 chitecture.. 15730 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 15740 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 15750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 15760 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 15770 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 15780 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d 61 :no(copySqliteMa 15790 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 nagedFiles)]} th 157a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 157b0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 157c0 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c Name$managedFil
157d0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
157e0 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70            tryCop
157f0 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  yAssembly $fileN 15800 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 15810 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 15820 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 15830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 15840 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 15850 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 15860 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 o load any files 15870 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d if instructed.. 15880 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 15890 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 158a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 158b0 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d oadSqliteFiles)] 158c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 158d0 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 tryLoadAss 158e0 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 embly System.Dat 158f0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 a.SQLite.dll.. 15900 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 15910 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 15920 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin 15930 71 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 q.dll.... 15940 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 15950 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 exists ::no(load 15960 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 SqlitePlatformFi 15970 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 les)] && \.. 15980 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 15990 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
159a0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20  form] > 0} then
159b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
159c0 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
159d0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
159e0 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72  ite.dll $platfor 159f0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d m.. } 15a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 15a10 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 15a20 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 s ::no(loadSqlit 15a30 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c eArchitectureFil 15a40 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 15a50 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 15a60 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 ng length$archi
15a70 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68  tecture] > 0} th
15a80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
15a90 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d      tryLoadAssem
15aa0 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
15ab0 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68  SQLite.dll $arch 15ac0 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 itecture.. 15ad0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 15ae0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 15af0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 15b00 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 NOTE: Skip tryi 15b10 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 65 78 74 ng to delete ext 15b20 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 69 ernal files if i 15b30 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 15b40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15b50 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 15b60 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 15b70 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 SqliteExternalFi 15b80 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 15b90 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 15ba0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 ch fileName$mda
15bb0 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  ConfigFileNames
15bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
15bd0 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46   tryDeleteBuildF
15be0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 15bf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 15c00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 15c10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15c20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 15c30 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 trying to copy 15c40 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 external files i 15c50 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 f instructed... 15c60 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 15c70 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 15c80 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 15c90 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 ySqliteExternalF 15ca0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 15cb0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 15cc0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 15cd0 45 3a 20 43 6f 70 79 20 74 68 65 20 4d 61 6e 61 E: Copy the Mana 15ce0 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 ged Debugging As 15cf0 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 20 63 sistants (MDA) c 15d00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 onfiguration.. 15d10 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 15d20 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 file for the E 15d30 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 agle shell to th 15d40 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 e build output d 15d50 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 irectory,.. 15d60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 15d70 68 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 hile using each 15d80 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 of the names of 15d90 74 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 the various lega 15da0 63 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 cy test.. 15db0 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 65 # exe 15dc0 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 73 20 cutables. This 15dd0 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61 6b will help to mak 15de0 65 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 e sure that all 15df0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the.. 15e00 20 23 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 # legacy 15e10 74 65 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 tests run with e 15e20 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 xactly the same 15e30 73 65 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a set of Managed.. 15e40 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 15e50 20 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 Debugging As 15e60 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 sistants configu 15e70 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 red... 15e80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 15e90 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 15ea0 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 e$mdaConfigFile
15eb0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
15ec0 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69         tryCopyBi
15ed0 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68  naryFile EagleSh
15ee0 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ell.exe.mda.conf
15ef0 69 67 20 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d  ig "" $fileName. 15f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 15f10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 15f20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 15f30 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 15f40 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
15f50 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
15f60 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
15f70 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
15f80 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
15f90 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e  sqlite3.dll\"...
15fa0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
15fb0 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f      [file versio
15fc0 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
15fd0 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c  Name sqlite3.dll
15fe0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
15ff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
16000 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
16010 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 16020 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 16030 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 16040 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 16050 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74 rsion of \"SQLit 16060 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e e.Interop.dll\". 16070 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 .. " \.. 16080 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 [file vers 16090 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ion [getBinaryFi 160a0 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e leName SQLite.In 160b0 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d terop.dll]] \n]. 160c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 160d0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 160e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
160f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
16100 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
16110 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
16120 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
16130 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  f \"System.Data.
16140 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20  SQLite.dll\"...
16150 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
16160 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e     [file version
16170 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
16180 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
16190 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d  SQLite.dll]] \n]
161a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
161b0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
161c0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
161d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 161e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 16200 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 16210 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 of \"System.Data 16220 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 16230 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 \"... " \.. 16240 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 [file v 16250 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar 16260 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d yFileName System 16270 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin 16280 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 q.dll]] \n].. 16290 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 162a0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 162b0 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 ngth$platform]
162c0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
162d0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
162e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
162f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 16300 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16320 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 16330 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 ion of \""$plat
16340 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20  form \..
16350 20 20 20 20 20 20 20 20 22 2f 73 71 6c 69 74 65          "/sqlite
16360 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69  3.dll\"... " [fi
16370 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20  le version \..
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
16390 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
163a0 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 70 6c   sqlite3.dll $pl 163b0 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 atform]] \n].. 163c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 163d0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 163e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 163f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
16400 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
16410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16420 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
16430 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74  ion of \"" $plat 16440 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 form \.. 16450 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65 "/SQLite 16460 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e .Interop.dll\".. 16470 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f . " [file versio 16480 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 16490 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 [getBinaryF 164a0 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 ileName SQLite.I 164b0 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c 61 74 nterop.dll$plat
164c0 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  form]] \n]..
164d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
164e0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
164f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
16500 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 16510 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 16530 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 16540 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f n of \""$platfo
16550 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  rm \..
16560 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44        "/System.D
16570 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22  ata.SQLite.dll\"
16580 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73  ... " [file vers
16590 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
165a0 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72         [getBinar
165b0 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  yFileName System
165c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
165d0 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d   $platform]] \n] 165e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 165f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 16600 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 16610 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 length$architec
16620 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ture] > 0} then
16630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74  {..          cat
16640 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
16650 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 16660 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 16670 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 16680 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 16690 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 166a0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c$architecture \
166b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
166c0 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c    "/sqlite3.dll\
166d0 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72  "... " [file ver
166e0 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  sion \..
166f0 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61          [getBina
16700 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74  ryFileName sqlit
16710 65 33 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63  e3.dll $architec 16720 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 ture]] \n].. 16730 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 16740 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 16750 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 16760 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
16770 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16790 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
167a0 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74  n of \"" $archit 167b0 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 ecture \.. 167c0 20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69 "/SQLi 167d0 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 te.Interop.dll\" 167e0 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 ... " [file vers 167f0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 16800 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 16810 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 yFileName SQLite 16820 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 61 72 .Interop.dll$ar
16830 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d  chitecture]] \n]
16840 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
16850 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
16860 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16870 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 16880 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 16890 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 168a0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 168b0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
168c0 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a  architecture \..
168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
168e0 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  "/System.Data.SQ
168f0 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  Lite.dll\"... "
16900 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
16910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16920 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
16930 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
16940 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68  SQLite.dll $arch 16950 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a itecture]] \n].. 16960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 16970 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16980 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 set assemblies 16990 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 169a0 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e AppDomain.Curren 169b0 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d tDomain GetAssem 169c0 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 blies].... 169d0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 169e0 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d assembly$assem
169f0 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  blies {..
16a00 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d     if {[string m
16a10 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61  atch \{System.Da
16a20 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65  ta.SQLite* $asse 16a30 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mbly]} then {.. 16a40 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 16a50 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
16a60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a80 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 61 73 73 65  "---- found asse
16a90 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c  mbly: " $assembl 16aa0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 16ab0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 16ac0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 16ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 16ae0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
16af0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
16b00 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20     "---- define
16b10 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22  constants for \"
16b20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16b30 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  te\"... "....
16b40 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
16b50 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
16b60 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
16b70 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
16b80 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
16b90 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
16ba0 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  e3 DefineConstan
16bb0 74 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ts} \..
16bc0 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43           defineC
16bd0 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20  onstants] == 0}
16be0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16bf0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 16c00 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 16c10 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 dArgs [formatLis 16c20 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 t [lsort \.. 16c30 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65 66$def
16c40 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e  ineConstants] <n
16c50 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  one>] \n]..
16c60 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
16c70 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
16c80 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 16c90 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 unknown\n.. 16ca0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16cb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 16cc0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 16cd0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
16ce0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
16cf0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f          "---- so
16d00 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  urce version of
16d10 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \"System.Data.SQ
16d20 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d  Lite.dll\"... ".
16d30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
16d40 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
16d50 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
16d60 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
16d80 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
16d90 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  .SQLiteConnectio
16da0 6e 20 50 72 6f 76 69 64 65 72 56 65 72 73 69 6f  n ProviderVersio
16db0 6e 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  n} \..
16dc0 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 5d          version]
16dd0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
16de0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
16df0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 16e00 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 ersion] == 0} th 16e10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16e20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 set version 16e30 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 null.. 16e40 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 16e50 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
16e60 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
16e70 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d  gs $version \n]. 16e80 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 16e90 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 16ea0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
16eb0 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
16ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
16ed0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
16ee0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
16ef0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 16f00 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 16f20 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b --- source check 16f30 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e out of \"System. 16f40 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c Data.SQLite.dll\ 16f50 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 "... ".... 16f60 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 16f70 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 16f80 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 16f90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16fa0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 16fb0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f .SQLite.SQLiteCo 16fc0 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 nnection Provide 16fd0 72 53 6f 75 72 63 65 49 64 7d 20 5c 0d 0a 20 20 rSourceId} \.. 16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16ff0 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 sourceId] == 0} 17000 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17010 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 17020 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 length$sourceId
17030 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
17050 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d  t sourceId null.
17060 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17070 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
17080 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 17090 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 l [appendArgs$s
170a0 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20  ourceId \n]..
170b0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
170c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
170d0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 170e0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 el unknown\n.. 170f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17100 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 17110 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17120 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 E: Check the ava 17130 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 ilable builds (a 17140 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f nd "releases") o 17150 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 f SQLite and.. 17160 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 # Sy 17170 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 17180 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 17190 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 171a0 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 LiteBuilds$::te
171b0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
171c0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
171d0 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65  teReleases $::te 171e0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 171f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17200 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 # NOTE: Now, we 17210 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 need to know if 17220 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core 17230 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 library is avai 17240 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 lable.. # 17250 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 (i.e. bec 17260 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 ause the managed 17270 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 -only System.Dat 17280 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c a.SQLite assembl 17290 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 y can.. # 172a0 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 load with 172b0 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c out it; however, 172c0 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e it cannot do an 172d0 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 ything useful wi 172e0 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 thout.. # 172f0 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 it). If 17300 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 we are using the 17310 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 17320 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 mbly and we alre 17330 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ady.. # 17340 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 found it (a 17350 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 bove), this shou 17360 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 ld always succee 17370 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 17380 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 17390 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a QLiteLibrary$::
173a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
173b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
173c0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
173d0 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69   if the SQLite i
173e0 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20  nterop assembly
173f0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  is available...
17400 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17410 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
17420 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f  Interop $::test_ 17430 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 17440 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 17450 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 17460 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 SQLite database 17470 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 and temporary di 17480 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 rectories... 17490 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 174a0 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 heckForSQLiteDir 174b0 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 ectories$::test
174c0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
174d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
174e0 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
174f0 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76  o determine if v
17500 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74  arious compile-t
17510 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64  ime options need
17520 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ed for..
17530 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e  #       test con
17540 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e  straints were en
17550 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61  abled for the ma
17560 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20  naged assembly.
17570 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   There..
17580 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65  #       are some
17590 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
175a0 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20  tions that must
175b0 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65  also have been e
175c0 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nabled..
175d0 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20  #       for the
175e0 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
175f0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be
17600 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20  effective.  For
17610 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23  those..        #
17620 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20         options,
17630 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d  it will be assum
17640 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65  ed that it was e
17650 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69  nabled for the i
17660 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20  nterop..
17670 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
17680 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c   if it was enabl
17690 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67  ed for the manag
176a0 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  ed assembly...
176b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
176c0 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43   foreach defineC
176d0 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d  onstant [list \.
176e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45  .            CHE
176f0 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48  CK_STATE COUNT_H
17700 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45  ANDLE DEBUG INTE
17710 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f  ROP_CODEC INTERO
17720 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20  P_DEBUG \..
17730 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45         INTEROP_E
17740 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f  XTENSION_FUNCTIO
17750 4e 53 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43  NS INTEROP_LEGAC
17760 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f  Y_CLOSE INTEROP_
17770 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  LOG \..
17780 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f     INTEROP_TEST_
17790 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f  EXTENSION INTERO
177a0 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE
177b0 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d  NET_20 NET_35 \.
177c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54  .            NET
177d0 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34  _40 NET_45 NET_4
177e0 35 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  51 NET_COMPACT_2
177f0 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  0 PLATFORM_COMPA
17800 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20  CTFRAMEWORK \..
17810 20 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f             PRELO
17820 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52  AD_NATIVE_LIBRAR
17830 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53  Y RETARGETABLE S
17840 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c  QLITE_STANDARD \
17850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48  ..            TH
17860 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20  ROW_ON_DISPOSED
17870 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e  TRACE TRACE_CONN
17880 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e  ECTION TRACE_HAN
17890 44 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  DLE \..
178a0 20 20 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44     TRACE_PRELOAD
178b0 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52   TRACE_SHARED TR
178c0 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 52  ACE_STATEMENT TR
178d0 41 43 45 5f 57 41 52 4e 49 4e 47 20 5c 0d 0a 20  ACE_WARNING \..
178e0 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 4b             TRACK
178f0 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53  _MEMORY_BYTES US
17900 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53  E_INTEROP_DLL US
17910 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e  E_PREPARE_V2 WIN
17920 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20  DOWS] {..
17930 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
17940 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
17950 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
17960 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74  e option is list
17970 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ed in the list o
17980 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  f..          #
17990 20 20 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e       "define con
179a0 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61  stants" kept tra
179b0 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e  ck of by the man
179c0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  aged assembly...
179d0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
179e0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
179f0 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
17a00 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ant $::test_chan 17a10 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 nel$defineConst
17a20 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ant..        }..
17a30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
17a40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
17a50 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62  ck the current b
17a60 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73 69  uild year.  Basi
17a70 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 69  cally, this indi
17a80 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 23  cates..        #
17a90 20 20 20 20 20 20 20 77 68 69 63 68 20 76 65 72         which ver
17aa0 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20  sion of MSBuild
17ab0 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 74  and/or Visual St
17ac0 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 74 6f  udio was used to
17ad0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
17ae0 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73    compile the as
17af0 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20  sembly binaries
17b00 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20  under test...
17b10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17b20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 17b30 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 17b40 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 17b50 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D 17b60 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build 17b70 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 year... ".... 17b80 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b set year [ 17b90 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 getBuildYear].. 17ba0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 17bb0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 17bc0 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61 buildYear.$yea
17bd0 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  r]..        tput
17be0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 17bf0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 l [appendArgs \" 17c00 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a$year \"\n]....
17c10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17c20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
17c30 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69   the current bui
17c40 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ld configuration
17c50 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e  .  This should n
17c60 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  ormally..
17c70 20 23 20 20 20 20 20 20 20 62 65 20 65 69 74 68   #       be eith
17c80 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52  er "Debug" or "R
17c90 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20  elease"...
17ca0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
17cb0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17cc0 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 17cd0 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 17ce0 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data 17cf0 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f .SQLite build co 17d00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 nfiguration... " 17d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 17d20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 configuration [g 17d30 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 etBuildConfigura 17d40 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 tion].. a 17d50 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 17d60 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f pendArgs buildCo 17d70 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f nfiguration.$co
17d80 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20  nfiguration]..
17d90 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 17da0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 17db0 65 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 endArgs \"$conf
17dc0 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d  iguration \"\n].
17dd0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
17de0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72        # NOTE: Tr
17df0 79 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e  y to setup an in
17e00 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b  terrupt callback
17e10 20 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70   using the scrip
17e20 74 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20  t debugger..
17e30 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74      #       that
17e40 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c   will cancel all
17e50 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20   SQL queries in
17e60 70 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c  progress for all
17e70 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..
17e80 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
17e90 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20  ctions known to
17ea0 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72  this interpreter
17eb0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
17ec0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
17ed0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
17ee0 69 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c  iteInterruptCall
17ef0 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  back)]} then {..
17f00 20 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44            setupD
17f10 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61  bInterruptCallba
17f20 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ck $::test_chann 17f30 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a el$::test_log..
17f40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
17f50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17f60 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
17f70 72 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e  r the native run
17f80 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69  time option, whi
17f90 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65  ch would mean we
17fa0 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20   are..        #
17fb0 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20        using the
17fc0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
17fd0 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  bly...        #.
17fe0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
17ff0 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24  rRuntimeOption $18000 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e ::test_channel n 18010 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 ative.... 18020 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 18030 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 18040 20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 test suite shou 18050 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d ld count the num 18060 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f ber of connectio 18070 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ns.. # 18080 20 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 "opened" and 18090 20 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 "closed" from t 180a0 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 he pool when det 180b0 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 ermining if a te 180c0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 180d0 20 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 passed. Dis 180e0 61 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 abling this beha 180f0 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 vior is sometime 18100 73 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 s necessary (e.g 18110 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ... # 18120 20 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 during the re 18130 6c 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 lease testing pr 18140 6f 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 ocess) because t 18150 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c here are several 18160 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 18170 20 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c tests that rel 18180 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 y on the "opened 18190 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e from pool" coun 181a0 74 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d t being greater. 181b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 181c0 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 than zero. The 181d0 73 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 se tests may fai 181e0 6c 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e l due to the non 181f0 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a -deterministic.. 18200 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 18210 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 behavior of the 18220 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 CLR GC, even whe 18230 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 n there is no bu 18240 67 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 g in the code.. 18250 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 18260 65 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 eing tested... 18270 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18280 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 checkForRuntime 18290 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 Option$::test_c
182a0 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75  hannel noPoolCou
182b0 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nts....        #
182c0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
182d0 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73  : Report the res
182e0 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f  ource usage prio
182f0 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79  r to running any
18300 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20   tests...
18310 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f   #..        repo
18320 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65  rtSQLiteResource
18330 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 18340 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 18350 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 18360 53 68 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 Show the active 18370 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 test constraints 18380 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 18390 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
183a0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
183b0 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f  endArgs "---- co
183c0 6e 73 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a  nstraints: " \..
183d0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72              [for
183e0 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b  matList [lsort [
183f0 67 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d  getConstraints]]
18400 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a   <none>] \n]....
18410 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18420 20 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20     # NOTE: Save
18430 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61  the test constra
18440 69 6e 74 73 20 66 6f 72 20 75 73 65 20 62 79 20  ints for use by
18450 74 68 72 65 61 64 73 20 63 72 65 61 74 65 64 20  threads created
18460 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  in this..
18470 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61   #       applica
18480 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68  tion domain.  Th
18490 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  is is necessary
184a0 62 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20  because all the
184b0 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23  Eagle..        #
184c0 20 20 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e         "test con
184d0 74 65 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f  text" informatio
184e0 6e 20 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e  n is per-thread.
184f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18500 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
18510 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f  exists ::test_co
18520 6e 73 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e  nstraints]} then
18530 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
18540 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61  t ::test_constra
18550 69 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65  ints $::eagle_te 18560 73 74 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 sts(constraints) 18570 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 18580 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18590 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 # NOTE: Load t 185a0 68 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 he "after-constr 185b0 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 aints" custom pe 185c0 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 r-user and/or pe 185d0 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 r-host.. 185e0 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 # test set 185f0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 tings now... 18600 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 #.. u 18610 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c plevel 1 [list l 18620 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 oadSQLiteTestSet 18630 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 tings$::test_ch
18640 61 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d  annel .after]...
18650 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
18660 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
18670 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20   when our tests
18680 61 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28  actually began (
18690 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  now)...        #
186a0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
186b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 186c0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 186d0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 186e0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 186f0 69 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 ite tests began 18700 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 at " \.. 18710 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 [clock forma 18720 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 t [clock seconds 18730 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d ]] \n].. }. 18740 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 18750 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 roc runSQLiteTes 18760 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a tEpilogue {} {.. 18770 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 18780 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e NOTE: Skip runn 18790 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 ing our custom e 187a0 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d pilogue if the m 187b0 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e ain one has been 187c0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 187d0 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 skipped... 187e0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 187f0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 18800 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d epilogue.eagle)] 18810 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18820 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 18830 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f OTE: Show when o 18840 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c ur tests actuall 18850 79 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a y ended (now)... 18860 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18870 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
18880 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
18890 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
188a0 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d      "---- System
188b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73  .Data.SQLite tes
188c0 74 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d  ts ended at " \.
188d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c  .            [cl
188e0 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63  ock format [cloc
188f0 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d  k seconds]] \n].
18900 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
18910 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20        # BUGFIX:
18920 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20  Before checking
18930 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72  the final resour
18940 63 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51  ces in use by SQ
18950 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20  Lite, make..
18960 20 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75      #         su
18970 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50  re both of the P
18980 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69  RAGMA related di
18990 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72  rectory names ar
189a0 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20  e freed...
189b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
189c0 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63  ckForSQLiteDirec
189d0 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63  tories $::test_c 189e0 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 hannel true.... 189f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18a00 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 # NOTE: Also r 18a10 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 eport the resour 18a20 63 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72 ce usage after r 18a30 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 unning the tests 18a40 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 18a50 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 reportSQLi 18a60 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 teResources$::t
18a70 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
18a80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18a90 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74    # NOTE: Report
18aa0 20 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61   the critical ha
18ab0 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65  ndle counts afte
18ac0 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65  r running the te
18ad0 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  sts...        #.
18ae0 0a 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69  .        getSQLi
18af0 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24  teHandleCounts \$
18b00 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
18b10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
18b20 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  ...    #########
18b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b70 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
18b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b90 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20  ##### END Eagle
18ba0 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23  ONLY ###########
18bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18bc0 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23  ###..    #######
18bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c10 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23  ####..  }....  #
18c20 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65  ..  # NOTE: Save
18c30 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
18c40 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
18c50 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e  ining this file.
18c60 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69  ..  #..  if {![i
18c70 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f  nfo exists commo
18c80 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  n_directory]} th
18c90 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f  en {..    set co
18ca0 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b  mmon_directory [
18cb0 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e  file dirname [in
18cc0 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d  fo script]]..  }
18cd0 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
18ce0 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 53  E: Provide the S
18cf0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
18d00 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 20 74  e test package t
18d10 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  o the interprete
18d20 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61  r...  #..  packa
18d30 67 65 20 70 72 6f 76 69 64 65 20 53 79 73 74 65  ge provide Syste
18d40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65  m.Data.SQLite.Te
18d50 73 74 20 31 2e 30 0d 0a 7d 0d 0a                 st 1.0..}..