System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 7e02e7d37030292075dee473bed8448402ce09f4:

• File lib/System.Data.SQLite/common.eagle — part of check-in [880e608b09] at 2018-05-06 20:09:25 on branch trunk — Add preliminary support for the .NET Framework 4.7.2. Also, update the SQLite core library to the latest 3.23.2 release candidate. (user: mistachkin size: 201331)

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 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  etSQLiteDefineCo
0340: 6e 73 74 61 6e 74 50 72 65 66 69 78 20 7b 7d 20  nstantPrefix {}
0350: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0360: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0370: 20 74 68 65 20 64 65 66 69 6e 65 20 63 6f 6e 73   the define cons
0380: 74 61 6e 74 20 70 72 65 66 69 78 20 73 65 74 74  tant prefix sett
0390: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
03a0: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
03b0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
03c0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
03d0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
03e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
03f0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
0400: 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74 61 6e  ::define_constan
0410: 74 5f 70 72 65 66 69 78 5d 20 26 26 20 5c 0d 0a  t_prefix] && \..
0420: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0430: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 65 66 69  g length $::defi 0440: 6e 65 5f 63 6f 6e 73 74 61 6e 74 5f 70 72 65 66 ne_constant_pref 0450: 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ix] > 0} then {. 0460: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0470: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0480: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 65 the specified de 0490: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 fine constant pr 04a0: 65 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 efix... # 04b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 04c0: 20 24 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74$::define_const
04d0: 61 6e 74 5f 70 72 65 66 69 78 0d 0a 20 20 20 20  ant_prefix..
04e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
04f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
0500: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0510: 65 66 61 75 6c 74 20 64 65 66 69 6e 65 20 63 6f  efault define co
0520: 6e 73 74 61 6e 74 20 70 72 65 66 69 78 2e 0d 0a  nstant prefix...
0530: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
0540: 20 20 20 72 65 74 75 72 6e 20 64 65 66 69 6e 65     return define
0550: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
0560: 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
0570: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
0580: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c  .    proc getSQL
0590: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
05a0: 50 72 65 66 69 78 20 7b 7d 20 7b 0d 0a 20 20 20  Prefix {} {..
05b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
05c0: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 63  TE: See if the c
05d0: 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 70 72  ompile option pr
05e0: 65 66 69 78 20 73 65 74 74 69 6e 67 20 68 61 73  efix setting has
05f0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
0600: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
0610: 62 79 20 74 68 65 20 75 73 65 72 20 28 65 2e 67  by the user (e.g
0620: 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  . on the command
0630: 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23   line)...      #
0640: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
0650: 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 70 69  o exists ::compi
0660: 6c 65 5f 6f 70 74 69 6f 6e 5f 70 72 65 66 69 78  le_option_prefix
0670: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
0680: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
0690: 20 24 3a 3a 63 6f 6d 70 69 6c 65 5f 6f 70 74 69   $::compile_opti 06a0: 6f 6e 5f 70 72 65 66 69 78 5d 20 3e 20 30 7d 20 on_prefix] > 0} 06b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 06c0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 06d0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 06e0: 66 69 65 64 20 63 6f 6d 70 69 6c 65 20 6f 70 74 fied compile opt 06f0: 69 6f 6e 20 70 72 65 66 69 78 2e 0d 0a 20 20 20 ion prefix... 0700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 0710: 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 70 69 6c return$::compil
0720: 65 5f 6f 70 74 69 6f 6e 5f 70 72 65 66 69 78 0d  e_option_prefix.
0730: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
0740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
0750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0760: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6d 70  the default comp
0770: 69 6c 65 20 6f 70 74 69 6f 6e 20 70 72 65 66 69  ile option prefi
0780: 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  x...        #..
0790: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
07a0: 6d 70 69 6c 65 4f 70 74 69 6f 6e 2e 53 51 4c 69  mpileOption.SQLi
07b0: 74 65 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  te...      }..
07c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
07d0: 20 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e   haveSQLiteDefin
07e0: 65 43 6f 6e 73 74 61 6e 74 20 7b 20 6e 61 6d 65  eConstant { name
07f0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75   } {..      retu
0800: 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  rn [haveConstrai
0810: 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
0820: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 74  [appendArgs [get
0830: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
0840: 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61 6d  tantPrefix] $nam 0850: 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 e]].. }..... 0860: 20 20 20 70 72 6f 63 20 68 61 76 65 53 51 4c 69 proc haveSQLi 0870: 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 teCompileOption 0880: 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 { name } {.. 0890: 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f return [haveCo 08a0: 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 nstraint \.. 08b0: 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 08c0: 73 20 5b 67 65 74 53 51 4c 69 74 65 43 6f 6d 70 s [getSQLiteComp 08d0: 69 6c 65 4f 70 74 69 6f 6e 50 72 65 66 69 78 5d ileOptionPrefix] 08e0: 20 24 6e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d$name]]..    }.
08f0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
0900: 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b 0d 0a  BuildYear {} {..
0910: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0920: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68   NOTE: See if th
0930: 65 20 22 79 65 61 72 22 20 73 65 74 74 69 6e 67  e "year" setting
0940: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
0950: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72  dden by the user
0960: 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 23 20   (e.g...      #
0970: 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63 6f 6d        on the com
0980: 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69  mand line).  Thi
0990: 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20  s helps control
09a0: 65 78 61 63 74 6c 79 20 77 68 69 63 68 20 73 65  exactly which se
09b0: 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20  t of..      #
09c0: 20 20 20 20 62 69 6e 61 72 69 65 73 20 77 65 20      binaries we
09d0: 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74 68 6f  are testing, tho
09e0: 73 65 20 70 72 6f 64 75 63 65 64 20 75 73 69 6e  se produced usin
09f0: 67 20 74 68 65 20 56 69 73 75 61 6c 20 53 74 75  g the Visual Stu
0a00: 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20  dio..      #
0a10: 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c 20 32     2005, 2008, 2
0a20: 30 31 30 2c 20 32 30 31 32 2c 20 32 30 31 33 2c  010, 2012, 2013,
0a30: 20 32 30 31 35 2c 20 6f 72 20 32 30 31 37 20 62   2015, or 2017 b
0a40: 75 69 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54  uild systems.  T
0a50: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  o..      #
0a60: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 76   override this v
0a70: 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d  alue via the com
0a80: 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72  mand line, enter
0a90: 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c   a command simil
0aa0: 61 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ar..      #
0ab0: 20 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20    to one of the
0ac0: 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f  following (all o
0ad0: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20  n one line):..
0ae0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0af0: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0b00: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69  exe -anyInitiali
0b10: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0b20: 72 20 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23  r 2005"..      #
0b30: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0b40: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0b50: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0b60: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0b70: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0b80: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0b90: 73 74 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20  st_year 2008"..
0ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0bb0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0bc0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0bd0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0be0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0bf0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
0c00: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0c10: 31 30 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  10"..      #
0c20: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0c30: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0c40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0c50: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0c60: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0c70: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0c80: 65 61 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20  ear 2012"..
0c90: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0ca0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0cb0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0cc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0cd0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0ce0: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
0cf0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 33 22 0d  test_year 2013".
0d00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
0d10: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
0d20: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
0d30: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
0d40: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0d50: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0d60: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0d70: 32 30 31 35 22 0d 0a 20 20 20 20 20 20 23 20 20  2015"..      #
0d80: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0d90: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0da0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0db0: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0dc0: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0dd0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
0de0: 5f 79 65 61 72 20 32 30 31 37 22 0d 0a 20 20 20  _year 2017"..
0df0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
0e00: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
0e10: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
0e20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
0e30: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61  agleShell.exe -a
0e40: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 75 6e  nyInitialize "un
0e50: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
0e60: 74 65 73 74 5f 79 65 61 72 22 0d 0a 20 20 20 20  test_year"..
0e70: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
0e80: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
0e90: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
0ea0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
0eb0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65  exists ::test_ye
0ec0: 61 72 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c  ar] && [string l
0ed0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 0ee0: 61 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ar] > 0} then {. 0ef0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0f00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0f10: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 0f20: 73 74 20 79 65 61 72 2e 20 20 49 66 20 74 68 69 st year. If thi 0f30: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f s variable is no 0f40: 74 20 73 65 74 2c 20 74 68 65 0d 0a 20 20 20 20 t set, the.. 0f50: 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61 # defa 0f60: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b 0f70: 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 e based on wheth 0f80: 65 72 20 6f 72 20 6e 6f 74 20 45 61 67 6c 65 20 er or not Eagle 0f90: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 has been.. 0fa0: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c # compil 0fb0: 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 ed against the C 0fc0: 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 LR v2.0 or CLR v 0fd0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 4.0... #. 0fe0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 0ff0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 0d 0a 20 20$::test_year..
1000: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1010: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1020: 20 23 20 4e 4f 54 45 3a 20 49 66 20 45 61 67 6c   # NOTE: If Eagl
1030: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69  e has been compi
1040: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  led against the
1050: 43 4c 52 20 76 34 2e 30 2c 20 75 73 65 20 22 32  CLR v4.0, use "2
1060: 30 31 30 22 20 62 79 0d 0a 20 20 20 20 20 20 20  010" by..
1070: 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c 74   #       default
1080: 20 28 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22   (we could use "
1090: 32 30 31 32 22 2c 20 22 32 30 31 33 22 2c 20 22  2012", "2013", "
10a0: 32 30 31 35 22 2c 20 6f 72 20 22 32 30 31 37 22  2015", or "2017"
10b0: 20 69 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20   in that..
10c0: 20 20 23 20 20 20 20 20 20 20 63 61 73 65 20 61    #       case a
10d0: 73 20 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74  s well) as the t
10e0: 65 73 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77  est year; otherw
10f0: 69 73 65 2c 20 75 73 65 20 22 32 30 30 38 22 20  ise, use "2008"
1100: 62 79 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20  by default..
1110: 20 20 20 20 23 20 20 20 20 20 20 20 28 77 65 20      #       (we
1120: 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30 35 22  could use "2005"
1130: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73   in that case as
1140: 20 77 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74   well).  If anot
1150: 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20  her major..
1160: 20 20 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f     #       [inco
1170: 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f  mpatible] versio
1180: 6e 20 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20  n of the CLR is
1190: 72 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63  released, this c
11a0: 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20  heck will..
11b0: 20 20 20 23 20 20 20 20 20 20 20 68 61 76 65 20     #       have
11c0: 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20  to be changed.
11d0: 54 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  The default test
11e0: 20 79 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72   year to use for
11f0: 20 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   a..        #
1200: 20 20 20 20 70 61 72 74 69 63 75 6c 61 72 20 43      particular C
1210: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62  LR version may b
1220: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20  e overridden by
1230: 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62  setting the glob
1240: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  al..        #
1250: 20 20 20 20 76 61 72 69 61 62 6c 65 20 22 74 65      variable "te
1260: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22  st_year_clr_v$X" 1270: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 , where "$X" may
1280: 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d   [currently] be.
1290: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
12a0: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22   either "2" or "
12b0: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  4"...        #..
12c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76          if {[hav
12d0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67  eConstraint imag
12e0: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65  eRuntime40]} the
12f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
1300: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
1310: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f  ::test_year_clr_
1320: 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  v4] && \..
1330: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
1340: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79  length $::test_y 1350: 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d ear_clr_v4] > 0} 1360: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1370: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1380: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 1390: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 13a0: 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 st year for the 13b0: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 CLR v4.0... 13c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
13e0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34  test_year_clr_v4
13f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
1400: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1410: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1420: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
1430: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79 65   default test ye
1440: 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ar for the CLR v
1450: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  4.0...
1460: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1470: 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20   return 2010; #
1480: 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c  TODO: Good "fall
1490: 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a  back" default?..
14a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
14b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
14c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e           if {[in
14d0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
14e0: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26  _year_clr_v2] &&
14f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1500: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
1510: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c   $::test_year_cl 1520: 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20 r_v2] > 0} then 1530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 1540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 1550: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 1560: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 1570: 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 r for the CLR v2 1580: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 1590: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 15a0: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 return$::test_y
15b0: 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20  ear_clr_v2..
15c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
15e0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
15f0: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
1600: 6c 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72  lt test year for
1610: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a   the CLR v2.0...
1620: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1630: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1640: 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20  n 2008; # TODO:
1650: 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20  Good "fallback"
1660: 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20  default?..
1670: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1680: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1690: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
16a0: 74 42 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72  tBuildNativeYear
16b0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20   {} {..      if
16c0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
16d0: 74 65 73 74 5f 6e 61 74 69 76 65 5f 79 65 61 72  test_native_year
16e0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
16f0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
1700: 20 24 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f   $::test_native_ 1710: 79 65 61 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 year] > 0} then 1720: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1730: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 1740: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 1750: 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 6e 61 test year for na 1760: 74 69 76 65 20 62 69 6e 61 72 69 65 73 2e 20 20 tive binaries. 1770: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 If this.. 1780: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c # variabl 1790: 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 e is not set, th 17a0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 e value returned 17b0: 20 62 79 20 5b 67 65 74 42 75 69 6c 64 59 65 61 by [getBuildYea 17c0: 72 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 r].. # 17d0: 20 20 20 20 77 69 6c 6c 20 62 65 20 75 73 65 64 will be used 17e0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 17f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
1800: 74 65 73 74 5f 6e 61 74 69 76 65 5f 79 65 61 72  test_native_year
1810: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
1820: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1830: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c       # NOTE: Fal
1840: 6c 62 61 63 6b 20 6f 6e 20 74 68 65 20 28 6e 6f  lback on the (no
1850: 72 6d 61 6c 29 20 62 75 69 6c 64 20 79 65 61 72  rmal) build year
1860: 20 66 6f 72 20 6d 61 6e 61 67 65 64 20 62 69 6e   for managed bin
1870: 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  aries...
1880: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1890: 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d  n [getBuildYear]
18a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
18b0: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  .....    #..
18c0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
18d0: 63 65 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75  cedure is only u
18e0: 73 65 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20  sed when adding
18f0: 73 68 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e  shimmed test con
1900: 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23  straints...    #
1910: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
1920: 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d  ildClrVersion {}
1930: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   {..      if {[i
1940: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
1950: 74 5f 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e  t_clr] && [strin
1960: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 1970: 5f 63 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 _clr] > 0} then 1980: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1990: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 19a0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 19b0: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 test version for 19c0: 20 74 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68 the CLR. If th 19d0: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 is variable.. 19e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 19f0: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66 not set, the def 1a00: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 ault value will 1a10: 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 be based on whet 1a20: 68 65 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20 her or not.. 1a30: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 1a40: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 e has been compi 1a50: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 led against the 1a60: 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 CLR v2.0 or CLR 1a70: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 v4.0... # 1a80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 1a90: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20$::test_clr..
1aa0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1ab0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ac0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
1ad0: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  f Eagle has been
1ae0: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
1af0: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20  t the CLR v4.0.
1b00: 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20   If so,..
1b10: 20 23 20 20 20 20 20 20 20 6a 75 73 74 20 75 73   #       just us
1b20: 65 20 74 68 61 74 20 43 4c 52 20 76 65 72 73 69  e that CLR versi
1b30: 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20  on.  Otherwise,
1b40: 75 73 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20  use the version
1b50: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20  for the..
1b60: 20 23 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e   #       CLR v2.
1b70: 30 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d  0.  If another m
1b80: 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62  ajor [incompatib
1b90: 6c 65 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  le] version of t
1ba0: 68 65 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20  he CLR..
1bb0: 23 20 20 20 20 20 20 20 69 73 20 72 65 6c 65 61  #       is relea
1bc0: 73 65 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20  sed, this check
1bd0: 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20  will have to be
1be0: 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65  changed.  The de
1bf0: 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23  fault..        #
1c00: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76         version v
1c10: 61 6c 75 65 20 66 6f 72 20 61 20 70 61 72 74 69  alue for a parti
1c20: 63 75 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f  cular CLR versio
1c30: 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64  n may be overrid
1c40: 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  den..        #
1c50: 20 20 20 20 20 62 79 20 73 65 74 74 69 6e 67 20       by setting
1c60: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
1c70: 62 6c 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24  ble "test_clr_v$1c80: 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d X", where "$X" m
1c90: 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ay..        #
1ca0: 20 20 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20      [currently]
1cb0: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
1cc0: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
1cd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
1ce0: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
1cf0: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
1d00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d10: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1d20: 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d  s ::test_clr_v4]
1d30: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1d40: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1d50: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f  gth $::test_clr_ 1d60: 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d v4] > 0} then {. 1d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 1d80: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1d90: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1da0: 69 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69 ified test versi 1db0: 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 on for the CLR v 1dc0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 4.0... 1dd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1de0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
1df0: 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20  clr_v4..
1e00: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1e10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1e20: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55         # NOTE: U
1e30: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74  se the default t
1e40: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  est version for
1e50: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
1e60: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1e70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e80: 20 34 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f   4.0.30319; # TO
1e90: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
1ea0: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
1eb0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ec0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1ed0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
1ee0: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63   exists ::test_c
1ef0: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
1f00: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
1f10: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1f20: 74 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 t_clr_v2] > 0} t 1f30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1f50: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 1f60: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 1f70: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 version for the 1f80: 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 CLR v2.0... 1f90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1fb0: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20  :test_clr_v2..
1fc0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1ff0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
2000: 61 75 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f  ault test versio
2010: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  n for the CLR v2
2020: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...
2030: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
2040: 72 65 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37  return 2.0.50727
2050: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22  ; # TODO: Good "
2060: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c  fallback" defaul
2070: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  t?..          }.
2080: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
2090: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
20a0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
20b0: 59 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20  Years {} {..
20c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
20d0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69  E: See if the li
20e0: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73  st of test years
20f0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2100: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72  dden by the user
2110: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2120: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
2130: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
2140: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
2150: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
2160: 65 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c  est_years] && [l
2170: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79  length $::test_y 2180: 65 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ears] > 0} then 2190: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 21a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 21b0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 21c0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 list of test yea 21d0: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rs... #.. 21e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
21f0: 3a 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20  ::test_years..
2200: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
2210: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2220: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
2230: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66   default list of
2240: 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65   test years (i.e
2250: 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20  . all)...
2260: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
2270: 72 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30  rn [list 2005 20
2280: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31  08 2010 2012 201
2290: 33 20 32 30 31 35 20 32 30 31 37 20 4e 65 74 53  3 2015 2017 NetS
22a0: 74 61 6e 64 61 72 64 32 30 5d 0d 0a 20 20 20 20  tandard20]..
22b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
22c0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
22d0: 4e 65 74 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20  NetFx {} {..
22e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
22f0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 74 65  E: See if the te
2300: 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  st .NET Framewor
2310: 6b 20 73 65 74 74 69 6e 67 20 68 61 73 20 62 65  k setting has be
2320: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79  en overridden by
2330: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2340: 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f  the user (e.g. o
2350: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
2360: 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne)...      #..
2370: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
2380: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74  xists ::test_net
2390: 5f 66 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  _fx] && \..
23a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
23b0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f  gth $::test_net_ 23c0: 66 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d fx] > 0} then {. 23d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 23e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 23f0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 2400: 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 st .NET Framewor 2410: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 k... #.. 2420: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2430: 3a 74 65 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20  :test_net_fx..
2440: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
2450: 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b        set year [
2460: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20  getBuildYear]..
2470: 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 56         set yearV
2480: 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  arName [appendAr
2490: 67 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78  gs ::test_net_fx
24a0: 5f 20 24 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20  _ $year].... 24b0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 24c0: 69 73 74 73 20 24 79 65 61 72 56 61 72 4e 61 6d ists$yearVarNam
24d0: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  e] && \..
24e0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
24f0: 67 74 68 20 5b 73 65 74 20 24 79 65 61 72 56 61  gth [set $yearVa 2500: 72 4e 61 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 rName]] > 0} the 2510: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 2520: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 2530: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 2540: 69 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 ified test .NET 2550: 46 72 61 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 Framework, based 2560: 20 6f 6e 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 on the build.. 2570: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2580: 20 79 65 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 year... 2590: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 #.. r 25a0: 65 74 75 72 6e 20 5b 73 65 74 20 24 79 65 61 72 eturn [set$year
25b0: 56 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  VarName]..
25c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
25d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25e0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62     # NOTE: Fallb
25f0: 61 63 6b 20 74 6f 20 74 68 65 20 22 77 65 6c 6c  ack to the "well
2600: 20 6b 6e 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61   known" .NET Fra
2610: 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74  mework version t
2620: 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  hat..          #
2630: 20 20 20 20 20 20 20 69 73 20 6d 6f 73 74 20 63         is most c
2640: 6c 6f 73 65 6c 79 20 61 73 73 6f 63 69 61 74 65  losely associate
2650: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
2660: 6c 61 72 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a  lar version of..
2670: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2680: 20 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2e    Visual Studio.
2690: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
26a0: 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch
26b0: 2d 65 78 61 63 74 20 2d 2d 20 24 79 65 61 72 20  -exact -- $year 26c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 {.. 2 26d0: 30 30 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 005 {.. 26e0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 return netF 26f0: 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x20.. 2700: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2710: 32 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 2008 {.. 2720: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 return net 2730: 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20 Fx35.. 2740: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2750: 20 32 30 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 2010 {.. 2760: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 return ne 2770: 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 tFx40.. 2780: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2790: 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 2012 {.. 27a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 27b0: 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 etFx45.. 27c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 27d0: 20 20 20 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 2013 {.. 27e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 27f0: 6e 65 74 46 78 34 35 31 3b 20 23 20 54 4f 44 4f netFx451; # TODO 2800: 3a 20 4f 72 20 22 6e 65 74 46 78 34 35 32 22 3f : Or "netFx452"? 2810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 31 . 201 2830: 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 5 {.. 2840: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 2850: 36 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 6; # TODO: Or "n 2860: 65 74 46 78 34 36 31 22 20 2f 20 22 6e 65 74 46 etFx461" / "netF 2870: 78 34 36 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 x462"?.. 2880: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2890: 20 20 20 32 30 31 37 20 7b 0d 0a 20 20 20 20 20 2017 {.. 28a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 28b0: 6e 65 74 46 78 34 37 3b 20 23 20 54 4f 44 4f 3a netFx47; # TODO: 28c0: 20 4f 72 20 22 6e 65 74 46 78 34 37 31 22 20 2f Or "netFx471" / 28d0: 20 22 6e 65 74 46 78 34 37 32 22 3f 0d 0a 20 20 "netFx472"?.. 28e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 28f0: 20 20 20 20 20 20 20 20 20 4e 65 74 53 74 61 6e NetStan 2900: 64 61 72 64 32 30 20 7b 0d 0a 20 20 20 20 20 20 dard20 {.. 2910: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 2920: 65 74 53 74 61 6e 64 61 72 64 32 30 0d 0a 20 20 etStandard20.. 2930: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2940: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 default 2950: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2960: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 35 return netFx35 2970: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 2980: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 2990: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t?.. 29a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 29b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 29c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 29d0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 29e0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 29f0: 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 6e 6f should return no 2a00: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 63 6f n-zero if the co 2a10: 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d 0a 20 nfigured test.. 2a20: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 # platf 2a30: 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 6b 65 orm is most like 2a40: 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 ly the default f 2a50: 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 2e or this machine. 2a60: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 72 6f .. #.. pro 2a70: 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 6c 64 c isDefaultBuild 2a80: 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 72 62 Platform { {verb 2a90: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. 2aa0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2ab0: 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e NOTE: Running on 2ac0: 20 57 6f 57 36 34 20 69 73 20 6e 65 76 65 72 20 WoW64 is never 2ad0: 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 the default plat 2ae0: 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a form... #.. 2af0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75 6e if {[isRun 2b00: 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 68 65 6e ningWoW64]} then 2b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 2b20: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
2b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
2b40: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2b50: 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 2b60: 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 "---- detecte 2b70: 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 70 6c d non-default pl 2b80: 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 29 5c 6e atform (WoW64)\n 2b90: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ".. }.... 2ba0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f 2bb0: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d alse.. }... 2bc0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2bd0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 73 # NOTE: This has 2be0: 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 6f a good chance o 2bf0: 66 20 62 65 69 6e 67 20 74 68 65 20 64 65 66 61 f being the defa 2c00: 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 ult platform... 2c10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 2c20: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e {$verbose} then
2c30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
2c40: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2c50: 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 l "---- detected 2c60: 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 default platfor 2c70: 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d m\n".. }... 2c80: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 . return tr 2c90: 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 ue.. }..... 2ca0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 proc getBuildP 2cb0: 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 latform { native 2cc0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b } {.. if { 2cd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 2ce0: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 est_platform] && 2cf0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 2d00: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
2d10: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e  test_platform] >
2d20: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2d30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2d40: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
2d50: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70 6c  pecified test pl
2d60: 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 73  atform.  If this
2d70: 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74   variable is not
2d80: 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 23   set,..        #
2d90: 20 20 20 20 20 20 20 74 68 65 20 64 65 66 61 75         the defau
2da0: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
2db0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d 61   based on the ma
2dc0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
2dd0: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  re...        #..
2de0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
2df0: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20  expr {$native ? 2e00: 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d$::test_platform
2e10: 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d   : ""}]..      }
2e20: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
2e30: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63  xists ::test_mac
2e40: 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20  hine] && \..
2e50: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
2e60: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63  ngth $::test_mac 2e70: 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 hine] > 0} then 2e80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 2e90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f # NOTE: Fo 2ea0: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c r native builds, 2eb0: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 return the plat 2ec0: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 form name corres 2ed0: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 ponding to.. 2ee0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 2ef0: 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 63 test machine arc 2f00: 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 hitecture; other 2f10: 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 wise, return an 2f20: 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 23 empty.. # 2f30: 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a string... 2f40: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2f50: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr 2f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 {..$na
2f70: 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54  tive ? [machineT
2f80: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73  oPlatform $::tes 2f90: 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d t_machine] : "". 2fa0: 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 . }].. 2fb0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 2fc0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f fo exists ::tcl_ 2fd0: 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 platform(machine 2fe0: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 2ff0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 3000: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 NOTE: For nativ 3010: 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e e builds, return 3020: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 3030: 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 me corresponding 3040: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 3050: 20 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 the machine 3060: 20 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f architecture; o 3070: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 3080: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 3090: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 30a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 30b0: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 pr {.. 30c0: 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69$native ? [machi
30d0: 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a  neToPlatform $:: 30e0: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 tcl_platform(mac 30f0: 68 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 hine)] : "".. 3100: 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d }].. } 3110: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 3120: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3130: 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 TE: No machine a 3140: 72 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 rchitecture is a 3150: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e vailable, return 3160: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 3170: 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ... # 3180: 20 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 It is importa 3190: 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 nt to return an 31a0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 empty string her 31b0: 65 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 e because the.. 31c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 31d0: 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 esult of this pr 31e0: 6f 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 ocedure may be u 31f0: 73 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a sed with [file j 3200: 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 oin]... # 3210: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 3220: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 "".. }.. 3230: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 3240: 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 getBuildConfigu 3250: 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 ration {} {.. 3260: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3270: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 TE: See if the " 3280: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 configuration" s 3290: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 etting has been 32a0: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 overridden by th 32b0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 32c0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 user (e.g. on t 32d0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 he command line) 32e0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f . This helps co 32f0: 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 ntrol exactly.. 3300: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 # whi 3310: 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69 ch set of binari 3320: 65 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e es we are testin 3330: 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 g (i.e. those bu 3340: 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 ilt in the.. 3350: 20 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67 # "Debug 3360: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62 " or "Release" b 3370: 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 uild configurati 3380: 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 ons). To overri 3390: 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 de this.. # 33a0: 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 value via 33b0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 33c0: 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 e, enter a comma 33d0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e nd similar to on 33e0: 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 e of.. # 33f0: 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e the followin 3400: 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 g (all on one li 3410: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 3420: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 3430: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 3440: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 3450: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 3460: 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 on Debug".. 3470: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 # -file 3480: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 .\path\to\all.e 3490: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 agle.. #.. 34a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 34b0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 34c0: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 34d0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 34e0: 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 on Release".. 34f0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 3500: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 3510: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 3520: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 3530: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 agleShell.exe -f 3540: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 3550: 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 l.eagle -preTest 3560: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3570: 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 "unset -nocomp 3580: 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 lain test_config 3590: 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 uration".. 35a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 35b0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 35c0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 _configuration] 35d0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 35e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
35f0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
3600: 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tion] > 0} then
3610: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3620: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
3630: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
3640: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69  test configurati
3650: 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74  on.  The default
3660: 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20   value used..
3670: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
3680: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
3690: 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c  s typically "Rel
36a0: 65 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79  ease", as set by
36b0: 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20   the test..
36c0: 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65     #       suite
36d0: 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20   itself...
36e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
36f0: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66  urn $::test_conf 3700: 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 iguration.. 3710: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 3720: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 3730: 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 NOTE: Normally, 3740: 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 we will never hi 3750: 74 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61 t this case beca 3760: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 use the value of 3770: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 3780: 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69 test confi 3790: 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c guration variabl 37a0: 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 e is always set 37b0: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 37c0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 37d0: 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 itself; howev 37e0: 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76 er, it can be ov 37f0: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74 erridden using t 3800: 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 he unset command 3810: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3820: 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 from the -preT 3830: 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 est option to th 3840: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 3850: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3860: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c return$::eagl
3870: 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69  e_platform(confi
3880: 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20  guration)..
3890: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
38a0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43    proc getBuildC
38b0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d  onfigurations {}
38c0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
38d0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
38e0: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65  f the list of te
38f0: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st configuration
3900: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
3910: 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20  idden by..
3920: 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72  #       the user
3930: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f   (e.g. on the co
3940: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20  mmand line)...
3950: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
3960: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
3970: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
3980: 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ons] && \..
3990: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a       [llength $: 39a0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 39b0: 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ions] > 0} then 39c0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 39d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 39e0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 39f0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e list of test con 3a00: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 figurations... 3a10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3a20: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
3a30: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a  configurations..
3a40: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
3a50: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3a60: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
3a70: 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20  he default list
3a80: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
3a90: 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  ations...
3aa0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
3ab0: 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52  rn [list Debug R
3ac0: 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d  elease]..      }
3ad0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3ae0: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 45 78 74  proc getBuildExt
3af0: 72 61 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ra {} {..      i
3b00: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
3b10: 3a 3a 74 65 73 74 5f 65 78 74 72 61 5d 20 26 26  ::test_extra] &&
3b20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
3b30: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 3b40: 74 65 73 74 5f 65 78 74 72 61 5d 20 3e 20 30 7d test_extra] > 0} 3b50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 3b60: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3b70: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 3b80: 69 66 69 65 64 20 65 78 74 72 61 20 6f 75 74 70 ified extra outp 3b90: 75 74 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 ut directory... 3ba0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3bb0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
3bc0: 5f 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 20  _extra..      }
3bd0: 65 6c 73 65 69 66 20 7b 5b 69 73 44 6f 74 4e 65  elseif {[isDotNe
3be0: 74 43 6f 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tCore]} then {..
3bf0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3c00: 20 20 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69     # NOTE: Runni
3c10: 6e 67 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c  ng on .NET Core,
3c20: 20 75 73 65 20 74 68 65 20 65 78 74 72 61 20 6f   use the extra o
3c30: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20  utput directory
3c40: 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  for..        #
3c50: 20 20 20 20 20 6c 69 62 72 61 72 79 20 66 69 6c       library fil
3c60: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es...        #..
3c70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
3c80: 65 74 73 74 61 6e 64 61 72 64 32 2e 30 0d 0a 20  etstandard2.0..
3c90: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
3ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3cb0: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 65 78 74    # NOTE: No ext
3cc0: 72 61 20 6f 75 74 70 75 74 20 64 69 72 65 63 74  ra output direct
3cd0: 6f 72 79 20 69 73 20 72 65 71 75 69 72 65 64 2e  ory is required.
3ce0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
3cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
3d00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3d10: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
3d20: 75 69 6c 64 45 78 74 72 61 73 20 7b 7d 20 7b 0d  uildExtras {} {.
3d30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3d40: 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74  # NOTE: See if t
3d50: 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74 72 61  he list of extra
3d60: 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72   output director
3d70: 69 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ies has been ove
3d80: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
3d90: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
3da0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
3db0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
3dc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
3dd0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
3de0: 3a 3a 74 65 73 74 5f 65 78 74 72 61 73 5d 20 26  ::test_extras] &
3df0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
3e00: 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f  llength $::test_ 3e10: 65 78 74 72 61 73 5d 20 3e 20 30 7d 20 74 68 65 extras] > 0} the 3e20: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 3e30: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 3e40: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 3e50: 64 20 6c 69 73 74 20 6f 66 20 65 78 74 72 61 20 d list of extra 3e60: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 69 output directori 3e70: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es... #.. 3e80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
3e90: 3a 3a 74 65 73 74 5f 65 78 74 72 61 73 0d 0a 20  ::test_extras..
3ea0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
3eb0: 69 73 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74  isDotNetCore]} t
3ec0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
3ed0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3ee0: 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45  : Running on .NE
3ef0: 54 20 43 6f 72 65 2c 20 70 72 69 6f 72 69 74 69  T Core, prioriti
3f00: 7a 65 20 69 74 73 20 65 78 74 72 61 20 6f 75 74  ze its extra out
3f10: 70 75 74 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  put directory..
3f20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
3f30: 6f 72 20 6c 69 62 72 61 72 79 20 66 69 6c 65 73  or library files
3f40: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
3f50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
3f60: 73 74 20 6e 65 74 73 74 61 6e 64 61 72 64 32 2e  st netstandard2.
3f70: 30 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  0 ""]..      } e
3f80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
3f90: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3fa0: 3a 20 55 73 65 20 64 65 66 61 75 6c 74 20 6c 69  : Use default li
3fb0: 73 74 20 6f 66 20 65 78 74 72 61 20 6f 75 74 70  st of extra outp
3fc0: 75 74 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20  ut directories,
3fd0: 77 68 69 63 68 20 69 73 20 6f 6e 65 0d 0a 20 20  which is one..
3fe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 6d        #       em
3ff0: 70 74 79 20 73 74 72 69 6e 67 20 28 6e 6f 2d 6f  pty string (no-o
4000: 70 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  p)...        #..
4010: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
4020: 6c 69 73 74 20 22 22 5d 0d 0a 20 20 20 20 20 20  list ""]..
4030: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
4040: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61   proc getBuildBa
4050: 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  seDirectory {} {
4060: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
4070: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20   # NOTE: Figure
4080: 6f 75 74 20 74 68 65 20 62 61 73 65 20 64 69 72  out the base dir
4090: 65 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c  ectory where all
40a0: 20 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75   the builds shou
40b0: 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20  ld be..      #
40c0: 20 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54       located.  T
40d0: 68 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20  his will be the
40e0: 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 20 63  directory that c
40f0: 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75  ontains the actu
4100: 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  al..      #
4110: 20 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64    build output d
4120: 69 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70  irectory (e.g. p
4130: 61 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e  arent of "bin").
4140: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
4150: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
4160: 73 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64  s ::build_base_d
4170: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
4180: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
4190: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c  g length $::buil 41a0: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 d_base_directory 41b0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 41c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 41d0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f # NOTE: The lo 41e0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 cation of the bu 41f0: 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 6f ild base directo 4200: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 ry has been over 4210: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 ridden;.. 4220: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 4230: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 re, use it verba 4240: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d tim... #. 4250: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4260: 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69$::build_base_di
4270: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
4280: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
4290: 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64  xists ::common_d
42a0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
42b0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
42c0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d  g length $::comm 42d0: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 on_directory] > 42e0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 42f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 4300: 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c NOTE: Next, fall 4310: 62 61 63 6b 20 74 6f 20 74 68 65 20 67 72 61 6e back to the gran 4320: 64 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 dparent director 4330: 79 20 6f 66 20 74 68 65 20 6f 6e 65 0d 0a 20 20 y of the one.. 4340: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 4350: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 ntaining this fi 4360: 6c 65 20 28 69 2e 65 2e 20 22 63 6f 6d 6d 6f 6e le (i.e. "common 4370: 2e 65 61 67 6c 65 22 29 2c 20 69 66 20 61 76 61 .eagle"), if ava 4380: 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 ilable... 4390: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 43a0: 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 rn [file dirname 43b0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 [file dirname$
43c0: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
43d0: 72 79 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ry]]..      } el
43e0: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
43f0: 74 73 20 3a 3a 70 61 74 68 5d 20 26 26 20 5c 0d  ts ::path] && \.
4400: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
4410: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 70 61 74  ng length $::pat 4420: 68 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a h] > 0} then {.. 4430: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4440: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c # NOTE: Final 4450: 6c 79 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 ly, fallback to 4460: 74 68 65 20 70 61 72 65 6e 74 20 64 69 72 65 63 the parent direc 4470: 74 6f 72 79 20 6f 66 20 74 68 65 20 45 61 67 6c tory of the Eagl 4480: 65 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 eTest.. # 4490: 20 20 20 20 20 20 20 70 61 74 68 2e 20 20 54 68 path. Th 44a0: 65 20 45 61 67 6c 65 54 65 73 74 20 70 61 63 6b e EagleTest pack 44b0: 61 67 65 20 67 75 61 72 61 6e 74 65 65 73 20 74 age guarantees t 44c0: 68 61 74 20 74 68 69 73 20 76 61 72 69 61 62 6c hat this variabl 44d0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 44e0: 20 20 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 will be set t 44f0: 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 o the directory 4500: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 containing the f 4510: 69 72 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 irst file to.. 4520: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 4530: 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65 ecute the [runTe 4540: 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 stPrologue] scri 4550: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 pt library proce 4560: 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 dure... # 4570: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4580: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 [file dirname$
4590: 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d  ::path]..      }
45a0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
45b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
45c0: 54 45 3a 20 4e 6f 20 70 61 74 68 20 69 73 20 61  TE: No path is a
45d0: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e  vailable, return
45e0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
45f0: 2e 20 20 54 68 69 73 20 70 6f 69 6e 74 0d 0a 20  .  This point..
4600: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
4610: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 72 65 61  hould not be rea
4620: 63 68 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  ched...        #
4630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4640: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20   ""..      }..
4650: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
4660: 20 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61   getSQLiteTestDa
4670: 74 61 50 61 74 68 20 7b 7d 20 7b 0d 0a 20 20 20  taPath {} {..
4680: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4690: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74  TE: Figure out t
46a0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65  he directory whe
46b0: 72 65 20 61 6c 6c 20 74 68 65 20 74 65 73 74 20  re all the test
46c0: 64 61 74 61 20 66 69 6c 65 73 20 73 68 6f 75 6c  data files shoul
46d0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
46e0: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 54 68   be located.  Th
46f0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65  is should be the
4700: 20 22 64 61 74 61 22 20 64 69 72 65 63 74 6f 72   "data" director
4710: 79 20 62 65 6e 65 61 74 68 20 74 68 65 0d 0a 20  y beneath the..
4720: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
4730: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ectory containin
4740: 67 20 74 68 65 20 61 63 74 75 61 6c 20 74 65 73  g the actual tes
4750: 74 20 73 63 72 69 70 74 73 2e 0d 0a 20 20 20 20  t scripts...
4760: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
4770: 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a  n [file join $:: 4780: 70 61 74 68 20 64 61 74 61 5d 0d 0a 20 20 20 20 path data].. 4790: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 47a0: 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 20 7b 7d sRunningWoW64 {} 47b0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 47c0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e # NOTE: For n 47d0: 6f 77 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 ow, just use the 47e0: 20 65 78 69 73 74 69 6e 67 20 74 65 73 74 20 63 existing test c 47f0: 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 64 65 onstraint for de 4800: 74 65 63 74 69 6e 67 0d 0a 20 20 20 20 20 20 23 tecting.. # 4810: 20 20 20 20 20 20 20 61 20 57 6f 57 36 34 20 70 a WoW64 p 4820: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 rocess... # 4830: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 4840: 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 77 haveConstraint w 4850: 6f 77 36 34 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d ow64].. }.... 4860: 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65 . proc isMixe 4870: 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20 dModeAssembly { 4880: 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d fileName {varNam 4890: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. 48a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 48b0: 3a 20 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75 : First, make su 48c0: 72 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74 re the test suit 48d0: 65 20 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 e infrastructure 48e0: 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a is allowed to.. 48f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 4900: 65 20 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d e the [exec] com 4910: 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a mand... #.. 4920: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 4930: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 exists ::no(exe 4940: 63 29 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 c)] && ![info ex 4950: 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 ists ::no(corFla 4960: 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 gs)]} then {.. 4970: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4980: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 4990: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46 location of CorF 49a0: 6c 61 67 73 20 69 73 20 70 72 65 73 65 6e 74 20 lags is present 49b0: 69 6e 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 in the environme 49c0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 nt,.. # 49d0: 20 20 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68 use it; oth 49e0: 65 72 77 69 73 65 20 61 73 73 75 6d 65 20 69 74 erwise assume it 49f0: 20 69 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e is in the PATH. 4a00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4a10: 20 20 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67 set corFlag 4a20: 73 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 s [expr {.. 4a30: 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 [info exist 4a40: 73 20 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 s ::env(CorFlags 4a50: 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46 )] ?$::env(CorF
4a60: 6c 61 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67  lags) : "CorFlag
4a70: 73 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a  s"..        }]..
4a80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4a90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
4aa0: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute
4ab0: 43 6f 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20  CorFlags on the
4ac0: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d  specified file..
4ad0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4ae0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
4af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 78 65 63  ..          exec
4b00: 20 2d 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66   -- $corFlags [f 4b10: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 ile nativename$
4b20: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
4b30: 20 20 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d     } exec] == 0}
4b40: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4b50: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
4b60: 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65  # NOTE: If reque
4b70: 73 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  sted by our call
4b80: 65 72 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64  er, attempt to d
4b90: 65 74 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20  etermine the..
4ba0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4bb0: 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65  platform for the
4bc0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file
4bd0: 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20  as well...
4be0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
4bf0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
4c00: 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20  gth $varName] > 4c10: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 4c20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4c30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 # NOTE: St 4c40: 6f 72 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d ore the platform 4c50: 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61 in the named va 4c60: 72 69 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20 riable in the.. 4c70: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 4c80: 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 context of ou 4c90: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 r caller... 4ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4cb0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
4cc0: 61 72 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d  arName platform.
4cd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
4ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
4cf0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
4d00: 20 65 78 74 72 61 63 74 20 74 68 65 20 50 45 20   extract the PE
4d10: 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61  line from the ca
4d20: 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20  ptured..
4d30: 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70      #       outp
4d40: 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  ut.  If this val
4d50: 75 65 20 69 73 20 22 50 45 33 32 22 20 6f 72 20  ue is "PE32" or
4d60: 22 50 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20  "PE32+", the..
4d70: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
4d80: 20 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20    assembly file
4d90: 69 73 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d  is 32-bit or 64-
4da0: 62 69 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c  bit, respectivel
4db0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..
4dc0: 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  #       otherwis
4dd0: 65 2c 20 69 74 73 20 74 79 70 65 20 69 73 20 75  e, its type is u
4de0: 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20  nknown...
4df0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4e00: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20      set pattern
4e10: 7b 5e 50 45 20 20 20 20 20 20 20 20 3a 20 28 50  {^PE        : (P
4e20: 45 33 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d  E32|PE32\+)\s+$} 4e30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 4e40: 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e if {[regexp -lin 4e50: 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 e --$pattern $e 4e60: 78 65 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d xec dummy pe32]} 4e70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4e80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4e90: 20 20 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 # HACK: 4ea0: 54 68 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73 This [switch] as 4eb0: 73 75 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69 sumes that 32-bi 4ec0: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 t executables ar 4ed0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 4ee0: 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 # always 4ef0: 78 38 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d x86 and that 64- 4f00: 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 bit executables 4f10: 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 are always.. 4f20: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 4f30: 20 20 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20 x64... 4f40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4f50: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 switch -e 4f60: 78 61 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d xact --$pe32 {.
4f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
4f80: 20 50 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20   PE32 {..
4f90: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
4fa0: 6c 61 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20  latform Win32..
4fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
4fd0: 20 20 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20    PE32+ {..
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
4ff0: 20 70 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20   platform x64..
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
5020: 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20    default {..
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5040: 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a  et platform ""..
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5060: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
5070: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
5080: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
5090: 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74          set plat
50a0: 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20  form ""..
50b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
50c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
50d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
50e0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
50f0: 20 65 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f   extract the ILO
5100: 4e 4c 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68  NLY line from th
5110: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20  e captured..
5120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 75        #       ou
5130: 74 70 75 74 2e 20 20 49 66 20 74 68 69 73 20 76  tput.  If this v
5140: 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68  alue is zero, th
5150: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65  e specified file
5160: 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20   must..
5170: 20 23 20 20 20 20 20 20 20 62 65 20 61 20 6d 69   #       be a mi
5180: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
5190: 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74  y; otherwise, it
51a0: 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a   contains only..
51b0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
51c0: 20 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e    managed compon
51d0: 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ents...
51e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
51f0: 74 20 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e  t pattern {^ILON
5200: 4c 59 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b  LY    : (0|1)\s+
5210: 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  $}.... 5220: 69 66 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69 if {![regexp -li 5230: 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 ne --$pattern $5240: 65 78 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c exec dummy ilOnl 5250: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 5260: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f 5270: 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 5280: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 }.... i 5290: 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 f {!$ilOnly} the
52a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
52b0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
52c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
52d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
52e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
52f0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74  # NOTE: If the t
5300: 65 73 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74  est suite cannot
5310: 20 75 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65   use [exec] or e
5320: 78 65 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46  xecution of CorF
5330: 6c 61 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20  lags..      #
5340: 20 20 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75      failed, retu
5350: 72 6e 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20  rn false...
5360: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
5370: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
5380: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 4e 61  ..    proc getNa
5390: 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e  tiveLibraryFileN
53a0: 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20  amesOnly {} {..
53b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
53c0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65  NOTE: First, che
53d0: 63 6b 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f  ck if the list o
53e0: 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  f native library
53f0: 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20   file names has
5400: 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  been..      #
5410: 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65      manually ove
5420: 72 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20 20 20  rridden...
5430: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
5440: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 61 74 69  fo exists ::nati
5450: 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f  ve_library_file_
5460: 6e 61 6d 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20  names] && \..
5470: 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20         [llength
5480: 24 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72  $::native_librar 5490: 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 y_file_names] > 54a0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 54b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 54c0: 4e 4f 54 45 3a 20 54 68 65 20 6c 69 73 74 20 6f NOTE: The list o 54d0: 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 f native library 54e0: 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 file names has 54f0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 5500: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5510: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 5520: 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 it verbatim... 5530: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5540: 20 20 72 65 74 75 72 6e 20 24 3a 3a 6e 61 74 69 return$::nati
5550: 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f  ve_library_file_
5560: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65  names..      } e
5570: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77  lseif {[isWindow
5580: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  s]} then {..
5590: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
55a0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65   NOTE: Otherwise
55b0: 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c  , on Windows, al
55c0: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65 66  ways use the def
55d0: 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a  ault file name..
55e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
55f0: 22 73 71 6c 69 74 65 33 2e 64 6c 6c 22 2e 0d 0a  "sqlite3.dll"...
5600: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
5610: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list
5620: 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 0d 0a 20 20  sqlite3.dll]..
5630: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
5640: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
5650: 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69   # NOTE: Otherwi
5660: 73 65 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20  se, return both
5670: 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49  the generic POSI
5680: 58 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20  X file name and
5690: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
56a0: 20 20 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69       Mac OS X fi
56b0: 6c 65 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77  le name, since w
56c0: 65 20 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74  e do not current
56d0: 6c 79 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d  ly have an easy.
56e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
56f0: 20 77 61 79 20 74 6f 20 64 65 74 65 63 74 20 77   way to detect w
5700: 68 69 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c  hich of those pl
5710: 61 74 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72  atforms we are r
5720: 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20  unning on...
5730: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
5740: 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 73  eturn [list libs
5750: 71 6c 69 74 65 33 2e 64 79 6c 69 62 20 6c 69 62  qlite3.dylib lib
5760: 73 71 6c 69 74 65 33 2e 73 6f 5d 0d 0a 20 20 20  sqlite3.so]..
5770: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
5780: 20 20 20 20 70 72 6f 63 20 67 65 74 49 6e 74 65      proc getInte
5790: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e  ropAssemblyFileN
57a0: 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20  amesOnly {} {..
57b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
57c0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65  NOTE: First, che
57d0: 63 6b 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f  ck if the list o
57e0: 66 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  f interop assemb
57f0: 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61  ly file names ha
5800: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20  s been..      #
5810: 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f        manually o
5820: 76 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20  verridden...
5830: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
5840: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 69 6e  info exists ::in
5850: 74 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66  terop_assembly_f
5860: 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 5c 0d  ile_names] && \.
5870: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e  .          [llen
5880: 67 74 68 20 24 3a 3a 69 6e 74 65 72 6f 70 5f 61  gth $::interop_a 5890: 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d ssembly_file_nam 58a0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d es] > 0} then {. 58b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 58c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 58d0: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 list of interop 58e0: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 58f0: 6d 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 mes has been ove 5900: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 rridden;.. 5910: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 5920: 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 ore, use it verb 5930: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 atim... # 5940: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 5950: 20 24 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65$::interop_asse
5960: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d  mbly_file_names.
5970: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20  .      } elseif
5980: 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68  {[isWindows]} th
5990: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
59a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
59b0: 20 4f 74 68 65 72 77 69 73 65 2c 20 6f 6e 20 57   Otherwise, on W
59c0: 69 6e 64 6f 77 73 2c 20 61 6c 77 61 79 73 20 75  indows, always u
59d0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 66  se the default f
59e0: 69 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ile name..
59f0: 20 20 23 20 20 20 20 20 20 20 22 53 51 4c 69 74    #       "SQLit
5a00: 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 2e 0d  e.Interop.dll"..
5a10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5a20: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
5a30: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e   SQLite.Interop.
5a40: 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  dll]..      } el
5a50: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
5a60: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
5a70: 20 4f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75   Otherwise, retu
5a80: 72 6e 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65  rn both the gene
5a90: 72 69 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e  ric POSIX file n
5aa0: 61 6d 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20  ame and the..
5ab0: 20 20 20 20 20 23 20 20 20 20 20 20 20 4d 61 63       #       Mac
5ac0: 20 4f 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c   OS X file name,
5ad0: 20 73 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74   since we do not
5ae0: 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20   currently have
5af0: 61 6e 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20  an easy..
5b00: 20 23 20 20 20 20 20 20 20 77 61 79 20 74 6f 20   #       way to
5b10: 64 65 74 65 63 74 20 77 68 69 63 68 20 6f 66 20  detect which of
5b20: 74 68 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20  those platforms
5b30: 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f  we are running o
5b40: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  n...        #..
5b50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
5b60: 69 73 74 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e  ist libSQLite.In
5b70: 74 65 72 6f 70 2e 64 79 6c 69 62 20 6c 69 62 53  terop.dylib libS
5b80: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 73 6f  QLite.Interop.so
5b90: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
5ba0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
5bb0: 65 74 43 6f 72 65 45 78 74 65 6e 73 69 6f 6e 42  etCoreExtensionB
5bc0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20  inaryFileName {
5bd0: 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d 20 7b  {default ""} } {
5be0: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
5bf0: 4e 61 6d 65 20 5b 67 65 74 43 6f 72 65 42 69 6e  Name [getCoreBin
5c00: 61 72 79 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  aryFileName]....
5c10: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
5c20: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 5c30: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 5c40: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e return$fileN
5c50: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ame..      }....
5c60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65        return $de 5c70: 66 61 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d fault.. }.... 5c80: 0a 20 20 20 20 70 72 6f 63 20 69 73 42 75 69 6c . proc isBuil 5c90: 64 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74 dAvailable { nat 5ca0: 69 76 65 20 64 69 72 65 63 74 6f 72 79 20 7b 76 ive directory {v 5cb0: 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a arName ""} } {.. 5cc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 5cd0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 5ce0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified 5cf0: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 file name for t 5d00: 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d he primary assem 5d10: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 bly.. # 5d20: 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 containing th 5d30: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 5d40: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d Lite managed com 5d50: 70 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 ponents. It.. 5d60: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 5d70: 6c 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61 74 ld be noted that 5d80: 20 74 68 69 73 20 61 73 73 65 6d 62 6c 79 20 66 this assembly f 5d90: 69 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e ile may also con 5da0: 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 tain the.. 5db0: 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 63 # native c 5dc0: 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 omponents, if a 5dd0: 6e 61 74 69 76 65 20 62 75 69 6c 64 20 69 73 20 native build is 5de0: 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 in use... # 5df0: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 .. set file 5e00: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 Name [file nativ 5e10: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 5e20: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20$directory \..
5e30: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
5e40: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
5e50: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  ]....      if {!
5e60: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5e70: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5e80: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 5e90: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. 5ea0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5eb0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 5ec0: 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c to automaticall 5ed0: 79 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20 y detect if the 5ee0: 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 primary assembly 5ef0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 5f00: 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 contains any nat 5f10: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 ive components, 5f20: 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 if necessary... 5f30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 5f40: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 5f50: 20 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20$native] == 0}
5f60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
5f70: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
5f80: 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30  th $varName] > 0 5f90: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 5fa0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
5fb0: 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20  Name $varName.. 5fc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 5fd0: 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b set native [ 5fe0: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d isMixedModeAssem 5ff0: 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 bly$fileName $v 6000: 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d arName].. } 6010: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 6020: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 6030: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 e primary assemb 6040: 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 ly also contains 6050: 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 the native comp 6060: 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 onents,.. # 6070: 20 20 20 20 20 20 20 77 65 20 68 61 76 65 20 65 we have e 6080: 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 verything we nee 6090: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 60a0: 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 if {$native}
60b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
60c0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
60d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
60e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
60f0: 66 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61  f the machine na
6100: 6d 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  me is unavailabl
6110: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68  e, there is noth
6120: 69 6e 67 20 65 6c 73 65 20 77 65 0d 0a 20 20 20  ing else we..
6130: 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 20 64     #       can d
6140: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  o...      #..
6150: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
6160: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
6170: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74  orm(machine)]} t
6180: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
6190: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
61a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
61b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  .      # NOTE: W
61c0: 68 61 74 20 69 73 20 74 68 65 20 61 72 63 68 69  hat is the archi
61d0: 74 65 63 74 75 72 65 20 66 6f 72 20 74 68 69 73  tecture for this
61e0: 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20 20 20   machine?..
61f0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 72   #..      set ar
6200: 63 68 69 74 65 63 74 75 72 65 20 5b 6d 61 63 68  chitecture [mach
6210: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a  ineToPlatform $: 6220: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma 6230: 63 68 69 6e 65 29 20 74 72 75 65 5d 0d 0a 0d 0a chine) true].... 6240: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 6250: 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 NOTE: What is t 6260: 68 65 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 he platform for 6270: 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 this machine?.. 6280: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 6290: 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 68 t platform [mach 62a0: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a ineToPlatform$:
62b0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61  :tcl_platform(ma
62c0: 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20 20 20 20  chine)]....
62d0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
62e0: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
62f0: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65  y qualified file
6300: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 69 6e   name for the in
6310: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 0d 0a  terop assembly..
6320: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
6330: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73  ntaining the Sys
6340: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
6350: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
6360: 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  s.  If this..
6370: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20     #       file
6380: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c  exists, we shoul
6390: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e  d have everythin
63a0: 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20  g we need...
63b0: 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61    #..      forea
63c0: 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
63d0: 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
63e0: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
63f0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ] {..        set
6400: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file
6410: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
6420: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory 6430: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 6440: 24 61 72 63 68 69 74 65 63 74 75 72 65 20 24 66$architecture $f 6450: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d ileNameOnly]]... 6460: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi 6470: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
6480: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
6490: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
64a0: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  rue..        }..
64b0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69  ..        set fi
64c0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74  leName [file nat
64d0: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
64e0: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d  in $directory \. 64f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c .$pl
6500: 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65  atform $fileName 6510: 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 Only]].... 6520: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis 6530: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
6540: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
6550: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
6560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
6570: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
6580: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
6590: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir 65a0: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 65b0: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f$fileNameO
65c0: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nly]]....
65d0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
65e0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 65f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 6600: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 6610: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 6620: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6630: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 6640: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif 6650: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f ied file name fo 6660: 72 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 r the SQLite cor 6670: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 6680: 20 6c 69 62 72 61 72 79 2e 20 20 49 66 20 74 68 library. If th 6690: 69 73 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 is file exists, 66a0: 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 we should have e 66b0: 76 65 72 79 74 68 69 6e 67 20 77 65 0d 0a 20 20 verything we.. 66c0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 64 # need 66d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 66e0: 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 66f0: 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 meOnly [getNativ 6700: 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 eLibraryFileName 6710: 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 sOnly] {.. 6720: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 6730: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 6740: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 [file join$dire
6750: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20  ctory \..
6760: 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 6770: 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 re$fileNameOnly
6780: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ]]....        if
6790: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $67a0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 67b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 {.. ret 67c0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 67d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 }.... s 67e0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 67f0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 6800: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f le join$directo
6810: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry \..
6820: 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c    $platform$fil
6830: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20  eNameOnly]]....
6840: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
6850: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam 6860: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 6870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 6880: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 6890: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 set file 68a0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 Name [file nativ 68b0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 68c0: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20$directory \..
68d0: 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65             $file 68e0: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 NameOnly]].... 68f0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 6900: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
6910: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
6920: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
6930: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
6940: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
6950: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f  .      # NOTE: O
6960: 6e 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76  ne or more nativ
6970: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65  e components nee
6980: 64 65 64 20 62 79 20 53 79 73 74 65 6d 2e 44 61  ded by System.Da
6990: 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  ta.SQLite..
69a0: 20 23 20 20 20 20 20 20 20 61 72 65 20 6d 69 73   #       are mis
69b0: 73 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sing...      #..
69c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
69d0: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  se..    }.....
69e0: 20 20 70 72 6f 63 20 69 73 52 65 6c 65 61 73 65    proc isRelease
69f0: 41 76 61 69 6c 61 62 6c 65 20 7b 20 64 69 72 65  Available { dire
6a00: 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22  ctory {varName "
6a10: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  "} } {..      if
6a20: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
6a30: 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20   $varName] > 0} 6a40: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 6a50: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
6a60: 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20   $varName.. 6a70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 6a80: 72 6e 20 5b 69 73 42 75 69 6c 64 41 76 61 69 6c rn [isBuildAvail 6a90: 61 62 6c 65 20 22 22 20 24 64 69 72 65 63 74 6f able ""$directo
6aa0: 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20  ry $varName].. 6ab0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 6ac0: 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 joinBuildDirect 6ad0: 6f 72 79 20 7b 20 6e 61 74 69 76 65 20 70 61 74 ory { native pat 6ae0: 68 20 79 65 61 72 20 70 6c 61 74 66 6f 72 6d 20 h year platform 6af0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 65 78 configuration ex 6b00: 74 72 61 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 tra } {.. # 6b10: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 6b20: 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74 Figure out and t 6b30: 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66 hen return the f 6b40: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 ully qualified p 6b50: 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64 ath to the build 6b60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6b70: 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20 directory based 6b80: 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d on all the argum 6b90: 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79 ents provided by 6ba0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 our caller... 6bb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 6bc0: 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b {$native} then {
6bd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6be0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74   [file join $pat 6bf0: 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61 h bin$year $pla 6c00: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 tform$configura
6c10: 74 69 6f 6e 20 24 65 78 74 72 61 5d 0d 0a 20 20  tion $extra].. 6c20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 6c30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 6c40: 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 le join$path bi
6c50: 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75  n $year$configu
6c60: 72 61 74 69 6f 6e 20 62 69 6e 20 24 65 78 74 72  ration bin $extr 6c70: 61 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 a].. }.. 6c80: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 6c90: 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 6ca0: 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 y { managedOnly 6cb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 6cc0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 # NOTE: See 6cd0: 69 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 if the "native" 6ce0: 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 runtime option h 6cf0: 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 as been set. If 6d00: 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 so, use the.. 6d10: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 6d20: 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 ctory for the mi 6d30: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 6d40: 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 y (a.k.a. the na 6d50: 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 tive interop.. 6d60: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 6d70: 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c mbly). To enabl 6d80: 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 e this option vi 6d90: 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 a the command li 6da0: 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 ne, enter a.. 6db0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 # comma 6dc0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e nd similar to on 6dd0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 e of the followi 6de0: 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c ng (all on one l 6df0: 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a ine):.. #.. 6e00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 6e10: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e gleShell.exe -in 6e20: 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d itialize -runtim 6e30: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a eOption native.. 6e40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 6e50: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 6e60: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 6e70: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 6e80: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 To enable this 6e90: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 option via the 6ea0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 command line pri 6eb0: 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 or to the "beta 6ec0: 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 16".. # 6ed0: 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 release of Ea 6ee0: 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 gle, the followi 6ef0: 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 ng command must 6f00: 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d be used instead. 6f10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 . # ( 6f20: 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 also all on one 6f30: 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d line):.. #. 6f40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 6f50: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 agleShell.exe -i 6f60: 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 nitialize -postI 6f70: 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 nitialize.. 6f80: 20 23 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 # "obje 6f90: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 6fa0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 6fb0: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e AddRuntimeOption 6fc0: 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 native".. 6fd0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 6fe0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 6ff0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 7000: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 7010: 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 ists ::build_dir 7020: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 ectory] && \.. 7030: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 7040: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f length$::build_
7050: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
7060: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
7070: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
7080: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
7090: 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  of the build dir
70a0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
70b0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
70c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
70d0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76  refore, use it v
70e0: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...
70f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
7100: 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72  urn $::build_dir 7110: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 7120: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 7130: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7140: 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 E: If the "nativ 7150: 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f e" runtime optio 7160: 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20 6d 69 n is set, the mi 7170: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 7180: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 7190: 20 20 20 69 73 20 62 65 69 6e 67 20 74 65 73 74 is being test 71a0: 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 ed. In that cas 71b0: 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 e, the path to t 71c0: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 71d0: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ry.. # 71e0: 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e will contain 71f0: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 7200: 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 62 me and all the b 7210: 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 inaries under te 7220: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 7230: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 70 72 should be pr 7240: 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 69 esent in that di 7250: 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74 68 65 rectory. If the 7260: 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d "native" runtim 7270: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 7280: 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 option is not 7290: 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c 64 20 set, the build 72a0: 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62 directory will b 72b0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 e considered to 72c0: 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 be.. # 72d0: 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 "platform-ne 72e0: 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74 68 65 utral", with the 72f0: 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69 notable excepti 7300: 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69 76 65 on of any native 7310: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 7320: 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e 67 2e assembly (e.g. 7330: 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 "SQLite.Interop 7340: 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20 74 68 .dll") copied th 7350: 65 72 65 20 64 75 72 69 6e 67 20 74 68 65 0d 0a ere during the.. 7360: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 7370: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 69 74 build process it 7380: 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20 62 75 self. If the bu 7390: 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f 6d 65 ild process some 73a0: 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 how does not.. 73b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 73c0: 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 61 73 py the native as 73d0: 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69 73 20 sembly for this 73e0: 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f platform, most o 73f0: 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20 20 20 f the tests.. 7400: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 # in 7410: 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c 20 73 the suite will s 7420: 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70 65 64 imply be skipped 7430: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 . Generally spe 7440: 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20 20 aking, there.. 7450: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 # ar 7460: 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20 62 75 e two ways to bu 7470: 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69 65 73 ild the binaries 7480: 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 when preparing 7490: 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20 20 20 to run the.. 74a0: 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 74b0: 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20 20 20 suite:.. 74c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 #.. # 74d0: 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74 68 65 1. Build the 74e0: 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61 67 65 separate manage 74f0: 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61 73 73 d and native ass 7500: 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20 73 6f emblies using so 7510: 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 me.. # 7520: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 commands 7530: 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 similar to:.. 7540: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7550: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 # build 7560: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 .bat${Configura
7570: 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79  tion}ManagedOnly
7580: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20   ${Platform}.. 7590: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 75a0: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e build.bat${Con
75b0: 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 76  figuration}Nativ
75c0: 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d  eOnly ${Platform 75d0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 }.. #.. 75e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 75f0: 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 Where${Configu
7600: 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65  ration} is eithe
7610: 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65  r "Debug" or "Re
7620: 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20  lease" and..
7630: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24      #          $7640: 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 {Platform} is ei 7650: 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 ther "Win32" or 7660: 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 "x64"... 7670: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 #.. # 7680: 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68 65 20 2. Build the 7690: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 76a0: 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d bly using a comm 76b0: 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d and similar to:. 76c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 76d0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 76e0: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
76f0: 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 74  guration} ${Plat 7700: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 form}.. # 7710: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 7720: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e Where${Con
7730: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65  figuration} is e
7740: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
7750: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a   "Release" and..
7760: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
7770: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69     ${Platform} i 7780: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 s either "Win32" 7790: 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66 20 74 or "x64". If t 77a0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a his command is.. 77b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 77c0: 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f 75 73 used, various 77d0: 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71 75 tests that requ 77e0: 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 ire supplementar 77f0: 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 y managed.. 7800: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61 73 # as 7810: 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20 4c semblies (e.g. L 7820: 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b 69 70 INQ) may be skip 7830: 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f 73 65 ped unless those 7840: 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20 20 20 binaries.. 7850: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61 72 # ar 7860: 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 63 e subsequently c 7870: 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65 20 63 opied into the c 7880: 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f 72 79 orrect directory 7890: 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20 20 (i.e. by.. 78a0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 22 74 # "t 78b0: 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a est_all.bat")... 78c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 78d0: 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74 65 20 # Note 78e0: 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 that all of the 78f0: 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20 61 build commands a 7900: 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61 75 6c bove will defaul 7910: 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20 20 t to using.. 7920: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 7930: 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f latest version o 7940: 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69 6c 61 f MSBuild availa 7950: 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74 65 73 ble and the "tes 7960: 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20 20 20 t_year" may.. 7970: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 # nee 7980: 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74 65 64 d to be adjusted 7990: 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f 20 accordingly to 79a0: 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74 68 65 actually run the 79b0: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 79c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 52 65 # Re 79d0: 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d 65 fer to the comme 79e0: 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69 6c 64 nts in [getBuild 79f0: 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20 69 Year] for more i 7a00: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 nformation on.. 7a10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 68 # h 7a20: 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73 20 76 ow to set this v 7a30: 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 ariable... 7a40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 7a50: 20 6e 61 74 69 76 65 20 5b 65 78 70 72 20 7b 21 native [expr {! 7a60: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 26 26 20$managedOnly &&
7a70: 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f  [hasRuntimeOptio
7a80: 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d 0a 0d 0a 20  n native]}]....
7a90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a         return [j
7aa0: 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72  oinBuildDirector
7ab0: 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75  y $native [getBu 7ac0: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 ildBaseDirectory 7ad0: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 7ae0: 20 5b 65 78 70 72 20 7b 24 6d 61 6e 61 67 65 64 [expr {$managed
7af0: 4f 6e 6c 79 20 3f 20 5b 67 65 74 42 75 69 6c 64  Only ? [getBuild
7b00: 59 65 61 72 5d 20 3a 20 5b 67 65 74 42 75 69 6c  Year] : [getBuil
7b10: 64 4e 61 74 69 76 65 59 65 61 72 5d 7d 5d 20 5c  dNativeYear]}] \
7b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
7b30: 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  etBuildPlatform
7b40: 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42 75 69  $native] [getBui 7b50: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d ldConfiguration] 7b60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 7b70: 5b 65 78 70 72 20 7b 24 6d 61 6e 61 67 65 64 4f [expr {$managedO
7b80: 6e 6c 79 20 3f 20 5b 67 65 74 42 75 69 6c 64 45  nly ? [getBuildE
7b90: 78 74 72 61 5d 20 3a 20 22 22 7d 5d 5d 0d 0a 20  xtra] : ""}]]..
7ba0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
7bb0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 65  ..    proc getRe
7bc0: 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d 20  leaseVersion {}
7bd0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
7be0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65    # NOTE: Figure
7bf0: 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 73 65   out the release
7c00: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 73 65   version for use
7c10: 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 64 20   with the build
7c20: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
7c30: 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 63 68   #       when ch
7c40: 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 69 6c  ecking for avail
7c50: 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a  able releases...
7c60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
7c70: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
7c80: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f  ::release_versio
7c90: 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  n] && \..
7ca0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
7cb0: 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72  h $::release_ver 7cc0: 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 sion] > 0} then 7cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 7ce0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 7cf0: 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f e release versio 7d00: 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 n has been overr 7d10: 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 65 idden; therefore 7d20: 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20 20 20 , use it.. 7d30: 20 20 23 20 20 20 20 20 20 20 76 65 72 62 61 74 # verbat 7d40: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a im... #.. 7d50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
7d60: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f  ::release_versio
7d70: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  n..      } else
7d80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
7d90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
7da0: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e   release version
7db0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72   is available, r
7dc0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73  eturn an empty s
7dd0: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  tring...
7de0: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d  #       It is im
7df0: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72  portant to retur
7e00: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  n an empty strin
7e10: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74  g here because t
7e20: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
7e30: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68      result of th
7e40: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79  is procedure may
7e50: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66   be used with [f
7e60: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20  ile join]...
7e70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
7e80: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20  eturn ""..
7e90: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
7ea0: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 46 69   proc getBuildFi
7eb0: 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d  leName { fileNam
7ec0: 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70  e managedOnly {p
7ed0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d  latform ""} } {.
7ee0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7ef0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20  # NOTE: Returns
7f00: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
7f10: 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74  le name as if it
7f20: 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e   were located in
7f30: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
7f40: 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 63 74      build direct
7f50: 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20  ory, discarding
7f60: 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e  any directory in
7f70: 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e  formation presen
7f80: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7f90: 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d   in the file nam
7fa0: 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 62 79  e as provided by
7fb0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...
7fc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
7fd0: 20 72 65 73 75 6c 74 20 5b 66 69 6c 65 20 6e 61   result [file na
7fe0: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
7ff0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
8000: 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74   [getBuildDirect
8010: 6f 72 79 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79  ory $managedOnly 8020: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 ]$platform \..
8030: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
8040: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d  ail $fileName]]] 8050: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 8060: 20 20 20 23 20 48 41 43 4b 3a 20 57 68 65 6e 20 # HACK: When 8070: 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 running on WoW64 8080: 2c 20 61 73 73 75 6d 65 20 74 68 65 20 74 65 73 , assume the tes 8090: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 t executables ar 80a0: 65 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 e present.. 80b0: 20 23 20 20 20 20 20 20 20 77 69 74 68 20 74 68 # with th 80c0: 65 20 22 33 32 22 20 73 75 66 66 69 78 20 6f 6e e "32" suffix on 80d0: 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d them... #. 80e0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75 . if {[isRu 80f0: 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 26 26 20 5b nningWoW64] && [ 8100: 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 24 file extension$
8110: 72 65 73 75 6c 74 5d 20 65 71 20 22 2e 65 78 65  result] eq ".exe
8120: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..
8130: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61     set result [a
8140: 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20  ppendArgs [file
8150: 72 6f 6f 74 6e 61 6d 65 20 24 72 65 73 75 6c 74  rootname $result 8160: 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 20 20 20 20 ] 32.exe].. 8170: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 8180: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
8190: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
81a0: 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74  etExternalDirect
81b0: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
81c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
81d0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
81e0: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
81f0: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
8200: 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 79 0d  external binary.
8210: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
8220: 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 74 65 64  iles are located
8230: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8240: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
8250: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
8260: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72         [file dir
8270: 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61  name [file dirna
8280: 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  me [file dirname
8290: 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d   [info binary]]]
82a0: 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ]]..    }.....
82b0: 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79    proc getBinary
82c0: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
82d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
82e0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
82f0: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68  edure returns th
8300: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72  e directory wher
8310: 65 20 74 68 65 20 74 65 73 74 20 61 70 70 6c 69  e the test appli
8320: 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  cation..      #
8330: 20 20 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e        itself (i.
8340: 65 2e 20 74 68 65 20 45 61 67 6c 65 20 73 68 65  e. the Eagle she
8350: 6c 6c 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20  ll) is located.
8360: 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73   This will be us
8370: 65 64 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20  ed as..      #
8380: 20 20 20 20 20 74 68 65 20 64 65 73 74 69 6e 61       the destina
8390: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70  tion for the cop
83a0: 69 65 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ied System.Data.
83b0: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e  SQLite native an
83c0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
83d0: 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
83e0: 69 65 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73  ies (i.e. becaus
83f0: 65 20 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  e this is one of
8400: 20 74 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d   the few places.
8410: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
8420: 68 65 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c  here the CLR wil
8430: 6c 20 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20  l actually find
8440: 61 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72  and load them pr
8450: 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20  operly)...
8460: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
8470: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61  fo exists ::bina
8480: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  ry_directory] &&
8490: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
84a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 84b0: 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 binary_directory 84c0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 84d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 84e0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f # NOTE: The lo 84f0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 cation of the bi 8500: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 nary directory h 8510: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 8520: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # 8530: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 8540: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e use it verbatim. 8550: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8560: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 return$::b
8570: 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d  inary_directory.
8580: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
8590: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
85a0: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20  [info binary]..
85b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
85c0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78  ..    proc getEx
85d0: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b  ternalFileName {
85e0: 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20   fileName } {..
85f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
8600: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
8610: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65  e specified file
8620: 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77   name as if it w
8630: 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74  ere located in t
8640: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
8650: 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74    directory cont
8660: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72  aining the exter
8670: 6e 61 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20  nal binaries...
8680: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
8690: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  turn [file nativ
86a0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
86b0: 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72   [getExternalDir
86c0: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam 86d0: 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 e]].. }..... 86e0: 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 proc getBinar 86f0: 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 yFileName { file 8700: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 Name {platform " 8710: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d "} } {.. #. 8720: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 8730: 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 eturns the speci 8740: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 fied file name a 8750: 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 s if it were loc 8760: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 ated in the.. 8770: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 # binar 8780: 79 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 y directory, dis 8790: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 carding any dire 87a0: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f ctory informatio 87b0: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 n present.. 87c0: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 87d0: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f file name as pro 87e0: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 87f0: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 8800: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 8810: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 8820: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 8830: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 join [getBinaryD 8840: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 irectory]$platf
8850: 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  orm [file tail $8860: 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 fileName]]].. 8870: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 8880: 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c getCoreBinaryFil 8890: 65 4e 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 eName { {platfor 88a0: 6d 20 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 m ""} {standard 88b0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 88c0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 88d0: 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c Returns the full 88e0: 20 70 61 74 68 20 66 6f 72 20 74 68 65 20 66 69 path for the fi 88f0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 le containing th 8900: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 e SQLite core.. 8910: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 # nat 8920: 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 ive library code 8930: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f for this platfo 8940: 72 6d 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63 rm. First, chec 8950: 6b 20 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 k and see if.. 8960: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 8970: 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 SQLite core nati 8980: 76 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 ve library has a 8990: 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 lready been load 89a0: 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 ed. Next,.. 89b0: 20 20 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61 # fallba 89c0: 63 6b 20 74 6f 20 77 68 61 74 20 74 68 65 20 66 ck to what the f 89d0: 75 6c 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20 ull path should 89e0: 62 65 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65 be, based on whe 89f0: 74 68 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 ther the.. 8a00: 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f # mixed-mo 8a10: 64 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62 de assembly is b 8a20: 65 69 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68 eing used and th 8a30: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 e name of the cu 8a40: 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 rrent.. # 8a50: 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a platform... 8a60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 8a70: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 8a80: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 8a90: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 8aa0: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 8ab0: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 8ac0: 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 8ad0: 69 76 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 iveMethods _SQLi 8ae0: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 teNativeModuleFi 8af0: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 leName.. } 8b00: 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 fileName] == 0 & 8b10: 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 & [string length 8b20: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d$fileName] > 0}
8b30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8b40: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
8b50: 54 45 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63  TE: The SQLite c
8b60: 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  ore native libra
8b70: 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  ry has already b
8b80: 65 65 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a  een loaded via..
8b90: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
8ba0: 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  the native libra
8bb0: 72 79 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20  ry pre-loader.
8bc0: 52 65 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65  Return that file
8bd0: 20 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20   name now...
8be0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
8bf0: 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d  eturn $fileName. 8c00: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8c10: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8c20: 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 E: If the "nativ 8c30: 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f e" runtime optio 8c40: 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 n has been set, 8c50: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 always return th 8c60: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8c70: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 file name for t 8c80: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 he mixed-mode as 8c90: 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 sembly... # 8ca0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 .. if {[has 8cb0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 RuntimeOption na 8cc0: 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tive]} then {.. 8cd0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8ce0: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 8cf0: 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 the mixed-mode 8d00: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 8d10: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a me... #.. 8d20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 8d30: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 8d40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 8d50: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 file join [getBi 8d60: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 naryDirectory]$
8d70: 70 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e  platform System.
8d80: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
8d90: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
8da0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
8db0: 4f 54 45 3a 20 41 72 65 20 77 65 20 61 74 74 65  OTE: Are we atte
8dc0: 6d 70 74 69 6e 67 20 74 6f 20 61 75 74 6f 6d 61  mpting to automa
8dd0: 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 77  tically detect w
8de0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
8df0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
8e00: 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
8e10: 79 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  y should be used
8e20: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ?..      #..
8e30: 20 20 73 65 74 20 61 75 74 6f 6d 61 74 69 63 20    set automatic
8e40: 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c  [expr {[string l
8e50: 65 6e 67 74 68 20 24 73 74 61 6e 64 61 72 64 5d  ength $standard] 8e60: 20 3d 3d 20 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 == 0}].... 8e70: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 8e80: 3a 20 46 69 72 73 74 2c 20 69 6e 20 65 69 74 68 : First, in eith 8e90: 65 72 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f er "automatic" o 8ea0: 72 20 22 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 22 r "non-standard" 8eb0: 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d 70 74 0d modes, attempt. 8ec0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 8ed0: 6f 20 66 69 6e 64 20 74 68 65 20 6e 61 74 69 76 o find the nativ 8ee0: 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 e-only interop a 8ef0: 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 ssembly... 8f00: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 #.. if {$au
8f10: 74 6f 6d 61 74 69 63 20 7c 7c 20 21 24 73 74 61  tomatic || !$sta 8f20: 6e 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 ndard} then {.. 8f30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8f40: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 8f50: 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 t to determine t 8f60: 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 he native-only i 8f70: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 8f80: 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 file.. # 8f90: 20 20 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 name for t 8fa0: 68 69 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 his platform and 8fb0: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e then return it. 8fc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8fd0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 8fe0: 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e eNameOnly [getIn 8ff0: 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c teropAssemblyFil 9000: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 eNamesOnly] {.. 9010: 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c set fil 9020: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 eName [file nati 9030: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 9040: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo 9050: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 in [getBinaryDir 9060: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 ectory]$platfor
9070: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  m $fileNameOnly] 9080: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 9090: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 90a0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
90b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
90c0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65  return $fileName 90d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 90e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 90f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 9100: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 6e # NOTE: Then 9110: 2c 20 69 6e 20 65 69 74 68 65 72 20 22 61 75 74 , in either "aut 9120: 6f 6d 61 74 69 63 22 20 6f 72 20 22 73 74 61 6e omatic" or "stan 9130: 64 61 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74 dard" modes, att 9140: 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 23 empt to.. # 9150: 20 20 20 20 20 20 20 66 69 6e 64 20 74 68 65 20 find the 9160: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 standard SQLite 9170: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 library... 9180: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 #.. if {$au
9190: 74 6f 6d 61 74 69 63 20 7c 7c 20 24 73 74 61 6e  tomatic || $stan 91a0: 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 dard} then {.. 91b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 91c0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 91d0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 to determine th 91e0: 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 e native-only st 91f0: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 andard SQLite li 9200: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 brary.. # 9210: 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 file name 9220: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f for this platfo 9230: 72 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 rm and then retu 9240: 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 rn it... 9250: 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 #.. forea 9260: 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 ch fileNameOnly 9270: 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 [getNativeLibrar 9280: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 yFileNamesOnly] 9290: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 92a0: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 92b0: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 nativename \.. 92c0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 92d0: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 92e0: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
92f0: 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f  tform $fileNameO 9300: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 nly]].... 9310: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi 9320: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
9330: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9340: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65      return $file 9350: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 9360: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 9370: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 9380: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 9390: 57 61 73 20 74 68 65 20 6d 61 6e 61 67 65 64 20 Was the managed 93a0: 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 assembly compile 93b0: 64 20 65 78 70 65 63 74 69 6e 67 20 74 6f 20 64 d expecting to d 93c0: 65 61 6c 20 77 69 74 68 20 74 68 65 0d 0a 20 20 eal with the.. 93d0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 61 6e # stan 93e0: 64 61 72 64 20 63 6f 72 65 20 6c 69 62 72 61 72 dard core librar 93f0: 79 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y?.. #.. 9400: 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 9410: 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant 9420: 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 SQLITE_STANDARD 9430: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 9440: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 9450: 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 NOTE: Fallback t 9460: 6f 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 o returning the 9470: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e native-only stan 9480: 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 dard SQLite libr 9490: 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ary.. # 94a0: 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 file name f 94b0: 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e or the platform. 94c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 94d0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 94e0: 65 73 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 esOnly [getNativ 94f0: 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 eLibraryFileName 9500: 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 sOnly].... 9510: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 if {[llength$
9520: 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d  fileNamesOnly] =
9530: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
9540: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
9550: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
9560: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
9570: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
9580: 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
9590: 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e           [getBin
95a0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 95b0: 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 latform [lindex 95c0: 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30$fileNamesOnly 0
95d0: 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ]]]..      } els
95e0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
95f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
9600: 46 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75  Fallback to retu
9610: 72 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65  rning the native
9620: 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73  -only interop as
9630: 73 65 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20  sembly file..
9640: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d       #       nam
9650: 65 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f  e for the platfo
9660: 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm...        #..
9670: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
9680: 4e 61 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 49 6e  NamesOnly [getIn
9690: 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c  teropAssemblyFil
96a0: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20  eNamesOnly]....
96b0: 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e         if {[llen
96c0: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e  gth $fileNamesOn 96d0: 6c 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ly] == 0} then { 96e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .. retu 96f0: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d rn "".. } 9700: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 .... retu 9710: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 9720: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 9730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 9740: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 etBinaryDirector 9750: 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 y]$platform [li
9760: 6e 64 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f  ndex $fileNamesO 9770: 6e 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 nly 0]]].. 9780: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 9790: 20 70 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 proc getCommonD 97a0: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 97b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 97c0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 97d0: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 97e0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 97f0: 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 the test script 9800: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 9810: 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 should be locat 9820: 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c ed. By default, 9830: 20 74 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 this just retur 9840: 6e 73 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 ns the Eagle.. 9850: 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 # bina 9860: 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 ry directory... 9870: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9880: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9890: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 98a0: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 98b0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 98c0: 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 h$::common_dire
98d0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e  ctory] > 0} then
98e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
98f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
9900: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
9910: 68 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74  he common direct
9920: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74  ory has been set
9930: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
9940: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
9950: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
9960: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9970: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 9980: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 9990: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 99a0: 74 73 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 ts ::vendor_dire 99b0: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 99c0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 99d0: 65 6e 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f ength$::vendor_
99e0: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
99f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9a00: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9a10: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
9a20: 6f 66 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69  of the vendor di
9a30: 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e  rectory has been
9a40: 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23   set;..        #
9a50: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
9a60: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20  , use it...
9a70: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
9a80: 74 75 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64  turn $::vendor_d 9a90: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 9aa0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 9ab0: 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 exists ::tcl_lib 9ac0: 72 61 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 rary] && \.. 9ad0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 9ae0: 6e 67 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 ngth$::tcl_libr
9af0: 61 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20  ary] > 0 && \..
9b00: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69           [file i
9b10: 73 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63  sdirectory $::tc 9b20: 6c 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e l_library]} then 9b30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 9b40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 9b50: 68 65 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 he variable with 9b60: 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 the location of 9b70: 20 74 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 the script libr 9b80: 61 72 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 ary is.. 9b90: 23 20 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 # set and 9ba0: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 appears to be a 9bb0: 72 65 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 real directory ( 9bc0: 69 2e 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 i.e. not embedde 9bd0: 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 9be0: 20 20 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 within a file 9bf0: 29 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 ); therefore, us 9c00: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 9c10: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 9c20: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d$::tcl_library.
9c30: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
9c40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9c50: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c      # NOTE: Fall
9c60: 62 61 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65  back to the dire
9c70: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
9c80: 20 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e   the executable.
9c90: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9ca0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66       return [inf
9cb0: 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20  o binary]..
9cc0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
9cd0: 20 20 70 72 6f 63 20 67 65 74 44 61 74 61 62 61    proc getDataba
9ce0: 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  seDirectory {} {
9cf0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9d00: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
9d10: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
9d20: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68  the directory wh
9d30: 65 72 65 20 74 68 65 20 74 65 73 74 20 64 61 74  ere the test dat
9d40: 61 62 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20  abases..      #
9d50: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
9d60: 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66  located.  By def
9d70: 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20  ault, this just
9d80: 75 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61  uses the tempora
9d90: 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ry..      #
9da0: 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66    directory conf
9db0: 69 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20  igured for this
9dc0: 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23  system...      #
9dd0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
9de0: 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62  o exists ::datab
9df0: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  ase_directory] &
9e00: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
9e10: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 9e20: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 9e30: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { 9e40: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 9e50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The 9e60: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 location of the 9e70: 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 database direct 9e80: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 ory has been ove 9e90: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 rridden;.. 9ea0: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 9eb0: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 9ec0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9ed0: 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 return$::datab
9ee0: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  ase_directory..
9ef0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
9f00: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63  info exists ::sc
9f10: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
9f20: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
9f30: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
9f40: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 9f50: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 9f60: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 9f70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 9f80: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 9f90: 65 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 e scratch direct 9fa0: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 ory has been ove 9fb0: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 rridden;.. 9fc0: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 9fd0: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 9fe0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9ff0: 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 return$::scrat
a000: 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ch_directory..
a010: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
a020: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65        return [ge
a030: 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d  tTemporaryPath].
a040: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
a050: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
a060: 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f  TemporaryDirecto
a070: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ry {} {..      #
a080: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
a090: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72  This procedure r
a0a0: 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63  eturns the direc
a0b0: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74  tory where the t
a0c0: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a  emporary files..
a0d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
a0e0: 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e  ould be located.
a0f0: 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68    By default, th
a100: 69 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65  is just uses the
a110: 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20   temporary..
a120: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
a130: 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66  ory configured f
a140: 6f 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d  or this system..
a150: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
a160: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
a170: 20 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72   ::temporary_dir
a180: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
a190: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
a1a0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72  length $::tempor a1b0: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e ary_directory] > a1c0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. a1d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # a1e0: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 NOTE: The locat a1f0: 69 6f 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f ion of the tempo a200: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 rary directory h a210: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd a220: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # a230: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, a240: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... a250: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu a260: 72 6e 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f rn$::temporary_
a270: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
a280: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f   } elseif {[info
a290: 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63   exists ::scratc
a2a0: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  h_directory] &&
a2b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
a2c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73  ring length $::s a2d0: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 cratch_directory a2e0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. a2f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a300: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f # NOTE: The lo a310: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 cation of the sc a320: 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 ratch directory a330: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid a340: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 den;.. # a350: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, a360: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... a370: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret a380: 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 urn$::scratch_d
a390: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
a3a0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
a3b0: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d    return [getTem
a3c0: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20  poraryPath]..
a3d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
a3e0: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 65 63      proc getExec
a3f0: 75 74 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d  uteOnSetup {} {.
a400: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
a410: 20 65 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74   exists ::execut
a420: 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c  e_on_setup] && \
a430: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
a440: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78  ing length $::ex a450: 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 ecute_on_setup] a460: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. a470: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. a480: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 # NOTE: Return t a490: 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 he configured SQ a4a0: 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 L to execute dur a4b0: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti a4c0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 on.. # a4d0: 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 setup proced a4e0: 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 ure (i.e. for ev a4f0: 65 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 ery test databas a500: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a e connection)... a510: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a520: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 return$::exe
a530: 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20  cute_on_setup..
a540: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
a550: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a560: 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66    # NOTE: By def
a570: 61 75 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e  ault, there is n
a580: 6f 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65  o SQL to execute
a590: 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e   during the conn
a5a0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..
a5b0: 23 20 20 20 20 20 20 20 73 65 74 75 70 20 70 72  #       setup pr
a5c0: 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f  ocedure (i.e. fo
a5d0: 72 20 65 76 65 72 79 20 74 65 73 74 20 64 61 74  r every test dat
a5e0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
a5f0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
a600: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
a610: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
a620: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
a630: 74 53 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c  tStringMapForTcl
a640: 45 73 63 61 70 65 20 7b 7d 20 7b 0d 0a 20 20 20  Escape {} {..
a650: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list
a660: 5c 5c 20 5c 5c 5c 5c 20 5c 5b 20 5c 5c 5c 5b 20  \\ \\\\ $\\\[ a670: 5c 5d 20 5c 5c 5c 5d 20 5c 24 20 5c 5c 5c 24 5d$ \\\] \$\\\$]
a680: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
a690: 70 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72  proc getTestOver
a6a0: 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20  ridesPreamble {
a6b0: 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22  {extraVarNames "
a6c0: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  "} } {..      se
a6d0: 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74  t varNames [list
a6e0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
a6f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61      # NOTE: If a
a700: 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20  vailable, start
a710: 77 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 20  with the master
a720: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65  list of test ove
a730: 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20  rride..      #
a740: 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d       variables..
a750: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
a760: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
a770: 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65   ::test_override
a780: 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  s] && \..
a790: 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74     [llength $::t a7a0: 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e est_overrides] > a7b0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. a7c0: 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 eval lappend a7d0: 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 varNames$::tes
a7e0: 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20  t_overrides..
a7f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
a800: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
a810: 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f  f requested by o
a820: 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61  ur caller, add a
a830: 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61  ny additional va
a840: 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20  riable..      #
a850: 20 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63        names to c
a860: 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  opy now...
a870: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c  #..      if {[ll
a880: 65 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 4e  ength $extraVarN a890: 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ames] > 0} then a8a0: 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 {.. eval a8b0: 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 lappend varNames a8c0: 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d$extraVarNames.
a8d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
a8e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
a8f0: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 72  E: Build the scr
a900: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20  ipt fragment to
a910: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 70  be returned by p
a920: 72 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a  rocessing each..
a930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
a940: 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20  riable name and
a950: 61 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63  adding the necec
a960: 65 73 73 61 72 79 20 73 63 72 69 70 74 20 66 72  essary script fr
a970: 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20  agments for..
a980: 20 20 20 23 20 20 20 20 20 20 20 65 61 63 68 20     #       each
a990: 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  one...      #..
a9a0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result
a9b0: 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65  ""....      fore
a9c0: 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72  ach varName $var a9d0: 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. a9e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO a9f0: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 TE: Build the qu aa00: 61 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 alified global v aa10: 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 ariable name... aa20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. aa30: 20 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d set fullVarNam aa40: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a e [appendArgs :: aa50: 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$varName]....
aa60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
aa70: 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68   # NOTE: Does th
aa80: 65 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74  e variable exist
aa90: 20 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72   in this interpr
aaa0: 65 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20  eter context?..
aab0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
aac0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
aad0: 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d  ts $fullVarName] aae0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. aaf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. ab00: 20 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 # NOTE: Append ab10: 61 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e a script fragmen ab20: 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 t to the result ab30: 74 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 that will correc ab40: 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 tly.. # ab50: 20 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 copy any ab60: 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 contained value ab70: 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 to another inter ab80: 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d preter context.. ab90: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. aba0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 append r abb0: 65 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 esult \n "set " abc0: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c$fullVarName " \
abd0: 7b 22 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5c  {" [string map \
abe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
abf0: 5b 67 65 74 53 74 72 69 6e 67 4d 61 70 46 6f 72  [getStringMapFor
ac00: 54 63 6c 45 73 63 61 70 65 5d 20 5b 73 65 74 20  TclEscape] [set
ac10: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 5d 20 5c  $fullVarName]] \ ac20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. ac30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # ac40: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: ac50: 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f If the result co ac60: 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f ntains one or mo ac70: 72 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 re script fragme ac80: 6e 74 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 nts, append a.. ac90: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 # new aca0: 6c 69 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a line... #.. acb0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin acc0: 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 g length$result
acd0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
ace0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65         append re
acf0: 73 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d  sult \n..      }
ad00: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
ad10: 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. ad20: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 .... proc mov ad30: 65 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 eSystemDataSQLit ad40: 65 44 6c 6c 43 6f 6e 66 69 67 20 7b 20 7b 72 65 eDllConfig { {re ad50: 73 74 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 store false} {ve ad60: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. ad70: 0a 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 . set direc ad80: 74 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 tory [getBinaryD ad90: 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 irectory].... ada0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l adb0: 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 ength$directory
adc0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
add0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver ade0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. adf0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
ae00: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
ae10: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
ae20: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
ae30: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20   skipped moving
ae40: 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \"System.Data.SQ
ae50: 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c  Lite.dll.config\
ae60: 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  ", " \..
ae70: 20 20 20 20 20 20 22 6e 6f 20 62 69 6e 61 72 79        "no binary
ae80: 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a   directory\n"]..
ae90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
aea0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20       return..
aeb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
aec0: 74 20 66 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66  t fileName(1) [f
aed0: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d  ile normalize \.
aee0: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65  .          [file
aef0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory af00: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL af10: 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d ite.dll.config]] af20: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 .... set fi af30: 6c 65 4e 61 6d 65 28 32 29 20 5b 61 70 70 65 6e leName(2) [appen af40: 64 41 72 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 dArgs$fileName(
af50: 31 29 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20  1) .moved]....
af60: 20 20 20 20 69 66 20 7b 24 72 65 73 74 6f 72 65      if {$restore af70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. af80: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis af90: 74 73 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d ts$fileName(2)]
afa0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
afb0: 20 20 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20      file rename
afc0: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 24 66 69  $fileName(2)$fi
afd0: 6c 65 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20  leName(1)....
afe0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb aff0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. b000: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
b010: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
b020: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
b040: 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66  --- moved \"" $f b050: 69 6c 65 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 ileName(2) "\" t b060: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 o \"" \.. b070: 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
b080: 6d 65 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20  me(1) \"\n]..
b090: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
b0a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
b0b0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo b0c0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. b0d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
b0e0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
b0f0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
b110: 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e  -- skipped movin
b120: 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28  g \"" $fileName( b130: 32 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 2) \.. b140: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do b150: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] b160: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. b170: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. b180: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. b190: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis b1a0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d ts$fileName(1)]
b1b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b1c0: 20 20 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20      file rename
b1d0: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 24 66 69  $fileName(1)$fi
b1e0: 6c 65 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20  leName(2)....
b1f0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb b200: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. b210: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
b220: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
b230: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
b250: 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66  --- moved \"" $f b260: 69 6c 65 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 ileName(1) "\" t b270: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 o \"" \.. b280: 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
b290: 6d 65 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20  me(2) \"\n]..
b2a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
b2b0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
b2c0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo b2d0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. b2e0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
b2f0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
b300: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
b320: 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e  -- skipped movin
b330: 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28  g \"" $fileName( b340: 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 1) \.. b350: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do b360: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] b370: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. b380: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. b390: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... b3a0: 20 70 72 6f 63 20 77 72 69 74 65 53 79 73 74 65 proc writeSyste b3b0: 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f mDataSQLiteDllCo b3c0: 6e 66 69 67 20 7b 20 64 61 74 61 20 7b 76 65 72 nfig { data {ver b3d0: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. b3e0: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 set direct b3f0: 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 ory [getBinaryDi b400: 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 rectory].... b410: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le b420: 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d ngth$directory]
b430: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
b440: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb b450: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. b460: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
b470: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
b480: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
b490: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
b4a0: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c  skipped moving \
b4b0: 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
b4c0: 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22  ite.dll.config\"
b4d0: 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  , " \..
b4e0: 20 20 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20       "no binary
b4f0: 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20  directory\n"]..
b500: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
b510: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20      return..
b520: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74    }....      set
b530: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file
b540: 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20  normalize \..
b550: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
b560: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 73  n $directory Sys b570: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. b580: 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a dll.config]].... b590: 20 20 20 20 20 20 77 72 69 74 65 46 69 6c 65 20 writeFile b5a0: 24 66 69 6c 65 4e 61 6d 65 20 24 64 61 74 61 0d$fileName $data. b5b0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 ... if {$ve
b5c0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
b5d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: b5e0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- b600: 2d 20 77 72 6f 74 65 20 5c 22 53 79 73 74 65 6d - wrote \"System b610: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll b620: 2e 63 6f 6e 66 69 67 5c 22 5c 6e 22 0d 0a 20 20 .config\"\n".. b630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r b640: 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d eturn$fileName.
b650: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
b660: 72 6f 63 20 6d 6f 76 65 45 61 67 6c 65 53 68 65  roc moveEagleShe
b670: 6c 6c 4d 64 61 43 6f 6e 66 69 67 20 7b 20 7b 72  llMdaConfig { {r
b680: 65 73 74 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76  estore false} {v
b690: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b  erbose true} } {
b6a0: 0d 0a 20 20 20 20 20 20 73 65 74 20 64 69 72 65  ..      set dire
b6b0: 63 74 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79  ctory [getBinary
b6c0: 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20  Directory]....
b6d0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
b6e0: 6c 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72  length $director b6f0: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. b700: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
b710: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
b720: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $b730: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ b740: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. b750: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- b760: 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 - skipped moving b770: 20 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 \"EagleShell.ex b780: 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c 20 e.mda.config\", b790: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. b7a0: 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 "no binary di b7b0: 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 rectory\n"].. b7c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b7d0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. b7e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 }.... set f b7f0: 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 ileName(1) [file b800: 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 normalize \.. b810: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo b820: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 45 61 in$directory Ea
b830: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61  gleShell.exe.mda
b840: 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20  .config]]....
b850: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28     set fileName(
b860: 32 29 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  2) [appendArgs $b870: 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 fileName(1) .mov b880: 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 ed].... if b890: 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 65 6e 20 {$restore} then
b8a0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
b8b0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil b8c0: 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 65 6e 20 eName(2)]} then b8d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c {.. fil b8e0: 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 e rename$fileNa
b8f0: 6d 65 28 32 29 20 24 66 69 6c 65 4e 61 6d 65 28  me(2) $fileName( b900: 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 1).... b910: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
b920: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b930: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ b940: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA b950: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. b960: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 "---- mov b970: 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 ed \""$fileName
b980: 28 32 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c  (2) "\" to \"" \
b990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
b9a0: 20 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c    $fileName(1) \ b9b0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. b9c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els b9d0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 e {.. i b9e0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
b9f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
ba00: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c ba10: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr ba20: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. ba30: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip ba40: 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 ped moving \""$
ba50: 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 0d 0a 20  fileName(2) \..
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ba70: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
ba80: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
ba90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
baa0: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
bab0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
bac0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil bad0: 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 65 6e 20 eName(1)]} then bae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c {.. fil baf0: 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 e rename$fileNa
bb00: 6d 65 28 31 29 20 24 66 69 6c 65 4e 61 6d 65 28  me(1) $fileName( bb10: 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2).... bb20: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
bb30: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
bb40: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ bb50: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA bb60: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. bb70: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 "---- mov bb80: 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 ed \""$fileName
bb90: 28 31 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c  (1) "\" to \"" \
bba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
bbb0: 20 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c    $fileName(2) \ bbc0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. bbd0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els bbe0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 e {.. i bbf0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
bc00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
bc10: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c bc20: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr bc30: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. bc40: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip bc50: 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 ped moving \""$
bc60: 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 0d 0a 20  fileName(1) \..
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
bc80: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
bc90: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
bca0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
bcb0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
bcc0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 77  }.....    proc w
bcd0: 72 69 74 65 45 61 67 6c 65 53 68 65 6c 6c 4d 64  riteEagleShellMd
bce0: 61 43 6f 6e 66 69 67 20 7b 20 64 61 74 61 20 7b  aConfig { data {
bcf0: 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20  verbose true} }
bd00: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 64 69 72  {..      set dir
bd10: 65 63 74 6f 72 79 20 5b 67 65 74 42 69 6e 61 72  ectory [getBinar
bd20: 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20  yDirectory]....
bd30: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
bd40: 20 6c 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f   length $directo bd50: 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { bd60: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 .. if {$v
bd70: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
bd80: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
bd90: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel bda0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- bdc0: 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e -- skipped movin bdd0: 67 20 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 g \"EagleShell.e bde0: 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c xe.mda.config\", bdf0: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. be00: 20 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 "no binary d be10: 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 irectory\n"].. be20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... be30: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. be40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set be50: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n be60: 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 ormalize \.. be70: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join be80: 20 24 64 69 72 65 63 74 6f 72 79 20 45 61 67 6c$directory Eagl
be90: 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63  eShell.exe.mda.c
bea0: 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  onfig]]....
beb0: 20 77 72 69 74 65 46 69 6c 65 20 24 66 69 6c 65   writeFile $file bec0: 4e 61 6d 65 20 24 64 61 74 61 0d 0a 0d 0a 20 20 Name$data....
bed0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65      if {$verbose bee0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bef0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
bf00: 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
bf10: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 77 72 6f         "---- wro
bf20: 74 65 20 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e  te \"EagleShell.
bf30: 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22  exe.mda.config\"
bf40: 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  \n"..      }....
bf50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69        return $fi bf60: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0c leName.. }... bf70: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 .. proc getAp bf80: 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 pDomainPreamble bf90: 7b 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 { {prefix ""} {s bfa0: 75 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 uffix ""} } {.. bfb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # bfc0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce bfd0: 64 75 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 dure returns a t bfe0: 65 73 74 20 73 65 74 75 70 20 73 63 72 69 70 74 est setup script bff0: 20 66 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62 fragment suitab c000: 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 le for.. # c010: 20 20 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e evaluation c020: 20 62 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74 by an interpret c030: 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e er created in an c040: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 isolated applic c050: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 ation.. # c060: 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 domain. Th c070: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e e script fragmen c080: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 t being returned c090: 20 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e will be surroun c0a0: 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 ded by.. # c0b0: 20 20 20 20 20 20 74 68 65 20 70 72 65 66 69 78 the prefix c0c0: 20 61 6e 64 20 73 75 66 66 69 78 20 22 73 63 72 and suffix "scr c0d0: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 ipt fragments" s c0e0: 70 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 pecified by our c0f0: 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 caller,.. # c100: 20 20 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20 if any. c110: 54 68 65 20 65 6e 74 69 72 65 20 73 63 72 69 70 The entire scrip c120: 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 t being returned c130: 20 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 will be substit c140: 75 74 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 uted via.. c150: 23 20 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c # [subst], c160: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context c170: 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 of our caller, b c180: 65 66 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75 efore being retu c190: 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 rned... # c1a0: 20 20 20 20 20 54 68 69 73 20 73 74 65 70 20 69 This step i c1b0: 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 s necessary so t c1c0: 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 hat some limited c1d0: 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 context informa c1e0: 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 tion,.. # c1f0: 20 20 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72 primarily r c200: 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 74 65 elated to the te c210: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 sting directorie c220: 73 2c 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66 s, can be transf c230: 65 72 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20 erred.. # c240: 20 20 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65 to the inte c250: 72 70 72 65 74 65 72 20 69 6e 20 74 68 65 20 69 rpreter in the i c260: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 solated applicat c270: 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 ion domain, maki c280: 6e 67 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 ng it.. # c290: 20 20 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63 able to suc c2a0: 63 65 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 cessfully run te c2b0: 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65 sts that require c2c0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 one or more of c2d0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # c2e0: 20 20 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 files in one c2f0: 6f 66 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 of the testing d c300: 69 72 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c irectories. Cal c310: 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 lers should keep c320: 20 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 in.. # c330: 20 20 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65 mind that the c340: 20 74 65 73 74 20 73 63 72 69 70 74 20 66 72 61 test script fra c350: 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 gment being retu c360: 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 rned cannot rely c370: 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 on.. # c380: 20 20 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69 any script li c390: 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 73 brary procedures c3a0: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72 that are not pr c3b0: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 45 61 ovided by the Ea c3c0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 gle.. # c3d0: 20 20 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61 library packa c3e0: 67 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 ge (i.e. "init.e c3f0: 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e agle"), includin c400: 67 20 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64 g those provided c410: 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 by.. # c420: 20 20 20 74 68 65 20 45 61 67 6c 65 20 74 65 73 the Eagle tes c430: 74 20 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 t package, unles c440: 73 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 s the file conta c450: 69 6e 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f ining them is lo c460: 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 aded.. # c470: 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 manually via c480: 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 some other mech c490: 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 anism (e.g. by i c4a0: 6e 63 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72 ncluding appropr c4b0: 69 61 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 iate.. # c4c0: 20 20 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71 [package req c4d0: 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 uire] or [source c4e0: 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 ] commands in th c4f0: 65 20 70 72 65 66 69 78 20 6f 72 20 73 75 66 66 e prefix or suff c500: 69 78 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ix.. # c510: 20 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e script fragmen c520: 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 ts). Also, all c530: 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e variable referen c540: 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 ces and all nest c550: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # c560: 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e commands (i.e. c570: 20 74 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65 those in square c580: 20 62 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 brackets) conta c590: 69 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 ined in the fina c5a0: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 l.. # c5b0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment c5c0: 20 77 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 will end up bei c5d0: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 ng evaluated in c5e0: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 the context of t c5f0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # c600: 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 calling interp c610: 72 65 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 reter and not th c620: 65 20 74 61 72 67 65 74 20 69 6e 74 65 72 70 72 e target interpr c630: 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 eter created in c640: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # c650: 20 20 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c isolated appl c660: 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 ication domain u c670: 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 nless the dollar c680: 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 signs and/or sq c690: 75 61 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 uare.. # c6a0: 20 20 20 20 62 72 61 63 6b 65 74 73 20 61 72 65 brackets are c6b0: 20 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 specially quote c6c0: 64 20 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68 d with backslash c6d0: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. c6e0: 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 return [uple c6f0: 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 vel 1 [list subs c700: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 t [appendArgs$p
c710: 72 65 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20  refix {..
c720: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
c730: 54 45 3a 20 54 68 65 20 5c 5b 6f 62 6a 65 63 74  TE: The $object c740: 5c 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62$ command may b
c750: 65 20 6d 69 73 73 69 6e 67 20 69 6e 20 73 6f 6d  e missing in som
c760: 65 20 45 61 67 6c 65 20 63 6f 72 65 0d 0a 20 20  e Eagle core..
c770: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69        #       li
c780: 62 72 61 72 79 20 63 6f 6e 66 69 67 75 72 61 74  brary configurat
c790: 69 6f 6e 73 2e 20 20 43 6c 6f 6e 69 6e 67 20 61  ions.  Cloning a
c7a0: 6e 64 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f  nd using the pro
c7b0: 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 20 20  cedure..
c7c0: 23 20 20 20 20 20 20 20 5c 5b 63 68 61 6e 67 65  #       $change c7d0: 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 NativeRuntimeOpt c7e0: 69 6f 6e 5c 5d 20 6d 61 79 20 68 65 6c 70 20 74 ion$ may help t
c7f0: 6f 20 6d 69 74 69 67 61 74 65 20 74 68 69 73 2e  o mitigate this.
c800: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
c810: 20 20 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65       proc change
c820: 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74  NativeRuntimeOpt
c830: 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
c840: 20 20 20 7b 5b 69 6e 66 6f 20 61 72 67 73 20 63     {[info args c
c850: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69  hangeNativeRunti
c860: 6d 65 4f 70 74 69 6f 6e 5d 7d 20 5c 0d 0a 20 20  meOption]} \..
c870: 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f            {[info
c880: 20 62 6f 64 79 20 63 68 61 6e 67 65 4e 61 74 69   body changeNati
c890: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d  veRuntimeOption]
c8a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
c8b0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
c8c0: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74  changeNativeRunt
c8d0: 69 6d 65 4f 70 74 69 6f 6e 20 5b 68 61 73 52 75  imeOption [hasRu
c8e0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
c8f0: 76 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ve]..        }..
c900: 20 20 20 20 20 20 7d 20 5b 67 65 74 54 65 73 74        } [getTest
c910: 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c  OverridesPreambl
c920: 65 20 5b 6c 69 73 74 20 70 61 74 68 20 74 65 73  e [list path tes
c930: 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66  t_channel]] $suf c940: 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c fix]]].. }... c950: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f .. proc tryCo c960: 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 7b pyExternalFile { c970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 .. fi c980: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d leName {platform c990: 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d ""} {newFileNam c9a0: 65 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 e ""} {verbose t c9b0: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 rue} } {.. c9c0: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 set sourceFileNa c9d0: 6d 65 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 46 me [getExternalF c9e0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
c9f0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  e]....      if {
ca00: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73  ![file exists $s ca10: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 ourceFileName]} ca20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ca30: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
ca40: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
ca50: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch ca60: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg ca70: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. ca80: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped ca90: 20 63 6f 70 79 69 6e 67 20 65 78 74 65 72 6e 61 copying externa caa0: 6c 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 l file \""$sour
cab0: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  ceFileName \..
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
cad0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
cae0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
caf0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
cb00: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
cb10: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
cb20: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c  g length $newFil cb30: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then cb40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set cb50: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b targetFileName [ cb60: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam cb70: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 e$newFileName $cb80: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 platform].. cb90: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. cba0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil cbb0: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary cbc0: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
cbd0: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20  me $platform].. cbe0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... cbf0: 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 set targetDirect cc00: 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ory [file dirnam cc10: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d e$targetFileNam
cc20: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  e]....      if {
cc30: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
cc40: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
cc50: 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63  sts $targetDirec cc60: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tory]} then {.. cc70: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b file mk cc80: 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 dir$targetDirec
cc90: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d  tory..        }.
cca0: 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20  ...        file
ccb0: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75  copy -force $sou ccc0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 rceFileName$tar
ccd0: 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  getFileName..
cce0: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e     }] == 0} then
ccf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
cd00: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe cd10: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. cd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- cd30: 2d 2d 20 63 6f 70 69 65 64 20 65 78 74 65 72 6e -- copied extern cd40: 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 al file from \"" cd50: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
cd60: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20   "\" to \"" \..
cd70: 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67             $targ cd80: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d etFileName \"\n] cd90: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { cda0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs cdb0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
cdc0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
cde0: 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20   failed to copy
cdf0: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72  external file fr
ce00: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi ce10: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. ce20: 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 "\" to \"" ce30: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
ce40: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
ce50: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
ce60: 72 6f 63 20 74 72 79 43 6f 70 79 42 69 6e 61 72  roc tryCopyBinar
ce70: 79 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20  yFile {..
ce80: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61       fileName ma
ce90: 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66  nagedOnly {platf
cea0: 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65  orm ""} {newFile
ceb0: 4e 61 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20  Name ""}..
cec0: 20 20 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74        {verbose t
ced0: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
cee0: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61  set sourceFileNa
cef0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  me [getBinaryFil
cf00: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20  eName $fileName cf10: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20$platform]....
cf20: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
cf30: 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c  xists $sourceFil cf40: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. cf50: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
cf60: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
cf70: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: cf80: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a cf90: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. cfa0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- cfb0: 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 skipped copying cfc0: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" cfd0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
cfe0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
cff0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
d000: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
d010: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
d020: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20     return..
d030: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
d040: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $d050: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 newFileName] > 0 d060: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. d070: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile d080: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 Name [getBuildFi d090: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. d0a0: 20 20 20 20 20 20 24 6e 65 77 46 69 6c 65 4e 61$newFileNa
d0b0: 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20  me $managedOnly d0c0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20$platform]..
d0d0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
d0e0: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69      set targetFi
d0f0: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64  leName [getBuild
d100: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
d110: 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d          $fileNam d120: 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 e$managedOnly $d130: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 platform].. d140: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set d150: 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 targetDirectory d160: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 [file dirname$t
d170: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a  argetFileName]..
d180: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
d190: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  ch {..        if
d1a0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
d1b0: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79  $targetDirectory d1c0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. d1d0: 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 file mkdir d1e0: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79$targetDirectory
d1f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
d200: 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79         file copy
d210: 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46   -force $sourceF d220: 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 ileName$targetF
d230: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d  ileName..      }
d240: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
d250: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: d260: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a d270: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. d280: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c d290: 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c opied binary fil d2a0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
d2b0: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74  ceFileName "\" t
d2c0: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  o \"" \..
d2d0: 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65       $targetFile d2e0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. d2f0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. d300: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
d310: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
d320: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
d330: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65       "---- faile
d340: 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79  d to copy binary
d350: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $d360: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ d370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ d380: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 " to \""$target
d390: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
d3a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
d3b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43  ...    proc tryC
d3c0: 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a  opyBuildFile {..
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
d3e0: 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79  Name managedOnly
d3f0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b   {platform ""} {
d400: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d  newFileName ""}.
d410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 76 65  .            {ve
d420: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d  rbose true} } {.
d430: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
d440: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75  eFileName [getBu
d450: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  ildFileName $fil d460: 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e eName$managedOn
d470: 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d  ly $platform]... d480: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil d490: 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 e exists$source
d4a0: 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  FileName]} then
d4b0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  {..        if {$d4c0: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d verbose} then {. d4d0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs d4e0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
d4f0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
d510: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79  --- skipped copy
d520: 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ing build file \
d530: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  "" $sourceFileNa d540: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. d550: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 "\", it does d560: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a not exist\n"].. d570: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... d580: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 return.. d590: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if d5a0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length d5b0: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e$newFileName] >
d5c0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
d5d0: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69      set targetFi
d5e0: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72  leName [getBinar
d5f0: 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69  yFileName $newFi d600: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
d610: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
d620: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  {..        set t
d630: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
d640: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
d650: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
d660: 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  form]..      }..
d670: 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67  ..      set targ
d680: 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c  etDirectory [fil
d690: 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65  e dirname $targe d6a0: 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 tFileName].... d6b0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { d6c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ d6d0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 file exists$tar
d6e0: 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74  getDirectory]} t
d6f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
d700: 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72   file mkdir $tar d710: 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 getDirectory.. d720: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... d730: 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f file copy -fo d740: 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e rce$sourceFileN
d750: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN d760: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d ame.. }] == d770: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. d780: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
d790: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
d7a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
d7b0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65       "---- copie
d7c0: 64 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f  d build file fro
d7d0: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil d7e0: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 eName "\" to \"" d7f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d800: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
d810: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
d820: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
d830: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha d840: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs d850: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d860: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to d870: 63 6f 70 79 20 62 75 69 6c 64 20 66 69 6c 65 20 copy build file d880: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 from \""$source
d890: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
d8a0: 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c          "\" to \
d8b0: 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  "" $targetFileNa d8c0: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. d8d0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... d8e0: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 proc tryDeleteB d8f0: 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 inaryFile { file d900: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 Name {platform " d910: 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 "} {verbose true d920: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set d930: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 fileName [getBi d940: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
d950: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform d960: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! d970: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
d980: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
d990: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65  .        if {$ve d9a0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 rbose} then {.. d9b0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
d9c0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
d9d0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
d9f0: 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  - skipped deleti
da00: 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  ng binary file \
da10: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ da30: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e da40: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. da50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 }.... r da60: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. da70: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat da80: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete da90: 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30$fileName}] == 0
daa0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dab0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ dac0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA dad0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. dae0: 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 "---- deleted daf0: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" db00: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
db10: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
db20: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
db30: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel db40: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. db50: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- db60: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet db70: 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 e binary file \" db80: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
db90: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
dba0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
dbb0: 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c  ryDeleteBuildFil
dbc0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
dbd0: 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65   fileName manage
dbe0: 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20  dOnly {platform
dbf0: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75  ""} {verbose tru
dc00: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
dc10: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  t fileName [getB
dc20: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69  uildFileName $fi dc30: 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f leName$managedO
dc40: 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  nly $platform].. dc50: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi dc60: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
dc70: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
dc80: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo dc90: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. dca0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
dcb0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
dcc0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
dcd0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
dce0: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
dcf0: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $dd00: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. dd10: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i dd20: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist dd30: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. dd40: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur dd50: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... dd60: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { dd70: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
dd80: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68  eName}] == 0} th
dd90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
dda0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan ddb0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs ddc0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " ddd0: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 ---- deleted bui dde0: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ld file \""$fil
ddf0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
de00: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
de10: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te de20: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe de30: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. de40: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail de50: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 ed to delete bui de60: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ld file \""$fil
de70: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
de80: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
de90: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79      proc tryCopy
dea0: 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20  Assembly {..
deb0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
dec0: 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c   managedOnly {pl
ded0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20  atform ""} {pdb
dee0: 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 74  true} {verbose t
def0: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
df00: 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65  tryCopyBuildFile
df10: 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61   $fileName$mana
df20: 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72  gedOnly $platfor df30: 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 0d m ""$verbose...
df40: 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d  .      if {$pdb} df50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. df60: 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c tryCopyBuildFil df70: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d e [appendArgs \. df80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi df90: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c le rootname$fil
dfa0: 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 6d 61  eName] .pdb] $ma dfb0: 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 nagedOnly$platf
dfc0: 6f 72 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d  orm "" $verbose. dfd0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. dfe0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try dff0: 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 7b DeleteAssembly { e000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 .. fi e010: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d leName {platform e020: 20 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 ""} {pdb true} e030: 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d {verbose true} } e040: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c {.. tryDel e050: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 eteBinaryFile$f
e060: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor e070: 6d 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 m$verbose....
e080: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68      if {$pdb} th e090: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 en {.. tr e0a0: 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c yDeleteBinaryFil e0b0: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d e [appendArgs \. e0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi e0d0: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c le rootname$fil
e0e0: 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c  eName] .pdb] $pl e0f0: 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d atform$verbose.
e100: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
e110: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
e120: 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66  LoadAssembly { f
e130: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
e140: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
e150: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67   set fileName [g
e160: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
e170: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
e180: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  form]....      i
e190: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
e1a0: 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c       set assembl
e1b0: 79 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d  y [object load -
e1c0: 6c 6f 61 64 74 79 70 65 20 46 69 6c 65 20 2d 61  loadtype File -a
e1d0: 6c 69 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  lias $fileName]. e1e0: 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 . }] == 0} e1f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. e200: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT e210: 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 E: Now, add the e220: 6e 65 63 65 73 73 61 72 79 20 74 65 73 74 20 63 necessary test c e230: 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 onstraint... e240: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 #.. a e250: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 ddConstraint [fi e260: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c le rootname [fil e270: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
e280: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ]]....        #.
e290: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
e2a0: 20 47 72 61 62 20 74 68 65 20 69 6d 61 67 65 20   Grab the image
e2b0: 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20  runtime version
e2c0: 66 72 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c  from the assembl
e2d0: 79 20 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20  y because..
e2e0: 20 20 20 23 20 20 20 20 20 20 20 73 65 76 65 72     #       sever
e2f0: 61 6c 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e  al tests rely on
e300: 20 69 74 20 68 61 76 69 6e 67 20 61 20 63 65 72   it having a cer
e310: 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20  tain value...
e320: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e330: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  addConstraint [a
e340: 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20  ppendArgs [file
e350: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20  tail $fileName] e360: 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. e370: 20 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 [$assembly Imag
e380: 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d  eRuntimeVersion]
e390: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
e3a0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
e3b0: 52 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20  Return the full
e3c0: 70 61 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64  path of the load
e3d0: 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  ed file...
e3e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
e3f0: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  urn $fileName.. e400: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e410: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d return "".. } e420: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is e430: 53 51 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 7b SQLiteReady {} { e440: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. e450: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr e460: 6f 63 65 64 75 72 65 20 6d 75 73 74 20 72 65 74 ocedure must ret e470: 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c urn non-zero onl e480: 79 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 y if the SQLite e490: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 native.. # e4a0: 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 61 6e library an e4b0: 64 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 d the System.Dat e4c0: 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 a.SQLite managed e4d0: 20 61 73 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f assembly are lo e4e0: 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 aded.. # e4f0: 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f and ready fo e500: 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes e510: 74 20 73 75 69 74 65 2e 20 20 43 75 72 72 65 6e t suite. Curren e520: 74 6c 79 2c 20 74 68 69 73 20 70 72 6f 63 65 64 tly, this proced e530: 75 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ure.. # e540: 20 20 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c should be cal e550: 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 led only after t e560: 68 65 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d he [tryLoadAssem e570: 62 6c 79 5d 20 70 72 6f 63 65 64 75 72 65 20 68 bly] procedure h e580: 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 as.. # e590: 20 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f been called to e5a0: 20 70 72 6f 62 65 20 66 6f 72 20 74 68 65 20 53 probe for the S e5b0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit e5c0: 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 e managed assemb e5d0: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # e5e0: 20 20 61 6e 64 20 74 68 65 20 5b 63 68 65 63 6b and the [check e5f0: 46 6f 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 ForSQLite] proce e600: 64 75 72 65 20 68 61 73 20 62 65 65 6e 20 63 61 dure has been ca e610: 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f lled to probe fo e620: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # e630: 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 the SQLite nati e640: 76 65 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 ve library; othe e650: 72 77 69 73 65 2c 20 74 68 69 73 20 70 72 6f 63 rwise, this proc e660: 65 64 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c edure will simpl e670: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # e680: 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 7a always return z e690: 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ero... #.. e6a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp e6b0: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68 61 r {.. [ha e6c0: 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 veConstraint Sys e6d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5d tem.Data.SQLite] e6e0: 20 26 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 && [haveConstra e6f0: 69 6e 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20 20 int SQLite].. e700: 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }].. }.... e710: 0a 20 20 20 20 70 72 6f 63 20 6d 61 74 63 68 50 . proc matchP e720: 6c 61 74 66 6f 72 6d 20 7b 20 70 6c 61 74 66 6f latform { platfo e730: 72 6d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d rm } {.. #. e740: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A e750: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 n empty string f e760: 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 or the platform e770: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 62 means that the b e780: 75 69 6c 64 20 69 73 20 6e 6f 74 0d 0a 20 20 20 uild is not.. e790: 20 20 20 23 20 20 20 20 20 20 20 5b 70 72 69 6d # [prim e7a0: 61 72 69 6c 79 5d 20 61 20 6e 61 74 69 76 65 20 arily] a native e7b0: 62 75 69 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 build; therefore e7c0: 2c 20 69 74 20 61 6c 77 61 79 73 20 6d 61 74 63 , it always matc e7d0: 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 hes... #.. e7e0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string e7f0: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
e800: 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  m] == 0} then {.
e810: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
e820: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
e830: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
e840: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6d  # NOTE: If the m
e850: 61 63 68 69 6e 65 20 6e 61 6d 65 20 69 73 20 75  achine name is u
e860: 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 72  navailable, ther
e870: 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 65 6c 73  e is nothing els
e880: 65 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20  e we..      #
e890: 20 20 20 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20      can do...
e8a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
e8b0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
e8c0: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63  tcl_platform(mac
e8d0: 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  hine)]} then {..
e8e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
e8f0: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  alse..      }...
e900: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
e910: 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65  # NOTE: Does the
e920: 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66   specified platf
e930: 6f 72 6d 20 6d 61 74 63 68 20 75 70 20 74 6f 20  orm match up to
e940: 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
e950: 65 73 73 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ess?..      #..
e960: 20 20 20 20 20 69 66 20 7b 24 70 6c 61 74 66 6f       if {$platfo e970: 72 6d 20 65 71 20 5b 6d 61 63 68 69 6e 65 54 6f rm eq [machineTo e980: 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f Platform$::tcl_
e990: 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65  platform(machine
e9a0: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
e9b0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
e9c0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
e9d0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e9e0: 45 3a 20 54 68 65 20 73 70 65 63 69 66 69 65 64  E: The specified
e9f0: 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 20 6e   platform does n
ea00: 6f 74 20 6d 61 74 63 68 20 75 70 20 77 69 74 68  ot match up with
ea10: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20   the platform..
ea20: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
ea30: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
ea40: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  cess...      #..
ea50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
ea60: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  se..    }.....
ea70: 20 20 70 72 6f 63 20 68 61 76 65 53 51 4c 69 74    proc haveSQLit
ea80: 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b  eObjectCommand {
ea90: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
eaa0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74      # NOTE: Is t
eab0: 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d  he [object] comm
eac0: 61 6e 64 20 63 75 72 72 65 6e 74 6c 79 20 61 76  and currently av
ead0: 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20  ailable?..
eae0: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
eaf0: 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20  [expr {[llength
eb00: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f  [info commands o
eb10: 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 5d 0d 0a 20  bject]] > 0}]..
eb20: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
eb30: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
eb40: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 20  ObjectCommand {
eb50: 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20  channel } {..
eb60: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe eb70: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 l "---- checking eb80: 20 66 6f 72 20 5c 22 6f 62 6a 65 63 74 5c 22 20 for \"object\" eb90: 63 6f 6d 6d 61 6e 64 20 75 73 61 67 65 2e 2e 2e command usage... eba0: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b ".... if { ebb0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: ebc0: 6e 6f 28 73 71 6c 69 74 65 4f 62 6a 65 63 74 43 no(sqliteObjectC ebd0: 6f 6d 6d 61 6e 64 29 5d 20 26 26 20 5c 0d 0a 20 ommand)] && \.. ebe0: 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 [haveSQ ebf0: 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman ec00: 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 d]} then {.. ec10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
ec20: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20  el yes\n..
ec30: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
ec40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
ec50: 4f 54 45 3a 20 55 6e 6c 65 73 73 20 77 65 20 61  OTE: Unless we a
ec60: 72 65 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f  re forbidden fro
ec70: 6d 20 64 6f 69 6e 67 20 73 6f 2c 20 61 64 64 20  m doing so, add
ec80: 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  some constraints
ec90: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
eca0: 20 20 74 68 61 74 20 77 69 6c 6c 20 61 6c 6c 6f    that will allo
ecb0: 77 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 74 65  w most of the te
ecc0: 73 74 20 73 75 69 74 65 20 74 6f 20 72 75 6e 20  st suite to run
ecd0: 28 69 2e 65 2e 20 74 68 6f 73 65 0d 0a 20 20 20  (i.e. those..
ece0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
ecf0: 74 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 64  ts that do not d
ed00: 69 72 65 63 74 6c 79 20 72 65 6c 79 20 75 70 6f  irectly rely upo
ed10: 6e 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63  n the [object] c
ed20: 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 20 20  ommand)...
ed30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
ed40: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
ed50: 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 41 73  :no(shimSQLiteAs
ed60: 73 65 6d 62 6c 79 43 6f 6e 73 74 72 61 69 6e 74  semblyConstraint
ed70: 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
ed80: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
ed90: 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 20 20 20  aint SQLite..
eda0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
edb0: 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72  aint SQLiteInter
edc0: 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64  op..          ad
edd0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74  dConstraint Syst
ede0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a  em.Data.SQLite..
edf0: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
ee00: 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44  straint System.D
ee10: 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79  ata.SQLite.Encry
ee20: 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ption..
ee30: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53   addConstraint S
ee40: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
ee50: 65 2e 4c 69 6e 71 0d 0a 0d 0a 20 20 20 20 20 20  e.Linq....
ee60: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
ee70: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  t [appendArgs \.
ee80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
ee90: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
eea0: 65 2e 64 6c 6c 5f 76 20 5b 67 65 74 42 75 69 6c  e.dll_v [getBuil
eeb0: 64 43 6c 72 56 65 72 73 69 6f 6e 5d 5d 0d 0a 20  dClrVersion]]..
eec0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
eed0: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
eee0: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53  xists ::no(shimS
eef0: 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
ef00: 61 6e 74 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  antConstraints)]
ef10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
ef20: 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69      foreach defi
ef30: 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74  neConstant [list
ef40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ef50: 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53    INTEROP_EXTENS
ef60: 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e  ION_FUNCTIONS IN
ef70: 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 4e  TEROP_FTS5_EXTEN
ef80: 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
ef90: 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4a 53        INTEROP_JS
efa0: 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e  ON1_EXTENSION IN
efb0: 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45  TEROP_PERCENTILE
efc0: 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45              INTE
efe0: 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e  ROP_REGEXP_EXTEN
eff0: 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53  SION INTEROP_TES
f000: 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20  T_EXTENSION \..
f010: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54               INT
f020: 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54  EROP_SESSION_EXT
f030: 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 53  ENSION INTEROP_S
f040: 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d  HA1_EXTENSION \.
f050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49  .              I
f060: 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58  NTEROP_TOTYPE_EX
f070: 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f  TENSION INTEROP_
f080: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c 0d  VIRTUAL_TABLE \.
f090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55  .              U
f0a0: 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 5d 20  SE_INTEROP_DLL]
f0b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  {..            a
f0c0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  ddConstraint [ap
f0d0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
f0f0: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
f100: 74 61 6e 74 50 72 65 66 69 78 5d 20 24 64 65 66  tantPrefix] $def f110: 69 6e 65 43 6f 6e 73 74 61 6e 74 5d 0d 0a 20 20 ineConstant].. f120: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. f130: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... f140: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist f150: 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 s ::no(shimSQLit f160: 65 56 69 73 75 61 6c 53 74 75 64 69 6f 43 6f 6e eVisualStudioCon f170: 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e straints)]} then f180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 {.. ad f190: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app f1a0: 65 6e 64 41 72 67 73 20 76 69 73 75 61 6c 53 74 endArgs visualSt f1b0: 75 64 69 6f 20 5b 67 65 74 42 75 69 6c 64 59 65 udio [getBuildYe f1c0: 61 72 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d ar]].. }. f1d0: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs f1e0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a$channel no\n..
f1f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
f200: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 61 6e  ...    proc chan
f210: 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f  geNativeRuntimeO
f220: 70 74 69 6f 6e 20 7b 20 6e 61 74 69 76 65 20 7d  ption { native }
f230: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c   {..      if {[l
f240: 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d  length [info com
f250: 6d 61 6e 64 73 20 64 65 62 75 67 5d 5d 20 3e 20  mands debug]] >
f260: 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  0 && \..
f270: 20 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f    [llength [info
f280: 20 73 75 62 63 6f 6d 6d 61 6e 64 73 20 64 65 62   subcommands deb
f290: 75 67 20 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e  ug runtimeoption
f2a0: 5d 5d 20 3e 20 30 20 26 26 20 5b 63 61 74 63 68  ]] > 0 && [catch
f2b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75   {..        debu
f2c0: 67 20 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 20  g runtimeoption
f2d0: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f  [expr {$native ? f2e0: 20 22 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 65 "add" : "remove f2f0: 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 "}] native.. f300: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 }] == 0} then f310: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur f320: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. f330: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 ... if {[ha f340: 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo f350: 6d 6d 61 6e 64 5d 20 26 26 20 5b 63 61 74 63 68 mmand] && [catch f360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 {.. obje f370: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp f380: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive f390: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f [expr {$native ?
f3a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f3b0: 22 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f  "AddRuntimeOptio
f3c0: 6e 22 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74  n" : "RemoveRunt
f3d0: 69 6d 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74  imeOption"}] nat
f3e0: 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d  ive..      }] ==
f3f0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
f400: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
f410: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
f420: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
f430: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
f440: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
f450: 65 42 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65  eBuilds { channe
f460: 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d  l {select false}
f470: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
f480: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
f490: 63 6b 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73  ck for every pos
f4a0: 73 69 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62  sible valid comb
f4b0: 69 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65  ination of value
f4c0: 73 20 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20  s used when..
f4d0: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74     #       locat
f4e0: 69 6e 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c  ing out the buil
f4f0: 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f  d output directo
f500: 72 79 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68  ry, showing each
f510: 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..
f520: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
f530: 76 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20  variation along
f540: 74 68 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20  the way...
f550: 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  #..      foreach
f560: 20 6e 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61   native [list fa
f570: 6c 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20  lse true] {..
f580: 20 20 20 20 20 66 6f 72 65 61 63 68 20 79 65 61       foreach yea
f590: 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73  r [getBuildYears
f5a0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  ] {..          f
f5b0: 6f 72 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61  oreach configura
f5c0: 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f  tion [getBuildCo
f5d0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d  nfigurations] {.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
f5f0: 65 61 63 68 20 65 78 74 72 61 20 5b 67 65 74 42  each extra [getB
f600: 75 69 6c 64 45 78 74 72 61 73 5d 20 7b 0d 0a 20  uildExtras] {..
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
f630: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
f640: 20 74 68 65 20 65 66 66 65 63 74 69 76 65 20 62   the effective b
f650: 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20  uild platform.
f660: 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20  This is..
f670: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
f680: 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20  ased on whether
f690: 6f 72 20 6e 6f 74 20 61 20 5b 70 72 69 6d 61 72  or not a [primar
f6a0: 69 6c 79 5d 20 6e 61 74 69 76 65 20 62 75 69 6c  ily] native buil
f6b0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..
f6c0: 20 23 20 20 20 20 20 20 20 69 73 20 62 65 69 6e   #       is bein
f6d0: 67 20 75 73 65 64 2e 20 20 46 6f 72 20 5b 70 72  g used.  For [pr
f6e0: 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74  imarily] non-nat
f6f0: 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a 20 20 20  ive builds,..
f700: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
f710: 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20     this will be
f720: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  an empty string.
f730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f740: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
f750: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67   set platform [g
f760: 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  etBuildPlatform
f770: 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20  $native].... f780: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs f790: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
f7a0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
f7b0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
f7c0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73  checking for Sys
f7d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
f7e0: 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20  build \"" [expr
f7f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
f800: 20 20 20 20 20 7b 24 6e 61 74 69 76 65 20 3f 20       {$native ? f810: 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d "native/" : ""}] f820: 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 [expr {[string f830: 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 length \.. f840: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61$pla
f850: 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70  tform] > 0 ? [ap
f860: 70 65 6e 64 41 72 67 73 20 24 70 6c 61 74 66 6f  pendArgs $platfo f870: 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 rm /] : ""}]$ye
f880: 61 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ar \..
f890: 20 20 20 20 20 20 20 20 2f 20 24 63 6f 6e 66 69          / $confi f8a0: 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e 2e 2e 20 guration "\"... f8b0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... f8c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. f8d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui f8e0: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 ld the fully qua f8f0: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 lified directory f900: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 where the neces f910: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 sary.. f920: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 # comp f930: 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 onents for Syste f940: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 m.Data.SQLite sh f950: 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a ould be found... f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. f970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 . s f980: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f et directory [jo f990: 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 inBuildDirectory f9a0: 20 24 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20$native \..
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
f9c0: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63  etBuildBaseDirec
f9d0: 74 6f 72 79 5d 20 24 79 65 61 72 20 24 70 6c 61  tory] $year$pla
f9e0: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61  tform $configura f9f0: 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 tion \.. fa00: 20 20 20 20 20 20 20 20 20 20 24 65 78 74 72 61$extra
fa10: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
fa20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
fa30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 20 74      # NOTE: Do t
fa40: 68 65 20 6e 65 63 65 73 73 61 72 79 20 66 69 6c  he necessary fil
fa50: 65 73 20 65 78 69 73 74 3f 20 20 43 75 72 72 65  es exist?  Curre
fa60: 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 72 20 73  ntly, no other s
fa70: 74 65 70 73 0d 0a 20 20 20 20 20 20 20 20 20 20  teps..
fa80: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20      #       are
fa90: 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 66 79 20  taken to verify
faa0: 74 68 69 73 20 62 75 69 6c 64 20 69 73 20 61 63  this build is ac
fab0: 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 2e 0d 0a  tually viable...
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
fad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
fae0: 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 69 6c  f {[isBuildAvail
faf0: 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24 64 69  able $native$di
fb00: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
fb10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
fb20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
fb30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65       # NOTE: Whe
fb40: 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f  n in "select" mo
fb50: 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  de, automaticall
fb60: 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72  y select the fir
fb70: 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..
fb80: 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69      #       avai
fb90: 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53  lable build of S
fba0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
fbb0: 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72  e and then retur
fbc0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..
fbd0: 20 20 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64     #       immed
fbe0: 69 61 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20  iately...
fbf0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
fc10: 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63  $select && [matc fc20: 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 hPlatform$platf
fc30: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fc50: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
fc60: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e       # NOTE: Man
fc70: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61  ually override a
fc80: 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  ll the build dir
fc90: 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e  ectory selection
fca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
fcb0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 61      #       rela
fcc0: 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e 67  ted test setting
fcd0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f  s in order to fo
fce0: 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a  rce this build..
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fd00: 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73    #       of Sys
fd10: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
fd20: 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20  to be used...
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
fd40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
fd50: 20 20 20 20 69 66 20 7b 21 5b 63 68 61 6e 67 65      if {![change
fd60: 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74  NativeRuntimeOpt
fd70: 69 6f 6e 20 24 6e 61 74 69 76 65 5d 7d 20 74 68  ion $native]} th fd80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. fd90: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs fda0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
fdb0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fdd0: 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74 6f 20 22  "no, failed to "
fde0: 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20   [expr {$native fdf0: 3f 20 22 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 ? "add" : "remov fe00: 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 e"}] \.. fe10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fe20: 22 20 74 68 65 20 5c 22 6e 61 74 69 76 65 5c 22 " the \"native\" fe30: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 5c runtime option\ fe40: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... fe50: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur fe60: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 n false.. fe70: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fe90: 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 set ::test_yea fea0: 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20 r$year..
feb0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
fec0: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24  :test_platform $fed0: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. fee0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set fef0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura ff00: 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 tion$configurat
ff10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....
ff20: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $ff30: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA ff40: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. ff50: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79 65 "ye ff60: 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 5b s, selected (" [ ff70: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
ff80: 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d  "native/" : ""}]
ff90: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ffa0: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
ffb0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
ffc0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f  $platform] > 0 ? ffd0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fff0: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20$platform
10000 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20  /] : ""}] $year 10010 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e /$configuration
10020 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10030 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
10040 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
10050 24 65 78 74 72 61 5d 20 3e 20 30 20 3f 20 5b 61  $extra] > 0 ? [a 10060 70 70 65 6e 64 41 72 67 73 20 2f 20 5c 0d 0a 20 ppendArgs / \.. 10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10080 20 20 20 20 20 24 65 78 74 72 61 5d 20 3a 20 22$extra] : "
10090 22 7d 5d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20  "}] ")\n"]....
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
100b0 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
100d0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
100e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $100f0 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 channel yes\n.. 10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 10110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10120 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 10130 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 10140 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
10170 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
10180 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
10190 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
101a0 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alse..    }.....
101b0 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f      proc checkFo
101c0 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20  rSQLiteReleases
101d0 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63  { channel {selec
101e0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
101f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
10200 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 70  OTE: Check for p
10210 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66 20  ast releases of
10220 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
10230 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 63 74  te in the direct
10240 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ory..      #
10250 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20     contained in
10260 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61  the "System.Data
10270 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f 6e  .SQLite" environ
10280 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 69  ment variable, i
10290 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  f..      #
102a0 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20   present...
102b0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
102c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76  nfo exists ::env
102d0 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  (System.Data.SQL
102e0 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ite)] && \..
102f0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
10300 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 74  ngth $::env(Syst 10310 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d em.Data.SQLite)] 10320 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 10330 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10340 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 10350 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 he fully qualifi 10360 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 ed directory whe 10370 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 re the necessary 10380 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 10390 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 components for 103a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 103b0 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f ite should be fo 103c0 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d und... #. 103d0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 . set dir 103e0 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61 74 ectory [file nat 103f0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 10400 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 10410 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e$::env(System.
10420 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 65  Data.SQLite) [ge
10430 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 5d  tReleaseVersion]
10440 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70  ]]....        tp
10450 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 10460 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 10470 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 10480 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 10490 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 m.Data.SQLite re 104a0 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 lease \"" \.. 104b0 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63 74$direct
104c0 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d  ory "\"... "]...
104d0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73  .        if {[is
104e0 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65  ReleaseAvailable
104f0 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c 61 74   $directory plat 10500 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 form]} then {.. 10510 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st 10520 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
10530 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65  tform] == 0} the
10540 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
10550 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e   set platform un
10560 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  known..
10570 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
10580 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b  if {$select && [ 10590 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 matchPlatform$p
105a0 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b  latform]} then {
105b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
105c0 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74  t ::build_direct
105d0 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a  ory $directory.. 105e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 105f0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
10600 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73  pendArgs "yes, s
10610 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74  elected (" $plat 10620 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 form ")\n"].... 10630 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 10640 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 10650 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 10660 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
10670 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
10680 67 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74  gs "yes (" $plat 10690 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 form ")\n"].. 106a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 106b0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 106c0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
106d0 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20  nnel no\n....
106e0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c         if {![fil
106f0 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74  e exists $direct 10700 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ory] || \.. 10710 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 ![file 10720 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 isdirectory$dir
10730 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
10740 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
10750 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 10760 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 10770 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 10780 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 10790 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 iable \"System.D 107a0 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 ata.SQLite\" is 107b0 61 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 an " \.. 107c0 20 20 20 20 20 20 20 20 22 69 6e 76 61 6c 69 64 "invalid 107d0 20 64 69 72 65 63 74 6f 72 79 2c 20 73 6b 69 70 directory, skip 107e0 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 ping check for r 107f0 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a eleases...\n"].. 10800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 10810 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. 10820 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 10830 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 foreach pat 10840 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61 h [lsort -decrea 10850 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20 sing [file list 10860 24 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b$directory *]] {
10870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
10880 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $10890 70 61 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69 path] && [file i 108a0 73 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 sdirectory$path
108b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
108c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $108d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 108e0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 108f0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 10900 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst 10910 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 em.Data.SQLite r 10920 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 elease \"" \.. 10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10940 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d$path "\"... "].
10950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
10960 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41   if {[isReleaseA
10970 76 61 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70  vailable $path p 10980 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { 10990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 109a0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 109b0 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 ngth$platform]
109c0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
109e0 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b  set platform unk
109f0 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  nown..
10a00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
10a10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24             if {$10a20 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 select && [match 10a30 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f Platform$platfo
10a40 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  rm]} then {..
10a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
10a60 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  et ::build_direc
10a70 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20  tory $path.... 10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10a90 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
10aa0 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c  appendArgs "yes,
10ab0 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c   selected (" $pl 10ac0 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d atform ")\n"]... 10ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10ae0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10b00 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 10b10 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10b20 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10b30 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24  ndArgs "yes (" $10b40 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. 10b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10b60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 10b70 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 10b80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10b90 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
10ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
10bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
10bc0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
10bd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
10be0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
10bf0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 10c00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 10c10 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 10c20 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 10c30 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 iable \"System.D 10c40 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 ata.SQLite\" is 10c50 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 not " \.. 10c60 20 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70 "set, skipp 10c70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 ing check for re 10c80 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 leases...\n"].. 10c90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10ca0 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 10cb0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 10cc0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c checkForSQLiteL 10cd0 69 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c ibrary { channel 10ce0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput 10cf0 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
10d00 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51   checking for SQ
10d10 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
10d20 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  y... "....
10d30 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
10d40 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
10d50 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
10d60 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
10d70 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
10d80 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
10d90 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20  SQLiteVersion..
10da0 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20       } version]
10db0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
10dc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10dd0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
10de0 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76  f the returned v
10df0 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e  ersion was null.
10e00 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74    If so, make it
10e10 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23   easy..        #
10e20 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d         to spot..
10e30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
10e40 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
10e50 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d  length $version] 10e60 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 10e70 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 set ver 10e80 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 sion null.. 10e90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 10ea0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10eb0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 E: Attempt to qu 10ec0 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 ery the Fossil s 10ed0 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 ource identifier 10ee0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d for the SQLite. 10ef0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 10f00 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a core library... 10f10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10f20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 10f30 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 10f40 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 10f50 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 10f60 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 10f70 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 10f80 51 4c 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75 QLite3 SQLiteSou 10f90 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d rceId.. } 10fa0 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e sourceId]} then 10fb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 10fc0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 10fd0 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 E: We failed to 10fe0 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c query the Fossil 10ff0 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 source identifi 11000 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # 11010 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 11020 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e sourceId unknown 11030 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 11040 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11050 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 11060 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 if the returned 11070 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id 11080 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c entifier was nul 11090 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 l. If.. 110a0 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 # so, make 110b0 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 it easy to spot 110c0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 110d0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 110e0 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 g length$source
110f0 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  Id] == 0} then {
11100 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
11110 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20  sourceId null..
11120 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
11130 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
11140 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20   NOTE: Yes, the
11150 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
11160 61 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62  ary appears to b
11170 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  e available...
11180 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11190 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53   addConstraint S
111a0 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20  QLite....
111b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
111c0 54 45 3a 20 52 65 63 6f 72 64 20 76 65 72 73 69  TE: Record versi
111d0 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65  on of the SQLite
111e0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 66 6f   core library fo
111f0 72 20 6c 61 74 65 72 20 75 73 65 0d 0a 20 20 20  r later use..
11200 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 20       #       by
11210 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20  test constraint
11220 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 65 74 63  expressions, etc
11230 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
11240 20 68 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20   has..        #
11250 20 20 20 20 20 20 61 6c 72 65 61 64 79 20 62 65        already be
11260 65 6e 20 73 65 74 20 28 6f 72 20 6f 76 65 72 72  en set (or overr
11270 69 64 64 65 6e 29 2c 20 73 6b 69 70 20 73 65 74  idden), skip set
11280 74 69 6e 67 20 69 74 2e 0d 0a 20 20 20 20 20 20  ting it...
11290 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
112a0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
112b0 3a 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f 76 65  :core_library_ve
112c0 72 73 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a  rsion]} then {..
112d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
112e0 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f 76 65 72  core_library_ver
112f0 73 69 6f 6e 20 24 76 65 72 73 69 6f 6e 0d 0a 20  sion $version.. 11300 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 11310 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
11320 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
11330 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20  yes (" $version 11340 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 " "$sourceId ")
11350 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  \n"]..      } el
11360 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
11370 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ 11380 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 n.. }.. 11390 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 113a0 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 heckForSQLiteInt 113b0 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d erop { channel } 113c0 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs 113d0 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
113e0 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69  hecking for SQLi
113f0 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
11400 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  bly... "....
11410 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
11420 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
11430 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
11440 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
11450 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
11460 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
11470 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e  3 InteropVersion
11480 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f  ..      } versio
11490 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  n] == 0} then {.
114a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
114b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
114c0 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65  k if the returne
114d0 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75  d version was nu
114e0 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65  ll.  If so, make
114f0 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20   it easy..
11500 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f    #       to spo
11510 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
11520 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
11530 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69  ng length $versi 11540 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { 11550 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 11560 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 version null.. 11570 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 11580 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 11590 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 115a0 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 query the Fossi 115b0 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 l source identif 115c0 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 ier for the SQLi 115d0 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 te.. # 115e0 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 core library 115f0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11600 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 11610 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 11620 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 11630 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 11640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 11650 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 11660 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f e.SQLite3 Intero 11670 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 pSourceId.. 11680 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 } sourceId]} 11690 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 116a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 116b0 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 NOTE: We failed 116c0 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 116d0 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 116e0 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 tifier... 116f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 11700 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b set sourceId unk 11710 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d nown.. }. 11720 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11730 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 11740 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 eck if the retur 11750 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 ned Fossil sourc 11760 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 e identifier was 11770 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 null. If.. 11780 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 # so, 11790 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 make it easy to 117a0 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # 117b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s 117c0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f tring length$so
117d0 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68  urceId] == 0} th
117e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
117f0 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c  set sourceId nul
11800 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  l..        }....
11810 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11820 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f 72     # NOTE: Befor
11830 65 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69 6e  e actually addin
11840 67 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74  g the test const
11850 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72 65  raint, make sure
11860 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
11870 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69 73        version is
11880 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f 74   valid (i.e. not
11890 20 6a 75 73 74 20 74 68 61 74 20 77 65 20 63 6f   just that we co
118a0 75 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d 0a  uld query it)...
118b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
118c0 20 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e 20     if {$version 118d0 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 ne "null"} then 118e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 118f0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 11900 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74 : Yes, the SQLit 11910 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 11920 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 ly appears to be 11930 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... 11940 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11950 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 11960 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d t SQLiteInterop. 11970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 11980 20 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20 20 answer yes.. 11990 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 119a0 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 set ans 119b0 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20 20 wer no.. 119c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 }.... tpu 119d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
119e0 65 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72 20  endArgs $answer 119f0 22 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 " ("$version "
11a00 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e  " $sourceId ")\n 11a10 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 "].. } else 11a20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 11a30 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
11a40 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
11a50 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
11a60 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e  ckForSQLiteDefin
11a70 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e  eConstant { chan
11a80 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20  nel name } {..
11a90 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 11aa0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 11ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- 11ac0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 11ad0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 11ae0 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e e define constan 11af0 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 t \""$name \..
11b00 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20           "\"...
11b10 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  "]....      if {
11b20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
11b30 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
11b40 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
11b50 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
11b60 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
11b70 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69  ite.SQLite3 Defi
11b80 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  neConstants..
11b90 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74     } defineConst
11ba0 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ants] == 0} then
11bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
11bc0 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact
11bd0 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43  -nocase $defineC 11be0 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 onstants$name]
11bf0 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20  != -1} then {..
11c00 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
11c10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
11c20 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63  s, this define c
11c30 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62  onstant was enab
11c40 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e  led when the man
11c50 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  aged..
11c60 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
11c70 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a   was compiled...
11c80 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
11c90 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
11ca0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
11cb0 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e   [getSQLiteDefin
11cc0 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d  eConstantPrefix]
11cd0 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20   $name].... 11ce0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
11cf0 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
11d00 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
11d10 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 11d20 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 annel no\n.. 11d30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 11d40 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 11d50 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 puts$channel er
11d60 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  ror\n..      }..
11d70 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
11d80 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
11d90 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 7b  eCompileOption {
11da0 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20   channel name }
11db0 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  {..      tputs $11dc0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 11dd0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 11de0 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 11df0 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 for SQLite inter 11e00 6f 70 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 op assembly comp 11e10 69 6c 65 20 6f 70 74 69 6f 6e 20 5c 22 22 20 5c ile option \"" \ 11e20 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d ..$nam
11e30 65 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20  e "\"... "]....
11e40 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
11e50 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
11e60 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
11e70 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
11e80 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
11e90 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
11ea0 69 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70  ite3 InteropComp
11eb0 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20  ileOptions..
11ec0 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f    } compileOptio
11ed0 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ns] == 0} then {
11ee0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c  ..        if {[l
11ef0 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e  search -exact -n
11f00 6f 63 61 73 65 20 24 63 6f 6d 70 69 6c 65 4f 70  ocase $compileOp 11f10 74 69 6f 6e 73 20 24 6e 61 6d 65 5d 20 21 3d 20 tions$name] !=
11f20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..
11f30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11f40 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
11f50 74 68 69 73 20 63 6f 6d 70 69 6c 65 20 6f 70 74  this compile opt
11f60 69 6f 6e 20 77 61 73 20 65 6e 61 62 6c 65 64 20  ion was enabled
11f70 77 68 65 6e 20 74 68 65 20 69 6e 74 65 72 6f 70  when the interop
11f80 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
11f90 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73      assembly was
11fa0 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20   compiled...
11fb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11fc0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
11fd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65   [appendArgs [ge
11fe0 74 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70  tSQLiteCompileOp
11ff0 74 69 6f 6e 50 72 65 66 69 78 5d 20 24 6e 61 6d  tionPrefix] $nam 12000 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e].... 12010 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
12020 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20  es\n..        }
12030 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
12040 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12050 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d no\n.. } 12060 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 12070 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 12080 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e$channel error\n
12090 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
120a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 120b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 120c0 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d . "---- 120d0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 checking for SQ 120e0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 120f0 79 20 63 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e y compile option 12100 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 12110 20 20 24 6e 61 6d 65 20 22 5c 22 2e 2e 2e 20 22$name "\"... "
12120 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
12130 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
12140 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
12150 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
12160 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12170 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
12180 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74  te.SQLite3 SQLit
12190 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d  eCompileOptions.
121a0 0a 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65  .      } compile
121b0 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74  Options] == 0} t
121c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
121d0 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61  f {[lsearch -exa
121e0 63 74 20 2d 6e 6f 63 61 73 65 20 24 63 6f 6d 70  ct -nocase $comp 121f0 69 6c 65 4f 70 74 69 6f 6e 73 20 24 6e 61 6d 65 ileOptions$name
12200 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d  ] != -1} then {.
12210 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
12220 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
12230 59 65 73 2c 20 74 68 69 73 20 63 6f 6d 70 69 6c  Yes, this compil
12240 65 20 6f 70 74 69 6f 6e 20 77 61 73 20 65 6e 61  e option was ena
12250 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 53 51  bled when the SQ
12260 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Lite..
12270 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62  #       core lib
12280 72 61 72 79 20 77 61 73 20 63 6f 6d 70 69 6c 65  rary was compile
12290 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  d...          #.
122a0 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f  .          addCo
122b0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
122c0 41 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 43  Args [getSQLiteC
122d0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 50 72 65 66  ompileOptionPref
122e0 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20  ix] $name].... 122f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
12300 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..
12310 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
12320 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
12330 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. 12340 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 12350 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 12360 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
12370 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20   error\n..
12380 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
12390 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d   proc getDateTim
123a0 65 46 6f 72 6d 61 74 20 7b 20 7b 74 69 6d 65 5a  eFormat { {timeZ
123b0 6f 6e 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  one true} } {..
123c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
123d0 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
123e0 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75  dure simply retu
123f0 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74  rns the "default
12400 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  " DateTime forma
12410 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20  t used..      #
12420 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73        by the tes
12430 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...
12440 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
12450 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65  fo exists ::date
12460 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20  time_format] &&
12470 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
12480 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64  ring length $::d 12490 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 atetime_format] 124a0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 124b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 124c0 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 # NOTE: Return t 124d0 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 he manually over 124e0 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 ridden value for 124f0 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f the DateTime fo 12500 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 rmat... # 12510 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 12520 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72$::datetime_for
12530 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  mat..      } els
12540 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
12550 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
12560 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30  Return an ISO860
12570 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61  1 DateTime forma
12580 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  t compatible wit
12590 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20  h SQLite,..
125a0 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65     #       Syste
125b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61  m.Data.SQLite, a
125c0 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20  nd suitable for
125d0 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77  round-tripping w
125e0 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ith the..
125f0 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d   #       DateTim
12600 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66  e class of the f
12610 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68  ramework.  If th
12620 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e  is value is chan
12630 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  ged,..        #
12640 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65        various te
12650 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20  sts may fail...
12660 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12670 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64    return [append
12680 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
12690 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20      "yyyy-MM-dd
126a0 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46  HH:mm:ss.FFFFFFF
126b0 22 20 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f  " [expr {$timeZo 126c0 6e 65 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d ne ? "K" : ""}]] 126d0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 126e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 126f0 74 44 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b tDateTimeTicks { 12700 20 76 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22 value {local "" 12710 7d 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d } {default ""} } 12720 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 {.. if {[s 12730 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
12740 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  lue] == 0} then
12750 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
12760 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20  n $default.. 12770 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 12780 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 12790 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 set dateTime 127a0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d [object invoke - 127b0 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20 create \.. 127c0 20 20 20 20 20 20 2d 70 61 72 61 6d 65 74 65 72 -parameter 127d0 74 79 70 65 73 20 5b 6c 69 73 74 20 53 74 72 69 types [list Stri 127e0 6e 67 20 53 74 72 69 6e 67 20 49 46 6f 72 6d 61 ng String IForma 127f0 74 50 72 6f 76 69 64 65 72 20 5c 0d 0a 20 20 20 tProvider \.. 12800 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 12810 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 2e 44 61 Globalization.Da 12820 74 65 54 69 6d 65 53 74 79 6c 65 73 5d 20 44 61 teTimeStyles] Da 12830 74 65 54 69 6d 65 20 50 61 72 73 65 45 78 61 63 teTime ParseExac 12840 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 12850 20 24 76 61 6c 75 65 20 5b 67 65 74 44 61 74 65$value [getDate
12860 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e 75 6c 6c  TimeFormat] null
12870 20 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73   AdjustToUnivers
12880 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d 7d 20 74  al]..      }]} t
12890 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
128a0 65 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a  eturn $default.. 128b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 128c0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 if {[string is 128d0 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 63 74 20 boolean -strict 128e0 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e 20 7b 0d$local]} then {.
128f0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74  .        set dat
12900 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e  eTime [object in
12910 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 61 74  voke -create Dat
12920 65 54 69 6d 65 20 53 70 65 63 69 66 79 4b 69 6e  eTime SpecifyKin
12930 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d \..
12940 20 24 64 61 74 65 54 69 6d 65 20 55 74 63 5d 0d   $dateTime Utc]. 12950 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 12960 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 12970 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
12980 64 61 74 65 54 69 6d 65 20 54 69 63 6b 73 5d 0d  dateTime Ticks].
12990 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
129a0 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d 20 74 68    if {$local} th 129b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 129c0 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 turn [object inv 129d0 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f oke$dateTime To
129e0 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d  LocalTime.Ticks]
129f0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
12a00 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
12a10 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
12a20 24 64 61 74 65 54 69 6d 65 20 54 6f 55 6e 69 76  $dateTime ToUniv 12a30 65 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d ersalTime.Ticks] 12a40 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 12a50 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 12a60 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62 tProperties { ob 12a70 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b ject varName } { 12a80 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 12a90 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74$varName propert
12aa0 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74  ies....      set
12ab0 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20 20 20 20   count 0..
12ac0 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69 73 74 5d  set names [list]
12ad0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69  ....      if {[i
12ae0 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 6f  sObjectHandle $o 12af0 62 6a 65 63 74 5d 20 26 26 20 24 6f 62 6a 65 63 bject] &&$objec
12b00 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65  t ne "null"} the
12b10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61  n {..        eva
12b20 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20  l lappend names
12b30 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20  [object members
12b40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d  \..            -
12b50 6d 65 6d 62 65 72 74 79 70 65 73 20 50 72 6f 70  membertypes Prop
12b60 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24  erty -nameonly $12b70 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 20 20 20 object].... 12b80 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 eval lappend 12b90 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65 names [object me 12ba0 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 mbers \.. 12bb0 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70 65 -membertype 12bc0 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65 6f 6e 6c s Field -nameonl 12bd0 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 20 y$object]..
12be0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72    }....      for
12bf0 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73  each name $names 12c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 12c10 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 12c20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 12c30 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b e -objectflags + 12c40 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62 6a 65 63 NoDispose$objec
12c50 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20  t $name.. 12c60 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 } value] == 0} 12c70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12c80 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 if {[isObjectH 12c90 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d 20 26 26 andle$value] &&
12ca0 20 24 76 61 6c 75 65 20 6e 65 20 22 6e 75 6c 6c   $value ne "null 12cb0 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 12cc0 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72 set error 12cd0 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 20 69 6e null; object in 12ce0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 12cf0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 12d00 20 20 20 20 20 20 20 20 20 20 2d 6d 61 72 73 68 -marsh 12d10 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 6e 64 6c alflags +NoHandl 12d20 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 e Interpreter.Ge 12d30 74 41 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 tActive \.. 12d40 20 20 20 20 20 20 20 20 20 20 20 41 64 64 4f 62 AddOb 12d50 6a 65 63 74 52 65 66 65 72 65 6e 63 65 20 4f 6b jectReference Ok 12d60 20 24 76 61 6c 75 65 20 65 72 72 6f 72 0d 0a 0d$value error...
12d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
12d80 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28  pend properties(
12d90 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73 74 20 24  objects) [list $12da0 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20 name$value]..
12db0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
12dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61  ..            la
12dd0 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73  ppend properties
12de0 28 76 61 6c 75 65 73 29 20 5b 6c 69 73 74 20 24  (values) [list $12df0 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20 name$value]..
12e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
12e10 20 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75 6e         incr coun
12e20 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  t..        } els
12e30 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  e {..          l
12e40 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65  append propertie
12e50 73 28 65 72 72 6f 72 73 29 20 5b 6c 69 73 74 20  s(errors) [list
12e60 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f 72 43 6f  $name$::errorCo
12e70 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  de]..        }..
12e80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
12e90 20 72 65 74 75 72 6e 20 24 63 6f 75 6e 74 0d 0a   return $count.. 12ea0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 12eb0 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74 oc getAllPropert 12ec0 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72 ies { object var 12ed0 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 Name } {.. 12ee0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
12ef0 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   properties..
12f00 20 20 20 73 65 74 20 76 61 6c 75 65 20 24 6f 62     set value $ob 12f10 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20 20 77 68 ject.... wh 12f20 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d 0a 20 20 ile {true} {.. 12f30 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 12f40 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 exists properti 12f50 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d es(seenObjects)] 12f60 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 12f70 20 20 20 24 76 61 6c 75 65 20 6e 69 20 24 70 72$value ni $pr 12f80 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a operties(seenObj 12f90 65 63 74 73 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 ects)} then {.. 12fa0 20 20 20 20 20 20 20 20 20 67 65 74 50 72 6f 70 getProp 12fb0 65 72 74 69 65 73 20 24 76 61 6c 75 65 20 70 72 erties$value pr
12fc0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..
12fd0 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70      lappend prop
12fe0 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63  erties(seenObjec
12ff0 74 73 29 20 24 76 61 6c 75 65 0d 0a 20 20 20 20  ts) $value.. 13000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 13010 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 13020 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62 ts properties(ob 13030 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d jects)]} then {. 13040 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b . break 13050 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 13060 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e if {[llen 13070 67 74 68 20 24 70 72 6f 70 65 72 74 69 65 73 28 gth$properties(
13080 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20 30 7d 20  objects)] == 0}
13090 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
130a0 20 20 75 6e 73 65 74 20 70 72 6f 70 65 72 74 69    unset properti
130b0 65 73 28 6f 62 6a 65 63 74 73 29 3b 20 62 72 65  es(objects); bre
130c0 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ak..        }...
130d0 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c  .        set val
130e0 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e 64  ue [lindex [lind
130f0 65 78 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f  ex $properties(o 13100 62 6a 65 63 74 73 29 20 30 5d 20 65 6e 64 5d 0d bjects) 0] end]. 13110 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f . set pro 13120 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 perties(objects) 13130 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f 70 65 72 [lrange$proper
13140 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 31 20  ties(objects) 1
13150 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  end]..      }...
13160 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
13170 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69   exists properti
13180 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d  es(seenObjects)]
13190 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
131a0 20 20 66 6f 72 65 61 63 68 20 76 61 6c 75 65 20    foreach value
131b0 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e  $properties(seen 131c0 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20 20 20 20 Objects) {.. 131d0 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65 if {$value
131e0 20 65 71 20 24 6f 62 6a 65 63 74 7d 20 63 6f 6e   eq $object} con 131f0 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 tinue.. 13200 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 catch {object d 13210 69 73 70 6f 73 65 20 24 76 61 6c 75 65 7d 0d 0a ispose$value}..
13220 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
13230 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65       unset prope
13240 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74  rties(seenObject
13250 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  s)..      }..
13260 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13270 67 65 74 56 61 72 69 61 62 6c 65 73 20 7b 20 76  getVariables { v
13280 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 63 74 73  arNames {objects
13290 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
132a0 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c     set result [l
132b0 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  ist]....      fo
132c0 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76  reach varName $v 132d0 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 arNames {.. 132e0 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 if {[uplevel 132f0 31 20 5b 6c 69 73 74 20 61 72 72 61 79 20 65 78 1 [list array ex 13300 69 73 74 73 20 24 76 61 72 4e 61 6d 65 5d 5d 7d ists$varName]]}
13310 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13320 20 20 20 73 65 74 20 61 72 72 61 79 4e 61 6d 65     set arrayName
13330 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a 20 20 20   $varName.... 13340 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 65 foreach e 13350 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 70 6c 65 lementName [uple 13360 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61 vel 1 [list arra 13370 79 20 6e 61 6d 65 73 20 24 61 72 72 61 79 4e 61 y names$arrayNa
13380 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  me]] {..
13390 20 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 61 70      set name [ap
133a0 70 65 6e 64 41 72 67 73 20 24 61 72 72 61 79 4e  pendArgs $arrayN 133b0 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e 74 4e 61 ame ($elementNa
133c0 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  me )]..
133d0 20 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20     set varValue
133e0 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74  [uplevel 1 [list
133f0 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d 0a 0d 0a   set $name]].... 13400 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 13410 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f$objects && [isO
13420 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72  bjectHandle $var 13430 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a Value]} then {.. 13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e un 13450 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 13460 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 properties.. 13470 20 20 20 20 20 20 20 20 20 20 67 65 74 41 6c 6c getAll 13480 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 72 56 Properties$varV
13490 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d  alue properties.
134a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
134b0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
134c0 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b 61 72 72  [list $name [arr 134d0 61 79 20 67 65 74 20 70 72 6f 70 65 72 74 69 65 ay get propertie 134e0 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s]].. 134f0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 13500 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend 13510 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e result [list$n
13520 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d 0a  ame $varValue].. 13530 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 13540 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 13550 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 13560 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 56 set varV 13570 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 alue [uplevel 1 13580 5b 6c 69 73 74 20 73 65 74 20 24 76 61 72 4e 61 [list set$varNa
13590 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me]]....
135a0 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 26    if {$objects & 135b0 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c & [isObjectHandl 135c0 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74 68 e$varValue]} th
135d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
135e0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
135f0 61 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a  ain properties..
13600 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 41              getA
13610 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 61  llProperties $va 13620 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 rValue propertie 13630 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s.... 13640 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result 13650 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 5b [list$varName [
13660 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72  array get proper
13670 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20  ties]]..
13680 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13690 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
136a0 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61  result [list $va 136b0 72 4e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d rName$varValue]
136c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
136d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
136e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
136f0 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d  n $result.. } 13700 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e ..... proc en 13710 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b umerableToList { 13720 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d enumerable } {. 13730 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 13740 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 t [list].... 13750 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 13760 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 ngth$enumerable
13770 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65  ] == 0 || $enume 13780 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d rable eq "null"} 13790 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 137a0 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
137b0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
137c0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
137d0 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e   -alias item $en 137e0 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 umerable {.. 137f0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 13800 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 length$item] >
13810 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
13820 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
13830 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72  ult [$item ToStr 13840 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d ing].. }. 13850 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 13860 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
13870 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
13880 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74  proc catchAndRet
13890 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74  urn { script {st
138a0 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20  ackTrace false}
138b0 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20  {strict true} }
138c0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
138d0 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61    # NOTE: Evalua
138e0 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72  te the script pr
138f0 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
13900 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f  ller in their co
13910 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20  ntext,..      #
13920 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20        capturing
13930 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20  both the result
13940 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63  and the return c
13950 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ode...      #..
13960 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63       set code [c
13970 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20  atch {uplevel 1
13980 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d  $script} result] 13990 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 139a0 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74 # NOTE: Did t 139b0 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 he script provid 139c0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 139d0 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72 NOT raise an er 139e0 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ror?.. #.. 139f0 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74 if {$strict
13a00 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c   && $code == 0 | 13a10 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63 | !$strict && $c 13a20 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b ode != 1} then { 13a30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 13a40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 # NOTE: Suc 13a50 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20 cess. Return a 13a60 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 list with the re 13a70 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 turn code and th 13a80 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 e result... 13a90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 13aa0 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 turn [list$code
13ab0 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20   $result].. 13ac0 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63 } elseif {$stac
13ad0 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a  kTrace} then {..
13ae0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13af0 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75     # NOTE: Failu
13b00 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20  re.  Our caller
13b10 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61  wants a full sta
13b20 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70  ck trace (if app
13b30 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20  licable),..
13b40 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72     #       retur
13b50 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68  n a list with th
13b60 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  e return code an
13b70 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72  d the result ver
13b80 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
13b90 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
13ba0 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72  n [list $code$r
13bb0 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20  esult]..      }
13bc0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
13bd0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
13be0 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72  E: Failure.  Our
13bf0 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74   caller does not
13c00 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61   want a full sta
13c10 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20  ck trace (if..
13c20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70        #       ap
13c30 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72  plicable), retur
13c40 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68  n a list with th
13c50 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74  e return code, t
13c60 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  he error..
13c70 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66    #       code f
13c80 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  or the interpret
13c90 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f  er, and the erro
13ca0 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20  r message up to
13cb0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
13cc0 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65       point where
13cd0 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65   the stack trace
13ce0 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a   should start...
13cf0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13d00 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list
13d10 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f  $code$::errorCo
13d20 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  de \..
13d30 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d    [extractSystem
13d40 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74  DataSQLiteExcept
13d50 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75  ionMessage $resu 13d60 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 lt]].. }.. 13d70 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 13d80 63 20 72 65 73 65 74 45 78 63 65 70 74 69 6f 6e c resetException 13d90 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 13da0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 13db0 73 65 74 20 65 78 63 65 70 74 69 6f 6e 20 61 73 set exception as 13dc0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 sociated with th 13dd0 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 28 is interpreter ( 13de0 74 6f 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 to null)... 13df0 20 23 20 20 20 20 20 20 20 54 68 69 73 20 28 70 # This (p 13e00 72 69 76 61 74 65 29 20 70 72 6f 70 65 72 74 79 rivate) property 13e10 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 6f is maintained o 13e20 6e 20 61 20 70 65 72 2d 74 68 72 65 61 64 20 62 n a per-thread b 13e30 61 73 69 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a asis... #.. 13e40 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 13e50 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 13e60 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 ublic Interprete 13e70 72 2e 47 65 74 41 63 74 69 76 65 20 45 78 63 65 r.GetActive Exce 13e80 70 74 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 ption null.. 13e90 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 return "".. 13ea0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 13eb0 63 61 74 63 68 41 6e 64 53 65 74 45 78 63 65 70 catchAndSetExcep 13ec0 74 69 6f 6e 20 7b 20 73 63 72 69 70 74 20 7b 76 tion { script {v 13ed0 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a arName ""} } {.. 13ee0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 13ef0 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 NOTE: Evaluate 13f00 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 the script provi 13f10 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 13f20 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 r in their conte 13f30 78 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 xt... #.. 13f40 20 20 20 20 63 61 74 63 68 20 7b 75 70 6c 65 76 catch {uplev 13f50 65 6c 20 31 20 24 73 63 72 69 70 74 7d 0d 0a 0d el 1$script}...
13f60 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13f70 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  # NOTE: Grab the
13f80 20 28 70 72 69 76 61 74 65 29 20 65 78 63 65 70   (private) excep
13f90 74 69 6f 6e 20 70 72 6f 70 65 72 74 79 20 66 72  tion property fr
13fa0 6f 6d 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  om this interpre
13fb0 74 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20  ter,..      #
13fc0 20 20 20 20 66 6f 72 20 74 68 69 73 20 74 68 72      for this thr
13fd0 65 61 64 2c 20 61 6e 64 20 61 64 64 20 61 73 20  ead, and add as
13fe0 61 6e 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  an opaque object
13ff0 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 0d 0a   handle in the..
14000 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
14010 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c  ntext of our cal
14020 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
14030 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
14040 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 14050 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 14060 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 upvar 1$
14070 76 61 72 4e 61 6d 65 20 65 78 63 65 70 74 69 6f  varName exceptio
14080 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
14090 20 20 20 20 73 65 74 20 65 78 63 65 70 74 69 6f      set exceptio
140a0 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  n [object invoke
140b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 2d 61   \..          -a
140c0 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  lias -flags +Non
140d0 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74  Public Interpret
140e0 65 72 2e 47 65 74 41 63 74 69 76 65 20 45 78 63  er.GetActive Exc
140f0 65 70 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20  eption]....
14100 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
14110 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
14120 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
14130 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
14140 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62  text memory symb
14150 6f 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c  ols strict resul
14160 74 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73  tsVarName errors
14170 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65  VarName fileName
14180 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  s..            a
14190 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  rgs } {..      t
141a0 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  ry {..        #.
141b0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
141c0 20 53 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f   Since we are go
141d0 69 6e 67 20 74 6f 20 75 73 65 20 74 68 69 73 20  ing to use this
141e0 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f  method name a lo
141f0 74 2c 20 61 73 73 69 67 6e 0d 0a 20 20 20 20 20  t, assign..
14200 20 20 20 23 20 20 20 20 20 20 20 69 74 20 74 6f     #       it to
14210 20 61 20 76 61 72 69 61 62 6c 65 20 66 69 72 73   a variable firs
14220 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
14230 20 20 20 20 20 20 20 73 65 74 20 61 64 64 20 52         set add R
14240 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c  eferencedAssembl
14250 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20  ies.Add....
14260 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
14270 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65  NOTE: Create the
14280 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f   base command to
14290 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64   evaluate and ad
142a0 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 0d 0a  d the property..
142b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
142c0 73 65 74 74 69 6e 67 73 20 74 68 61 74 20 61 72  settings that ar
142d0 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20  e almost always
142e0 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e  needed by our un
142f0 69 74 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20  it tests..
14300 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20    #       (i.e.
14310 74 68 65 20 53 79 73 74 65 6d 20 61 6e 64 20 53  the System and S
14320 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d  ystem.Data assem
14330 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e  bly references).
14340 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14350 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64       set command
14360 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
14370 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 43 53 68        compileCSh
14380 61 72 70 20 24 74 65 78 74 20 24 6d 65 6d 6f 72  arp $text$memor
14390 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 72 69  y $symbols$stri
143a0 63 74 20 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  ct results \..
143b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 73            errors
143c0 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c   $add System.dll 143d0 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 74$add System.Dat
143e0 61 2e 64 6c 6c 20 24 61 64 64 20 5c 0d 0a 20 20  a.dll $add \.. 143f0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 14400 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e 64 6c .Transactions.dl 14410 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d l$add System.Xm
14420 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  l.dll]....
14430 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
14440 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65  OTE: Add all the
14450 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e   provided file n
14460 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79  ames as assembly
14470 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20   references...
14480 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14490 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
144a0 65 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  e $fileNames {.. 144b0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 144c0 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b d command$add [
144d0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
144e0 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  e $fileName].. 144f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 14500 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 14510 4e 4f 54 45 3a 20 41 64 64 20 65 78 74 72 61 20 NOTE: Add extra 14520 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e arguments, if an 14530 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e y, to the comman 14540 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a d to evaluate... 14550 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 14560 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 eval lappend 14570 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d command$args...
14580 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
14590 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61      # NOTE: Alia
145a0 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c  s the compiler l
145b0 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64  ocal results and
145c0 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65   errors variable
145d0 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20  s to..        #
145e0 20 20 20 20 20 20 74 68 65 20 76 61 72 69 61 62        the variab
145f0 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65  le names provide
14600 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
14610 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14620 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
14630 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 73   length $results 14640 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 VarName] > 0} th 14650 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 14660 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 upvar 1$results
14670 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d  VarName results.
14680 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
14690 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
146a0 67 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 73  g length $errors 146b0 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 VarName] > 0} th 146c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 146d0 75 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 upvar 1$errorsV
146e0 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20  arName errors..
146f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
14700 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
14710 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20   NOTE: Evaluate
14720 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20  the constructed
14730 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20  [compileCSharp]
14740 63 6f 6d 6d 61 6e 64 20 61 6e 64 0d 0a 20 20 20  command and..
14750 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74       #       ret
14760 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0d  urn the result..
14770 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
14780 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e      eval $comman 14790 64 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c d.. } final 147a0 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d ly {.. #. 147b0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 147c0 20 49 66 20 74 68 65 20 43 23 20 63 6f 6d 70 69 If the C# compi 147d0 6c 65 72 20 77 61 73 20 69 6e 76 6f 6b 65 64 20 ler was invoked 147e0 75 73 69 6e 67 20 5b 65 78 65 63 5d 2c 20 72 65 using [exec], re 147f0 73 65 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 set the.. 14800 20 23 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 # previou 14810 73 20 70 72 6f 63 65 73 73 20 69 64 65 6e 74 69 s process identi 14820 66 69 65 72 20 6e 6f 77 20 28 69 2e 65 2e 20 74 fier now (i.e. t 14830 68 61 74 20 77 61 79 2c 20 69 74 20 64 6f 65 73 hat way, it does 14840 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 14850 20 20 6e 6f 74 20 73 68 6f 77 20 75 70 20 61 73 not show up as 14860 20 62 65 69 6e 67 20 22 6c 65 61 6b 65 64 22 29 being "leaked") 14870 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14880 20 20 20 20 20 20 69 66 20 7b 5b 69 73 44 6f 74 if {[isDot 14890 4e 65 74 43 6f 72 65 5d 7d 20 74 68 65 6e 20 7b NetCore]} then { 148a0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 148b0 68 20 7b 69 6e 66 6f 20 70 72 65 76 69 6f 75 73 h {info previous 148c0 70 69 64 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 pid true}.. 148d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 148e0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 148f0 63 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 c isMemoryDb { f 14900 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 ileName } {.. 14910 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 14920 54 45 3a 20 49 73 20 74 68 65 20 73 70 65 63 69 TE: Is the speci 14930 66 69 65 64 20 64 61 74 61 62 61 73 65 20 66 69 fied database fi 14940 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 le name really a 14950 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 n in-memory data 14960 62 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a base?.. #.. 14970 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 14980 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 pr {$fileName eq
14990 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c   ":memory:" || \
149a0 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
149b0 69 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 4e  ing range $fileN 149c0 61 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66 69 ame 0 12] eq "fi 149d0 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a le::memory:"}].. 149e0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 149f0 6f 63 20 69 73 54 61 62 6c 65 49 6e 44 62 20 7b oc isTableInDb { 14a00 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 name {varName d 14a10 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d b} } {.. #. 14a20 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 14a30 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 14a40 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 14a50 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 14a60 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 14a70 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 14a80 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 caller. It cont 14a90 61 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 ains the databas 14aa0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han 14ab0 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 dle that will be 14ac0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 14ad0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 used to execute 14ae0 74 68 65 20 71 75 65 72 79 20 75 73 65 64 20 74 the query used t 14af0 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 o determine if t 14b00 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 he named table i 14b10 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 14b20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 present in that 14b30 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 database... 14b40 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 14b50 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
14b60 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
14b70 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
14b80 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
14b90 61 62 6c 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  able to determin
14ba0 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74  e if the named t
14bb0 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23  able is..      #
14bc0 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69         present i
14bd0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d  n the database..
14be0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14bf0 73 65 74 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20  set sql {..
14c00 20 20 20 53 45 4c 45 43 54 20 43 4f 55 4e 54 28     SELECT COUNT(
14c10 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  *) FROM sqlite_m
14c20 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
14c30 20 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20 6e   = 'table' AND n
14c40 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20  ame = ?;..
14c50 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
14c60 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
14c70 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  rn non-zero if t
14c80 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69  he named table i
14c90 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20  s present...
14ca0 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
14cb0 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20  n [expr {..
14cc0 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20     [sql execute
14cd0 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar
14ce0 24 64 62 20 24 73 71 6c 20 5b 6c 69 73 74 20 70  $db$sql [list p
14cf0 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61  aram1 String $na 14d00 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20 me]] > 0.. 14d10 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }].. }..... 14d20 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 66 61 proc getDbDefa 14d30 75 6c 74 50 61 67 65 53 69 7a 65 20 7b 7d 20 7b ultPageSize {} { 14d40 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 14d50 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 22 ch {executeSql " 14d60 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 PRAGMA page_size 14d70 3b 22 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c ;" scalar} resul 14d80 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 14d90 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 14da0 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d$result..      }
14db0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
14dc0 20 72 65 74 75 72 6e 20 30 0d 0a 20 20 20 20 20   return 0..
14dd0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
14de0 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 66 61    proc getDbDefa
14df0 75 6c 74 43 61 63 68 65 53 69 7a 65 20 7b 7d 20  ultCacheSize {}
14e00 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  {..      if {[ca
14e10 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20  tch {executeSql
14e20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69  "PRAGMA cache_si
14e30 7a 65 3b 22 20 73 63 61 6c 61 72 7d 20 72 65 73  ze;" scalar} res
14e40 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
14e50 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
14e60 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20  n $result.. 14e70 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 14e80 20 20 20 72 65 74 75 72 6e 20 30 0d 0a 20 20 20 return 0.. 14e90 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 14ea0 20 20 20 20 70 72 6f 63 20 75 73 65 4c 65 67 61 proc useLega 14eb0 63 79 44 62 50 61 67 65 41 6e 64 43 61 63 68 65 cyDbPageAndCache 14ec0 53 69 7a 65 73 20 7b 20 76 61 72 4e 61 6d 65 20 Sizes { varName 14ed0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 14ee0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 # NOTE: Refe 14ef0 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 r to the specifi 14f00 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 ed variable (e.g 14f10 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 . "db") in the c 14f20 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 ontext of our.. 14f30 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c # cal 14f40 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e ler. It contain 14f50 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 s the database c 14f60 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle 14f70 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 that will be.. 14f80 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 14f90 64 20 74 6f 20 65 78 65 63 75 74 65 20 71 75 65 d to execute que 14fa0 72 69 65 73 20 75 73 65 64 20 74 6f 20 73 65 74 ries used to set 14fb0 20 74 68 65 20 70 61 67 65 20 61 6e 64 20 63 61 the page and ca 14fc0 63 68 65 20 73 69 7a 65 73 2e 0d 0a 20 20 20 20 che sizes... 14fd0 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 14fe0 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
14ff0 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 63  ..      sql exec
15000 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 20  ute $db {.. 15010 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73 PRAGMA page_s 15020 69 7a 65 20 3d 20 31 30 32 34 3b 0d 0a 20 20 20 ize = 1024;.. 15030 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 PRAGMA cach 15040 65 5f 73 69 7a 65 20 3d 20 32 30 30 30 3b 0d 0a e_size = 2000;.. 15050 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 15060 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 0d return [list \. 15070 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c 20 . [sql 15080 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 execute -execute 15090 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 scalar$db "PRA
150a0 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 5d  GMA page_size;"]
150b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
150c0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
150d0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db " 150e0 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a PRAGMA cache_siz 150f0 65 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d e;"]].. }.... 15100 0a 20 20 20 20 70 72 6f 63 20 6e 6f 72 6d 61 6c . proc normal 15110 69 7a 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 izeExceptionMess 15120 61 67 65 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d age { value } {. 15130 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 15140 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 ng length$value
15150 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 72 65  ] == 0} then {re
15160 74 75 72 6e 20 24 76 61 6c 75 65 7d 0d 0a 20 20  turn $value}.. 15170 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69 return [stri 15180 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c ng map [list \r\ 15190 6e 20 22 20 3d 3d 3e 20 22 20 5c 6e 20 22 20 3d n " ==> " \n " = 151a0 3d 3e 20 22 5d 20 24 76 61 6c 75 65 5d 0d 0a 20 => "]$value]..
151b0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
151c0 63 20 65 78 74 72 61 63 74 53 79 73 74 65 6d 44  c extractSystemD
151d0 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
151e0 6f 6e 4d 65 73 73 61 67 65 20 7b 20 76 61 6c 75  onMessage { valu
151f0 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  e } {..      #..
15200 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
15210 20 74 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 66   the string conf
15220 6f 72 6d 73 20 74 6f 20 66 6f 72 6d 61 74 20 6f  orms to format o
15230 66 20 74 68 65 20 6e 6f 72 6d 61 6c 20 65 78 63  f the normal exc
15240 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  eption..      #
15250 20 20 20 20 20 20 65 72 72 6f 72 20 73 74 72 69        error stri
15260 6e 67 73 2c 20 65 78 74 72 61 63 74 20 61 6e 64  ngs, extract and
15270 20 72 65 74 75 72 6e 20 6f 6e 6c 79 20 74 68 65   return only the
15280 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a   error message..
15290 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f        #       po
152a0 72 74 69 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a 20  rtion itself...
152b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
152c0 74 20 70 61 74 74 65 72 6e 73 20 5b 6c 69 73 74  t patterns [list
152d0 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79 73 74 65   \..      {Syste
152e0 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c  m\.Data\.SQLite\
152f0 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  .SQLiteException
15300 20 5c 28 30 78 28 3f 3a 30 7c 38 29 5b 30 2d 39   $$0x(?:0|8)[0-9 15310 41 2d 46 61 2d 66 5d 7b 37 7d 5c 29 3a 5c 0d 0a A-Fa-f]{7}$$:\..
15320 20 20 20 20 20 20 20 20 20 20 28 2e 2b 3f 29 20            (.+?)
15330 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20   (?: )?at} \..
15340 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74      {System\.Dat
15350 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74  a\.SQLite\.SQLit
15360 65 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f  eException: (.+?
15370 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a  )  (?: )?at} \..
15380 20 20 20 20 20 20 7b 45 61 67 6c 65 5c 2e 5f 43        {Eagle\._C
15390 6f 6d 70 6f 6e 65 6e 74 73 5c 2e 50 75 62 6c 69  omponents\.Publi
153a0 63 5c 2e 53 63 72 69 70 74 45 78 63 65 70 74 69  c\.ScriptExcepti
153b0 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29  on: (.+?)  (?: )
153c0 3f 61 74 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 66  ?at}]....      f
153d0 6f 72 65 61 63 68 20 70 61 74 74 65 72 6e 20 24  oreach pattern $153e0 70 61 74 74 65 72 6e 73 20 7b 0d 0a 20 20 20 20 patterns {.. 153f0 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 if {[regexp 15400 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 76 61 6c --$pattern $val 15410 75 65 20 64 75 6d 6d 79 20 6d 65 73 73 61 67 65 ue dummy message 15420 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 15430 20 20 20 20 20 73 65 74 20 6d 65 73 73 61 67 65 set message 15440 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 [string map [li 15450 73 74 20 5c 72 5c 6e 20 5c 6e 5d 20 5b 73 74 72 st \r\n \n] [str 15460 69 6e 67 20 74 72 69 6d 20 24 6d 65 73 73 61 67 ing trim$messag
15470 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e]]..          s
15480 65 74 20 6c 69 6e 65 73 20 5b 73 70 6c 69 74 20  et lines [split
15490 24 6d 65 73 73 61 67 65 20 5c 6e 5d 0d 0a 0d 0a  $message \n].... 154a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c if {[l 154b0 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73 5d 20 3d length$lines] =
154c0 3d 20 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 2} then {..
154d0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 69           if {[li
154e0 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 65  ndex $lines 0] e 154f0 71 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 q [lindex$lines
15500 20 31 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20   1]} then {..
15510 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15520 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73  n [lindex $lines 15530 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 0].. 15540 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 15550 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 return [append 15560 41 72 67 73 20 5b 6c 69 6e 64 65 78 20 24 6c 69 Args [lindex$li
15570 6e 65 73 20 30 5d 20 22 20 2d 2d 20 22 20 5b 6c  nes 0] " -- " [l
15580 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 5d  index $lines 1]] 15590 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 155a0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 155b0 6e 20 24 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 n$message..
155c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
155d0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $155e0 76 61 6c 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d value.. }.... 155f0 0a 20 20 20 20 70 72 6f 63 20 74 72 69 6d 53 71 . proc trimSq 15600 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 l { sql } {.. 15610 20 20 20 72 65 74 75 72 6e 20 5b 72 65 67 73 75 return [regsu 15620 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 b -all -- {\s+} 15630 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 71 [string trim$sq
15640 6c 5d 20 22 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a  l] " "]..    }..
15650 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 65 63  ...    proc exec
15660 75 74 65 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78  uteSql { sql {ex
15670 65 63 75 74 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72  ecute none} {for
15680 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e  mat none} {fileN
15690 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
156a0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
156b0 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d  ength $fileName] 156c0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 == 0} then {set 156d0 20 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 fileName :memor 156e0 79 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74 75 70 y:}.. setup 156f0 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 Db$fileName ""
15700 22 22 20 22 22 20 22 22 20 22 22 20 66 61 6c 73  "" "" "" "" fals
15710 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61  e false false fa
15720 6c 73 65 20 64 62 20 74 72 75 65 0d 0a 0d 0a 20  lse db true....
15730 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20       try {..
15740 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65      return [uple
15750 76 65 6c 20 31 20 5b 6c 69 73 74 20 5c 0d 0a 20  vel 1 [list \..
15760 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65             sql e
15770 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
15780 24 65 78 65 63 75 74 65 20 2d 66 6f 72 6d 61 74  $execute -format 15790 20 24 66 6f 72 6d 61 74 20 24 64 62 20 24 73 71$format $db$sq
157a0 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e  l]]..      } fin
157b0 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20  ally {..
157c0 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b  set connection [
157d0 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d  getDbConnection]
157e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 20  ....        try
157f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6c 65  {..          cle
15800 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName 15810 20 64 62 20 66 61 6c 73 65 20 66 61 6c 73 65 20 db false false 15820 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d false.. } 15830 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 finally {.. 15840 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6c 61 object fla 15850 67 73 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d gs$connection -
15860 4e 6f 44 69 73 70 6f 73 65 3b 20 66 72 65 65 44  NoDispose; freeD
15870 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20  bConnection..
15880 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
15890 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
158a0 72 6f 63 20 68 61 73 4e 6f 46 6c 61 67 73 20 7b  roc hasNoFlags {
158b0 20 76 61 72 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20   varName none }
158c0 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  {..      upvar 1
158d0 20 24 76 61 72 4e 61 6d 65 20 66 6c 61 67 73 0d   $varName flags. 158e0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 ... if {![i 158f0 6e 66 6f 20 65 78 69 73 74 73 20 66 6c 61 67 73 nfo exists flags 15900 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 15910 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 15920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 15930 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 15940 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 gth$flags] == 0
15950 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15960 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
15970 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
15980 69 66 20 7b 24 6e 6f 6e 65 20 26 26 20 24 66 6c  if {$none &&$fl
15990 61 67 73 20 65 71 20 22 4e 6f 6e 65 22 7d 20 74  ags eq "None"} t
159a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
159b0 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
159c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
159d0 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d  urn false..    }
159e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
159f0 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  tConnectionFlags
15a00 20 7b 20 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67   { fileName flag
15a10 73 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  s {quiet false}
15a20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
15a30 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
15a40 72 65 20 6f 75 74 20 77 68 69 63 68 20 64 61 74  re out which dat
15a50 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20  abase file name
15a60 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  or connection st
15a70 72 69 6e 67 20 74 68 65 73 65 0d 0a 20 20 20 20  ring these..
15a80 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
15a90 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20  tion flags will
15aa0 61 63 74 75 61 6c 6c 79 20 61 70 70 6c 79 20 74  actually apply t
15ab0 6f 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  o.  This is not
15ac0 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20  necessary..
15ad0 20 23 20 20 20 20 20 20 20 69 6e 20 71 75 69 65   #       in quie
15ae0 74 20 6d 6f 64 65 20 62 65 63 61 75 73 65 20 74  t mode because t
15af0 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information
15b00 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  is only used for
15b10 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20   logging..
15b20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f  #       and repo
15b30 72 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d  rting purposes..
15b40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15b50 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 15b60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 15b70 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 15b80 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20$fileName] > 0}
15b90 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
15ba0 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 5b    set database [
15bb0 61 70 70 65 6e 64 41 72 67 73 20 22 66 69 6c 65  appendArgs "file
15bc0 20 6e 61 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e   name \"" $fileN 15bd0 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 ame \"].. 15be0 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 15bf0 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f exists ::dataSo 15c00 75 72 63 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 urce] && \.. 15c10 20 20 20 20 20 20 20 20 21 5b 61 72 72 61 79 20 ![array 15c20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 exists ::dataSou 15c30 72 63 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 rce]} then {.. 15c40 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data 15c50 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 base [appendArgs 15c60 20 22 64 61 74 61 20 73 6f 75 72 63 65 20 5c 22 "data source \" 15c70 22 20 24 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 "$::dataSource
15c80 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  \"]..        } e
15c90 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
15ca0 20 73 65 74 20 64 61 74 61 62 61 73 65 20 3c 75   set database <u
15cb0 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20  nknown>..
15cc0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
15cd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15ce0 4e 4f 54 45 3a 20 45 76 65 6e 20 74 68 6f 75 67  NOTE: Even thoug
15cf0 68 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20  h there is only
15d00 6f 6e 65 20 73 6f 75 72 63 65 20 6f 66 20 66 6c  one source of fl
15d10 61 67 73 20 73 6f 20 66 61 72 2c 20 74 68 65 79  ags so far, they
15d20 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15d30 6d 75 73 74 20 62 65 20 63 6f 6d 62 69 6e 65 64  must be combined
15d40 20 75 73 69 6e 67 20 74 68 65 20 63 6f 72 72 65   using the corre
15d50 63 74 20 73 79 6e 74 61 78 20 66 6f 72 20 65 6e  ct syntax for en
15d60 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20  umerated..
15d70 23 20 20 20 20 20 20 20 66 6c 61 67 20 76 61 6c  #       flag val
15d80 75 65 73 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  ues for the .NET
15d90 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   Framework...
15da0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
15db0 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c  flags [combineFl
15dc0 61 67 73 20 24 66 6c 61 67 73 20 22 22 5d 0d 0a  ags $flags ""].. 15dd0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15de0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 # NOTE: Show (a 15df0 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63 61 nd log) the loca 15e00 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 l connection fla 15e10 67 73 20 61 6e 64 20 74 68 65 20 61 73 73 6f 63 gs and the assoc 15e20 69 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 iated.. # 15e30 20 20 20 20 20 64 61 74 61 20 73 6f 75 72 63 65 data source 15e40 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a or file name... 15e50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 15e60 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
15e70 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
15e80 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
15e90 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67  no(emitLocalFlag
15ea0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
15eb0 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78        (![info ex
15ec0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f  ists ::no(emitLo
15ed0 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d  calFlagsIfNone)]
15ee0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
15ef0 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73      ![hasNoFlags
15f00 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20   flags false])}
15f10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
15f20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 15f30 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 15f40 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 15f50 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 6c "---- local 15f60 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 15f70 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 s for "$databas
15f80 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
15f90 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70     " are: " [exp
15fa0 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20  r {![hasNoFlags
15fb0 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c  flags false] ? \
15fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15fd0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $15fe0 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f flags \"] : "<no 15ff0 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 ne>"}] \n].. 16000 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 16010 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16020 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 # NOTE: Show (a 16030 6e 64 20 6c 6f 67 29 20 74 68 65 20 73 68 61 72 nd log) the shar 16040 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl 16050 61 67 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ags... #.. 16060 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
16070 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16080 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
16090 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
160a0 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44   invoke System.D
160b0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
160c0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 68 61 72  eConnection Shar
160d0 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  edFlags..
160e0 20 7d 20 73 68 61 72 65 64 46 6c 61 67 73 5d 20   } sharedFlags]
160f0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
16100 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
16110 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
16120 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d  mitSharedFlags)]
16130 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
16140 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69       (![info exi
16150 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61  sts ::no(emitSha
16160 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d  redFlagsIfNone)]
16170 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
16180 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61        ![hasNoFla
16190 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 74  gs sharedFlags t
161a0 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  rue])} then {..
161b0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
161c0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 161d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 161f0 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e "---- shared con 16200 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f nection flags fo 16210 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d r "$database \.
16220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16230 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20   " are: " [expr
16240 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68  {![hasNoFlags sh
16250 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d 20  aredFlags true]
16260 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ? \..
16270 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
16280 20 5c 22 20 24 73 68 61 72 65 64 46 6c 61 67 73   \" $sharedFlags 16290 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d \"] : "<none>"} 162a0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 162b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 162c0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 162d0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 162e0 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 s ::no(emitShare 162f0 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 dFlags)] && \.. 16300 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 69 ![i 16310 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 16320 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49 emitSharedFlagsI 16330 66 55 6e 61 76 61 69 6c 61 62 6c 65 29 5d 7d 20 fUnavailable)]} 16340 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 16350 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
16360 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
16370 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
16380 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
16390 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  hared connection
163a0 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61   flags for " $da 163b0 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 tabase \.. 163c0 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a " are: 163d0 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e 5c 6e <unavailable>\n 163e0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 163f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 16400 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 16410 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 16420 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 ow (and log) the 16430 20 64 65 74 65 63 74 65 64 20 67 6c 6f 62 61 6c detected global 16440 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 16450 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 s, if any... 16460 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 16470 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
16480 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
16490 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
164a0 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 29 5d  mitGlobalFlags)]
164b0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
164c0 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74     (![info exist
164d0 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61  s ::no(emitGloba
164e0 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c  lFlagsIfNone)] |
164f0 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  | \..
16500 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a    ![hasNoFlags :
16510 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
16520 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20  s false])} then
16530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
16540 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 16550 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 16560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16570 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e "---- global con 16580 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 nection flags ar 16590 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 e: " \.. 165a0 20 20 20 20 20 20 5b 65 78 70 72 20 7b 21 5b 68 [expr {![h 165b0 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e asNoFlags ::conn 165c0 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c ection_flags fal 165d0 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 se] ? \.. 165e0 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 [appendAr 165f0 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 74 gs \"$::connect
16600 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20 3a 20  ion_flags \"] :
16610 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a  "<none>"}] \n]..
16620 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
16630 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
16640 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
16650 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c  there are any gl
16660 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72  obal (per test r
16670 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  un) connection f
16680 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a  lags currently..
16690 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
166a0 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20  t, use them now
166b0 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69  (i.e. by combini
166c0 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65  ng them with the
166d0 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a   ones for this..
166e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
166f0 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
16700 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
16710 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f  info exists ::co
16720 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 7d  nnection_flags]}
16730 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16740 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
16750 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f  TE: Combine and/
16760 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20 63  or replace the c
16770 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
16780 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74 68  and then show th
16790 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
167a0 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20     new value...
167b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
167c0 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d    set flags [com
167d0 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73  bineFlags $flags 167e0 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66$::connection_f
167f0 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  lags]....
16800 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
16810 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
16820 67 29 20 74 68 65 20 6e 65 77 20 65 66 66 65 63  g) the new effec
16830 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tive connection
16840 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 20  flags...
16850 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
16860 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 16870 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 16880 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 16890 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 (emitCombinedFla 168a0 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 gs)] && \.. 168b0 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f (![info 168c0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi 168d0 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 49 66 tCombinedFlagsIf 168e0 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 168f0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 ![ha 16900 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 sNoFlags flags f 16910 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a alse])} then {.. 16920 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 16930 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
16940 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
16950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16960 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 20   "---- combined
16970 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
16980 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65   for " $database 16990 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 169a0 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 " are: " [ex 169b0 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 pr {![hasNoFlags 169c0 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 flags false] ? 169d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 169e0 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c [appendArgs \ 169f0 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 "$flags \"] : "
16a00 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20  <none>"}] \n]..
16a10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
16a20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
16a30 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $16a40 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d flags.. }.... 16a50 0a 20 20 20 20 70 72 6f 63 20 67 65 74 46 6c 61 . proc getFla 16a60 67 73 50 72 6f 70 65 72 74 79 20 7b 20 7b 66 6c gsProperty { {fl 16a70 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20 66 ags ""} {quiet f 16a80 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 16a90 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 16aa0 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 61 74 : Determine what 16ab0 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 28 67 the combined (g 16ac0 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61 6c 29 lobal and local) 16ad0 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 connection.. 16ae0 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 73 # flags 16af0 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f 73 73 should be, poss 16b00 69 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d 0a 20 ibly quietly... 16b10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 16b20 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e t flags [getConn 16b30 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 ectionFlags ""$
16b40 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d  flags $quiet]... 16b50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16b60 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20 67 6c # NOTE: If no gl 16b70 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20 63 6f obal or local co 16b80 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 nnection flags w 16b90 65 72 65 20 73 70 65 63 69 66 69 65 64 2c 20 74 ere specified, t 16ba0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 16bb0 20 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 default connec 16bc0 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f 75 6c tion flags shoul 16bd0 64 20 62 65 20 75 73 65 64 3b 20 74 68 65 72 65 d be used; there 16be0 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a 20 20 fore, return.. 16bf0 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 20 65 # an e 16c00 6d 70 74 79 20 73 74 72 69 6e 67 20 69 6e 20 74 mpty string in t 16c10 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20 20 hat case... 16c20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 16c30 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c tring length$fl
16c40 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ags] == 0} then
16c50 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
16c60 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  n ""..      }...
16c70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16c80 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 65 72  # NOTE: In order
16c90 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
16ca0 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74   default connect
16cb0 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 62 65  ion flags are be
16cc0 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 20 20  ing used..
16cd0 23 20 20 20 20 20 20 20 69 74 20 69 73 20 6e 65  #       it is ne
16ce0 63 65 73 73 61 72 79 20 74 6f 20 61 74 74 65 6d  cessary to attem
16cf0 70 74 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e 20  pt a conversion
16d00 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 65 6e  to the actual en
16d10 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 20  umerated..
16d20 23 20 20 20 20 20 20 20 74 79 70 65 2e 20 20 46  #       type.  F
16d30 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 68 65  ailing that, the
16d40 20 63 68 65 63 6b 20 61 67 61 69 6e 73 74 20 74   check against t
16d50 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
16d60 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..
16d70 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e  #       skipped.
16d80 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16d90 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
16da0 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72         set error
16db0 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52 45 44   null; # IGNORED
16dc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65  ....        obje
16dd0 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 6c 69 74  ct invoke Utilit
16de0 79 20 54 72 79 50 61 72 73 65 46 6c 61 67 73 45  y TryParseFlagsE
16df0 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 20 20 20  num "" \..
16e00 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
16e10 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
16e20 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22  onnectionFlags "
16e30 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74 72  " $flags null tr 16e40 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ue \.. 16e50 20 20 74 72 75 65 20 74 72 75 65 20 65 72 72 6f true true erro 16e60 72 0d 0a 20 20 20 20 20 20 7d 20 76 61 6c 75 65 r.. } value 16e70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 16e80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 16e90 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 69 6e 67 NOTE: Attempting 16ea0 20 74 6f 20 70 61 72 73 65 20 74 68 65 20 63 6f to parse the co 16eb0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 nnection flags c 16ec0 61 75 73 65 64 20 61 20 73 63 72 69 70 74 0d 0a aused a script.. 16ed0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 16ee0 65 72 72 6f 72 2e 20 20 45 6d 69 74 20 61 20 77 error. Emit a w 16ef0 61 72 6e 69 6e 67 20 74 6f 20 74 68 65 20 74 65 arning to the te 16f00 73 74 20 6c 6f 67 20 66 69 6c 65 20 61 6e 64 20 st log file and 16f10 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 continue.. 16f20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 # using 16f30 61 6e 20 65 6d 74 70 79 20 73 74 72 69 6e 67 20 an emtpy string 16f40 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 instead... 16f50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 6c 6f #.. tlo 16f60 67 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d g [appendArgs \. 16f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d . "== 16f80 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 16f90 65 64 20 74 6f 20 70 61 72 73 65 20 63 6f 6e 6e ed to parse conn 16fa0 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 65 72 ection flags, er 16fb0 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. 16fc0 20 20 20 20 20 20 5c 6e 5c 74 20 24 76 61 6c 75 \n\t$valu
16fd0 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  e \n]....
16fe0 20 73 65 74 20 76 61 6c 75 65 20 22 22 0d 0a 20   set value ""..
16ff0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
17000 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
17010 20 49 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64   If the combined
17020 20 66 6c 61 67 73 20 73 74 72 69 6e 67 20 63 6f   flags string co
17030 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  uld not actually
17040 20 62 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20   be converted..
17050 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
17060 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 74  the enumerated t
17070 79 70 65 20 69 74 20 69 73 20 74 68 65 20 64 65  ype it is the de
17080 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 65  fault value, the
17090 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 20  n just use..
170a0 20 20 23 20 20 20 20 20 20 20 69 74 20 76 65 72    #       it ver
170b0 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 65  batim; otherwise
170c0 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 61 6e  , just return an
170d0 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20   empty string.
170e0 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23  In that..      #
170f0 20 20 20 20 20 20 20 63 61 73 65 2c 20 74 68 65         case, the
17100 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74   default connect
17110 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 62  ion flags will b
17120 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 23  e used...      #
17130 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
17140 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75  ing length $valu 17150 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 e] == 0 ||$valu
17160 65 20 6e 65 20 22 44 65 66 61 75 6c 74 22 7d 20  e ne "Default"}
17170 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17180 23 0d 0a 20 20 20 20 20 20 20 20 23 20 57 41 52  #..        # WAR
17190 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 74 75 72  NING: This retur
171a0 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 76 61  ns the string va
171b0 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 69  lue of the combi
171c0 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a  ned flags, not..
171d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
171e0 20 20 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65     the enumerate
171f0 64 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69  d value.  This i
17200 73 20 62 79 20 64 65 73 69 67 6e 20 61 6e 64 20  s by design and
17210 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20  should not..
17220 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
17230 65 20 63 68 61 6e 67 65 64 20 77 69 74 68 6f 75  e changed withou
17240 74 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 64  t careful consid
17250 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74  eration (e.g. it
17260 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20   would..
17270 23 20 20 20 20 20 20 20 20 20 20 70 72 65 76 65  #          preve
17280 6e 74 20 74 68 65 20 53 51 4c 69 74 65 43 6f 6e  nt the SQLiteCon
17290 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 72  nection class fr
172a0 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61  om allowing inva
172b0 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  lid..        #
172c0 20 20 20 20 20 20 20 20 5b 22 6d 61 67 69 63 61          ["magica
172d0 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e  l"] meta-flags).
172e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
172f0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70       return [app
17300 65 6e 64 41 72 67 73 20 22 46 6c 61 67 73 3d 22  endArgs "Flags="
17310 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20   $flags \;].. 17320 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 17330 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a turn "".. }.. 17340 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 17350 65 73 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 estProperties { 17360 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 {flags ""} {quie 17370 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 17380 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 17390 4f 54 45 3a 20 53 74 61 72 74 20 77 69 74 68 20 OTE: Start with 173a0 22 46 6c 61 67 73 22 20 70 72 6f 70 65 72 74 79 "Flags" property 173b0 20 66 6f 72 20 74 68 65 20 6e 65 77 20 63 6f 6e for the new con 173c0 6e 65 63 74 69 6f 6e 2c 20 69 66 20 61 6e 79 2e nection, if any. 173d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 173e0 20 73 65 74 20 72 65 73 75 6c 74 20 5b 67 65 74 set result [get 173f0 46 6c 61 67 73 50 72 6f 70 65 72 74 79 20 24 66 FlagsProperty$f
17400 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a  lags $quiet].... 17410 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 17420 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e NOTE: Add the n 17430 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 ame of the curre 17440 6e 74 20 74 65 73 74 20 66 69 6c 65 2c 20 69 66 nt test file, if 17450 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 available. Thi 17460 73 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 s is.. # 17470 20 20 20 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f only used fo 17480 72 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 r debugging... 17490 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 174a0 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 174b0 74 65 73 74 5f 66 69 6c 65 5d 7d 20 74 68 65 6e test_file]} then 174c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe 174d0 6e 64 20 72 65 73 75 6c 74 20 54 65 73 74 46 69 nd result TestFi 174e0 6c 65 3d 20 24 3a 3a 74 65 73 74 5f 66 69 6c 65 le=$::test_file
174f0 20 5c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   \;..      }....
17500 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
17510 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e   NOTE: Add the n
17520 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65  ame of the curre
17530 6e 74 20 74 65 73 74 2c 20 69 66 20 61 76 61 69  nt test, if avai
17540 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 20  lable.  This is
17550 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  only..      #
17560 20 20 20 20 75 73 65 64 20 66 6f 72 20 64 65 62      used for deb
17570 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23  ugging...      #
17580 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
17590 6f 20 65 78 69 73 74 73 20 3a 3a 65 61 67 6c 65  o exists ::eagle
175a0 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e 61  _tests(CurrentNa
175b0 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  me)]} then {..
175c0 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73        append res
175d0 75 6c 74 20 54 65 73 74 4e 61 6d 65 3d 20 24 3a  ult TestName= $: 175e0 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 43 75 72 :eagle_tests(Cur 175f0 72 65 6e 74 4e 61 6d 65 29 20 5c 3b 0d 0a 20 20 rentName) \;.. 17600 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 17610 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
17620 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
17630 63 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61  c enableSharedCa
17640 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e  che { channel en
17650 61 62 6c 65 20 7b 71 75 69 65 74 20 66 61 6c 73  able {quiet fals
17660 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  e} } {..      if
17670 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
17680 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
17690 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
176a0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
176b0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
176c0 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
176d0 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..
176e0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
176f0 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
17700 61 63 68 65 20 5b 65 78 70 72 20 69 6e 74 28 24  ache [expr int($17710 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 enable)].. 17720 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 17730 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17740 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
17750 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
17760 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 17770 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 17780 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 17790 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e call sqlite3_en 177a0 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 able_shared_cach 177b0 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 e("$enable \..
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e               ").
177d0 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74  .. ok: " $result 177e0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 177f0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 17800 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
17810 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
17820 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 17830 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 17840 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 17850 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 17860 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 qlite3_enable_sh 17870 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e ared_cache("$en
17880 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  able \..
17890 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f        ")... erro
178a0 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 178b0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d t \n].. } 178c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 178d0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 ..... proc se 178e0 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 tupDb {.. 178f0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d fileName {m 17900 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d ode ""} {dateTim 17910 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 eFormat ""} {dat 17920 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 eTimeKind ""} {f 17930 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 lags ""}.. 17940 20 20 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d {extra ""} 17950 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 {qualify true} 17960 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 {delete true} {u 17970 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 ri false}.. 17980 20 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 {temporar 17990 79 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 y true} {varName 179a0 20 64 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 db} {quiet fals 179b0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 179c0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 179d0 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 irst, see if our 179e0 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 caller has requ 179f0 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f ested an in-memo 17a00 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 ry database... 17a10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 17a20 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d isMemory [isMem 17a30 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d oryDb$fileName]
17a40 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
17a50 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
17a60 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74  ow, all test dat
17a70 61 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74  abases used by t
17a80 68 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72  he test suite ar
17a90 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20  e placed..
17aa0 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65  #       into the
17ab0 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74   database direct
17ac0 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62  ory.  Each datab
17ad0 61 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20  ase and related
17ae0 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  files..      #
17af0 20 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74       used by a t
17b00 65 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c  est should be cl
17b10 65 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74  eaned up by that
17b20 20 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d   test using the.
17b30 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22  .      #       "
17b40 63 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65  cleanupDb" proce
17b50 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20  dure, below...
17b60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
17b70 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
17b80 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
17b90 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
17ba0 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
17bb0 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
17bc0 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
17bd0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 17be0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17bf0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 17c00 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 : By default, de 17c10 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 lete any pre-exi 17c20 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 sting database w 17c30 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c ith the same fil 17c40 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 17c50 20 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 name if it curr 17c60 65 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 ently exists... 17c70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 17c80 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 {!$isMemory &&
17c90 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65  $delete && [file 17ca0 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
17cb0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
17cc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
17cd0 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
17ce0 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65  o delete any pre
17cf0 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  -existing databa
17d00 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  se with the same
17d10 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23   file..        #
17d20 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20         name...
17d30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17d40 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c   if {[catch {fil
17d50 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61  e delete $fileNa 17d60 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e me} error]} then 17d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 17d80 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 17d90 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 17da0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 17db0 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 he file, report 17dc0 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 17dd0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 17de0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
17df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
17e00 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 17e10 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 17e20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17e30 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 17e40 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele 17e50 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 te database file 17e60 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
17e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17e80 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74    "\" during set
17e90 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  up, error: " \n\
17ea0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 17eb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17ec0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 17ed0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 17ee0 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 17ef0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 17f00 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 17f10 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 17f20 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 17f30 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 17f40 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 The handle to 17f50 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 the opened datab 17f60 61 73 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 ase will be stor 17f70 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 17f80 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 17f90 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
17fa0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17fb0 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75  # NOTE: Start bu
17fc0 69 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65  ilding the conne
17fd0 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54  ction string.  T
17fe0 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64  he only required
17ff0 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20   portion..
18000 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63  #       of the c
18010 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
18020 20 69 73 20 74 68 65 20 64 61 74 61 20 73 6f 75   is the data sou
18030 72 63 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61  rce, which conta
18040 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ins the..      #
18050 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
18060 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66  file name itself
18070 2e 20 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  .  If our caller
18080 20 77 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20   wants to use a
18090 55 52 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20  URI as..      #
180a0 20 20 20 20 20 20 74 68 65 20 64 61 74 61 20 73        the data s
180b0 6f 75 72 63 65 2c 20 75 73 65 20 74 68 65 20 46  ource, use the F
180c0 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f  ullUri connectio
180d0 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74  n string propert
180e0 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  y to..      #
180f0 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20      prevent the
18100 64 61 74 61 20 73 6f 75 72 63 65 20 73 74 72 69  data source stri
18110 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61  ng from being ma
18120 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ngled...      #.
18130 0a 20 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d  .      if {$uri} 18140 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 18150 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 set connection 18160 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e {FullUri=${fileN
18170 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65  ame}}..      } e
18180 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  lse {..        s
18190 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44  et connection {D
181a0 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c  ata Source=${fil 181b0 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d eName}}.. } 181c0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 181d0 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 # NOTE: Since 181e0 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure 181f0 68 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b has no special k 18200 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 nowledge of what 18210 20 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 the default.. 18220 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 # sett 18230 69 6e 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 ing is for the T 18240 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 oFullPath connec 18250 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 tion string prop 18260 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 ery, always.. 18270 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20 74 # add t 18280 68 65 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 he value we know 18290 20 61 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f about to the co 182a0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. 182b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 182c0 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 182d0 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d on {;ToFullPath= 182e0 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20${qualify}}....
182f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18300 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c  NOTE: If our cal
18310 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20  ler specified a
18320 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64  journal mode, ad
18330 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
18340 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23  portion..      #
18350 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
18360 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
18370 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
18380 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
18390 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e   length $mode] > 183a0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 183b0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 183c0 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 ction {;Journal 183d0 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 Mode=${mode}}..
183e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
183f0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
18400 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
18410 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
18420 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20  ime format, add
18430 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20  the necessary..
18440 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72       #       por
18450 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e  tion of the conn
18460 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
18470 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
18480 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
18490 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 46  ength $dateTimeF 184a0 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e ormat] > 0} then 184b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe 184c0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; 184d0 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 DateTimeFormat=$
184e0 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d  {dateTimeFormat}
184f0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
18500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
18510 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c  OTE: If our call
18520 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44  er specified a D
18530 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64  ateTimeKind, add
18540 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70   the necessary p
18550 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
18560 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
18570 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e  nection string n
18580 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
18590 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
185a0 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65  length $dateTime 185b0 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Kind] > 0} then 185c0 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 185d0 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 d connection {;D 185e0 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 ateTimeKind=${da
185f0 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20  teTimeKind}}..
18600 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
18610 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
18620 46 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 20  Figure out what
18630 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20  the final flags
18640 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  for this connect
18650 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d  ion need to be..
18660 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
18670 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f  set flags [getCo
18680 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66  nnectionFlags $f 18690 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 ileName$flags $186a0 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 quiet].... 186b0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 186c0 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s 186d0 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 pecified some SQ 186e0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c LiteConnectionFl 186f0 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 ags, add the.. 18700 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 # nece 18710 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 ssary portion of 18720 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 18730 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... 18740 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 18750 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
18760 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e  flags] > 0} then
18770 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
18780 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
18790 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d  Flags=${flags}}. 187a0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 187b0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 187c0 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller 187d0 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 specified an ex 187e0 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 tra payload to t 187f0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 he connection.. 18800 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 # str 18810 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e ing, append it n 18820 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. 18830 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 18840 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e length$extra] >
18850 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
18860 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
18870 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d  ction \; $extra. 18880 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 18890 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 188a0 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 E: Add the name 188b0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 of the current t 188c0 65 73 74 20 66 69 6c 65 2c 20 69 66 20 61 76 61 est file, if ava 188d0 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 ilable. This is 188e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 188f0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 64 65 only used for de 18900 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 bugging... 18910 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 18920 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 18930 5f 66 69 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a _file]} then {.. 18940 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c 18950 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 65 73 74 onnection {;Test 18960 46 69 6c 65 3d 24 7b 3a 3a 74 65 73 74 5f 66 69 File=${::test_fi
18970 6c 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  le}}..      }...
18980 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
18990 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  # NOTE: Add the
189a0 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72  name of the curr
189b0 65 6e 74 20 74 65 73 74 2c 20 69 66 20 61 76 61  ent test, if ava
189c0 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73  ilable.  This is
189d0 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 23 20 20   only..      #
189e0 20 20 20 20 20 75 73 65 64 20 66 6f 72 20 64 65       used for de
189f0 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20  bugging...
18a00 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
18a10 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 61 67 6c  fo exists ::eagl
18a20 65 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e  e_tests(CurrentN
18a30 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ame)]} then {..
18a40 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
18a50 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 65 73 74 4e  nnection {;TestN
18a60 61 6d 65 3d 24 7b 3a 3a 65 61 67 6c 65 5f 74 65  ame=${::eagle_te 18a70 73 74 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 sts(CurrentName) 18a80 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... 18a90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 18aa0 4e 4f 54 45 3a 20 46 6f 72 20 63 6c 61 72 69 74 NOTE: For clarit 18ab0 79 2c 20 61 70 70 65 6e 64 20 61 20 66 69 6e 61 y, append a fina 18ac0 6c 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 6f 20 74 l semicolon to t 18ad0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 18ae0 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ring... #.. 18af0 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con 18b00 6e 65 63 74 69 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20 nection \;.... 18b10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 18b20 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 OTE: Open the da 18b30 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio 18b40 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 n now, placing t 18b50 68 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 he opaque handle 18b60 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 value.. # 18b70 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 into the v 18b80 61 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 ariable specifie 18b90 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e d by our caller. 18ba0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 18bb0 20 73 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 set db [sql ope 18bc0 6e 20 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b n -type SQLite [ 18bd0 73 75 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f subst$connectio
18be0 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  n]]....      #..
18bf0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f        # NOTE: Co
18c00 6e 66 69 67 75 72 65 20 74 68 65 20 74 65 6d 70  nfigure the temp
18c10 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory
18c20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70  for the newly op
18c30 65 6e 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20  ened database..
18c40 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
18c50 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65  nection now unle
18c60 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f  ss our caller fo
18c70 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20  rbids it...
18c80 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74   #..      if {$t 18c90 65 6d 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e emporary && ![in 18ca0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s 18cb0 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 etTemporaryDirec 18cc0 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a tory)]} then {.. 18cd0 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 sql exec 18ce0 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 ute$db [appendA
18cf0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
18d00 20 20 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f     "PRAGMA temp_
18d10 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory
18d20 3d 20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72  = \"" [getTempor
18d30 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22  aryDirectory] \"
18d40 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  \;]..      }....
18d50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
18d60 20 4e 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61   NOTE: Perform a
18d70 6e 79 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e  ny extra per-con
18d80 6e 65 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f  nection setup fo
18d90 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e  r the newly open
18da0 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
18db0 20 20 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75    database now u
18dc0 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72  nless our caller
18dd0 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20   forbids it...
18de0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
18df0 20 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20   executeOnSetup
18e00 5b 67 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74  [getExecuteOnSet
18e10 75 70 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  up]....      if
18e20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
18e30 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d  $executeOnSetup] 18e40 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 18e50 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 ![info exis 18e60 74 73 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f ts ::no(executeO 18e70 6e 53 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b nSetup)]} then { 18e80 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 18e90 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 18ea0 73 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 s command may ra 18eb0 69 73 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 ise an error; if 18ec0 20 73 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e so, that is fin 18ed0 65 2c 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23 e, as.. # 18ee0 20 20 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f the enclo 18ef0 73 69 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74 sing test will t 18f00 68 65 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b hen fail. The [ 18f10 73 75 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 subst] command i 18f20 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 18f30 20 20 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53 used on the S 18f40 51 4c 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65 QL in case it ne 18f50 65 64 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20 eds to refer to 18f60 73 74 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 state in our.. 18f70 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 18f80 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 ntext... 18f90 23 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 #.. sql e 18fa0 78 65 63 75 74 65 20 24 64 62 20 5b 73 75 62 73 xecute$db [subs
18fb0 74 20 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75  t $executeOnSetu 18fc0 70 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 p].. }.... 18fd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 18fe0 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 NOTE: Always ret 18ff0 75 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 urn the connecti 19000 6f 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 on handle upon s 19010 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 uccess... # 19020 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
19030 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  db..    }.....
19040 20 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e    proc getDbConn
19050 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d  ection { {varNam
19060 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e db} } {..
19070 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
19080 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
19090 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
190a0 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
190b0 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
190c0 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
190d0 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20     caller.  The
190e0 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61  handle to the da
190f0 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c  tabase previousl
19100 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  y opened via the
19110 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
19120 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64  [setupDb] proced
19130 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74  ure should be st
19140 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
19150 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
19160 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d  r 1 $varName db. 19170 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 19180 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 # NOTE: This r 19190 65 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e eturns the ADO.N 191a0 45 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e ET IDbConnection 191b0 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 object instance 191c0 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 for the.. 191d0 23 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65 # specifie 191e0 64 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 d databse handle 191f0 2e 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 . Since getting 19200 20 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c this object rel 19210 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 ies upon.. 19220 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e # Eagle in 19230 74 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 ternals, great c 19240 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 are should be ta 19250 6b 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 ken to avoid dis 19260 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 posing of.. 19270 20 23 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 # this ob 19280 6a 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 ject or otherwis 19290 65 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 e putting it int 192a0 6f 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 o an invalid sta 192b0 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. 192c0 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 192d0 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b ists db]} then { 192e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 192f0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 19300 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 19310 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 19320 63 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b c -objectflags + 19330 4e 6f 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 NoDispose -alias 19340 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19350 20 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 Interpreter.Ge 19360 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 tActive.connecti 19370 6f 6e 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 ons Item$db..
19380 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result]
19390 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
193a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
193b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63       # NOTE: Suc
193c0 63 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65  cess, return the
193d0 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
193e0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  andle...
193f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72    #..          r
19400 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20  eturn $result.. 19410 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 19420 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 19430 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 19440 46 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 Failure, report 19450 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 19460 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 19470 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
19480 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
19490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
194a0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
194b0 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e  ailed to get con
194c0 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66  nection handle f
194d0 6f 72 20 64 61 74 61 62 61 73 65 20 5c 22 22 20  or database \""
194e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
194f0 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a   $db "\", error: 19500 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 " \n\t$result
19510 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
19520 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
19530 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
19540 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72  : Failure, retur
19550 6e 20 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69  n an obviously i
19560 6e 76 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62  nvalid opaque ob
19570 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  ject handle...
19580 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
19590 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c  urn ""..    }...
195a0 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 44  ..    proc freeD
195b0 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76  bConnection { {v
195c0 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f  arName connectio
195d0 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  n} } {..      #.
195e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
195f0 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
19600 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
19610 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e  e.g. "connection
19620 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ") in the..
19630 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
19640 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20   of our caller.
19650 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65   The opaque obje
19660 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e  ct handle for an
19670 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20   ADO.NET..
19680 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  #       connecti
19690 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65  on previously re
196a0 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62  turned by [getDb
196b0 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75  Connection] shou
196c0 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20  ld be..      #
196d0 20 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 72       stored ther
196e0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
196f0 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 19700 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a ame connection.. 19710 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 19720 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 19730 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f to remove the o 19740 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e paque object han 19750 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 dle from the int 19760 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 erpreter.. 19770 23 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 # now. Th 19780 69 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f is [object dispo 19790 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f se] call will no 197a0 74 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f t actually dispo 197b0 73 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 se of the.. 197c0 20 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 # underly 197d0 69 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 ing object becau 197e0 73 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 se the +NoDispos 197f0 65 20 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f e flag was set o 19800 6e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 n it.. # 19810 20 20 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 during creat 19820 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 ion of the opaqu 19830 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e e object handle. 19840 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 19850 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 19860 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 s connection] && 19870 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 \.. [c 19880 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 atch {object dis 19890 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e pose$connection
198a0 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
198b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
198c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We
198d0 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74  somehow failed t
198e0 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e  o remove the han
198f0 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e  dle, report why.
19900 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
19910 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 19920 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 19930 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 19940 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 19950 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 ING: failed to r 19960 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e emove connection 19970 20 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e handle \""$con
19980 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  nection \..
19990 20 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f         "\", erro
199a0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 199b0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 \n].. }.. 199c0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 199d0 63 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f c addDbConnectio 199e0 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b n { connection { 199f0 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d varName db} } {. 19a00 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 19a10 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 19a20 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 19a30 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 19a40 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 19a50 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 19a60 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 19a70 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 19a80 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
19a90 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  e db....      #.
19aa0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
19ab0 72 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c  reate a correctl
19ac0 79 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65  y formatted name
19ad0 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
19ae0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d  e connection to.
19af0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
19b00 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
19b10 69 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74  ist managed by t
19b20 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72  he Eagle interpr
19b30 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  eter...      #..
19b40 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62        set db [ob
19b50 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
19b60 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
19b70 0a 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65  .          Eagle
19b80 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69  ._Components.Pri
19b90 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44  vate.FormatOps D
19ba0 61 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d  atabaseObjectNam
19bb0 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d  e $connection \. 19bc0 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 . SQLit 19bd0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a eConnection [obj 19be0 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 ect invoke Inter 19bf0 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 preter.GetActive 19c00 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 NextId]].... 19c10 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 19c20 54 45 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 TE: Add the data 19c30 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection 19c40 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 provided by our 19c50 63 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 caller to the li 19c60 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 st.. # 19c70 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e of those known 19c80 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e to the Eagle in 19c90 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 terpreter... 19ca0 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 #.. objec 19cb0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 19cc0 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 +NonPublic Inter 19cd0 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 preter.GetActive 19ce0 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 .connections Add 19cf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 \..$d
19d00 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  b $connection.. 19d10 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 19d20 63 20 72 65 6d 6f 76 65 44 62 54 72 61 6e 73 61 c removeDbTransa 19d30 63 74 69 6f 6e 20 7b 20 74 72 61 6e 73 61 63 74 ction { transact 19d40 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ion } {.. # 19d50 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 19d60 52 65 6d 6f 76 65 20 74 68 65 20 64 61 74 61 62 Remove the datab 19d70 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 ase transaction 19d80 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 provided by our 19d90 63 61 6c 6c 65 72 20 66 72 6f 6d 20 74 68 65 0d caller from the. 19da0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c . # l 19db0 69 73 74 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f ist of those kno 19dc0 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 wn to the Eagle 19dd0 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... 19de0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a #.. obj 19df0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 19e00 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 s +NonPublic Int 19e10 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi 19e20 76 65 2e 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 ve.transactions 19e30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 52 65 6d \.. Rem 19e40 6f 76 65 20 24 74 72 61 6e 73 61 63 74 69 6f 6e ove$transaction
19e50 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
19e60 70 72 6f 63 20 67 65 74 52 6f 77 73 46 72 6f 6d  proc getRowsFrom
19e70 44 61 74 61 54 61 62 6c 65 20 7b 20 64 61 74 61  DataTable { data
19e80 54 61 62 6c 65 20 7b 76 61 6c 75 65 43 61 6c 6c  Table {valueCall
19e90 62 61 63 6b 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  back ""} } {..
19ea0 20 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69      set rows [li
19eb0 73 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63  st]..      set c
19ec0 6f 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65  ount [$dataTable 19ed0 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d Columns.Count]. 19ee0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 ... for {se 19ef0 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 t index 0} {$ind
19f00 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e  ex < $count} {in 19f10 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 cr index} {.. 19f20 20 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c set dataCol 19f30 75 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 umn [$dataTable
19f40 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67  -alias Columns.g
19f50 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 19f60 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d . set nam 19f70 65 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 es($index) [$dat 19f80 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 aColumn ColumnNa 19f90 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a me].. }.... 19fa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 19fb0 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 73 6f 6d NOTE: Setup som 19fc0 65 20 54 63 6c 20 72 65 74 75 72 6e 20 63 6f 64 e Tcl return cod 19fd0 65 20 63 6f 6e 73 74 61 6e 74 73 2e 0d 0a 20 20 e constants... 19fe0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 19ff0 20 4f 6b 20 30 3b 20 73 65 74 20 45 72 72 6f 72 Ok 0; set Error 1a000 20 31 3b 20 73 65 74 20 52 65 74 75 72 6e 20 32 1; set Return 2 1a010 3b 20 73 65 74 20 42 72 65 61 6b 20 33 3b 20 73 ; set Break 3; s 1a020 65 74 20 43 6f 6e 74 69 6e 75 65 20 34 0d 0a 0d et Continue 4... 1a030 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f . object fo 1a040 72 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 reach -alias dat 1a050 61 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f aRow [set dataRo 1a060 77 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 ws [$dataTable R
1a070 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ows]] {..
1a080 20 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d   set row [list].
1a090 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b  ...        for {
1a0a0 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69  set index 0} {$i 1a0b0 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b ndex <$count} {
1a0c0 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20  incr index} {..
1a0d0 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c           set val
1a0e0 75 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72  ue [$dataRow -cr 1a0f0 65 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f eate -alias get_ 1a100 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a Item$index]....
1a110 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
1a120 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 1a130 6c 75 65 43 61 6c 6c 62 61 63 6b 5d 20 3e 20 30 lueCallback] > 0 1a140 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a150 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b set code [ 1a160 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1a170 20 20 20 20 20 20 20 24 76 61 6c 75 65 43 61 6c$valueCal
1a180 6c 62 61 63 6b 20 24 64 61 74 61 54 61 62 6c 65  lback $dataTable 1a190 20 24 64 61 74 61 52 6f 77 20 24 69 6e 64 65 78$dataRow $index 1a1a0 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20$value..
1a1b0 20 20 20 20 20 7d 20 6e 65 77 56 61 6c 75 65 5d       } newValue]
1a1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
1a1d0 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 4f 6b  if {$code ==$Ok
1a1e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a1f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a200 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1a210 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69   Use the specifi
1a220 65 64 20 28 6e 65 77 3f 29 20 72 6f 77 20 76 61  ed (new?) row va
1a230 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  lue...
1a240 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1a250 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77       lappend row
1a260 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69   [list $names($i
1a270 6e 64 65 78 29 20 24 6e 65 77 56 61 6c 75 65 5d  ndex) $newValue] 1a280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 1a290 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d elseif {$code ==
1a2a0 20 24 45 72 72 6f 72 7d 20 74 68 65 6e 20 7b 0d   $Error} then {. 1a2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1a2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a2d0 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 1a2e0 28 6e 65 77 3f 29 20 4e 55 4c 4c 20 72 6f 77 20 (new?) NULL row 1a2f0 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 value... 1a300 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1a310 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 lappend r 1a320 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 ow [list$names(
1a330 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20  $index)].. 1a340 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 1a350 24 63 6f 64 65 20 3d 3d 20 24 52 65 74 75 72 6e$code == $Return 1a360 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a370 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a380 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1a390 20 53 6b 69 70 20 72 65 6d 61 69 6e 69 6e 67 20 Skip remaining 1a3a0 76 61 6c 75 65 73 20 66 6f 72 20 74 68 69 73 20 values for this 1a3b0 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 row... 1a3c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1a3d0 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 break.. 1a3e0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif 1a3f0 20 7b 24 63 6f 64 65 20 3d 3d 20 24 42 72 65 61 {$code == $Brea 1a400 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 k} then {.. 1a410 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1a420 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1a430 3a 20 53 6b 69 70 20 70 72 6f 63 65 73 73 69 6e : Skip processin 1a440 67 20 74 68 69 73 20 72 6f 77 20 76 61 6c 75 65 g this row value 1a450 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 1a460 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1a470 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 } elseif {$code
1a480 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68  == $Continue} th 1a490 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1a4a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1a4b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1a4c0 20 64 65 66 61 75 6c 74 20 72 6f 77 20 76 61 6c default row val 1a4d0 75 65 20 68 61 6e 64 6c 69 6e 67 2e 0d 0a 20 20 ue handling... 1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1a4f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1a500 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1a510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 1a520 74 20 63 6f 64 65 20 24 43 6f 6e 74 69 6e 75 65 t code$Continue
1a530 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
1a540 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24  .          if {$1a550 63 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 code ==$Continu
1a560 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
1a570 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
1a580 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65  ng length $value 1a590 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 ] > 0 && \.. 1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 ![ob 1a5b0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 ject invoke Conv 1a5c0 65 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 ert IsDBNull$va
1a5d0 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lue]} then {..
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70              lapp
1a5f0 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e  end row [list $n 1a600 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 ames($index) [$v 1a610 61 6c 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d alue ToString]]. 1a620 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 1a630 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1a640 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 lappend row 1a650 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 [list$names($i 1a660 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 ndex)].. 1a670 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1a680 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1a690 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 . lappend 1a6a0 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 rows$row..
1a6b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
1a6c0 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d  urn $rows.. } 1a6d0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 ..... proc du 1a6e0 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 mpRowsFromDataTa 1a6f0 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f ble { channel ro 1a700 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 ws } {.. se 1a710 74 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a t sequence 1.... 1a720 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f foreach ro 1a730 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 w$rows {..
1a740 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1a750 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1a760 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 . [ex 1a770 70 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 pr {$sequence >
1a780 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20  1 ? "\n" : ""}]
1a790 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65  "---- ROW #" $se 1a7a0 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 quence :\n].... 1a7b0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 foreach p 1a7c0 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 air$row {..
1a7d0 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67        if {[lleng
1a7e0 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20  th $pair] >= 2} 1a7f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1a800 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1a810 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1a820 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1a830 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64       [list [lind
1a840 65 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20  ex $pair 0]] ": 1a850 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 " [list [lindex 1a860 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20$pair 1]] \n]..
1a870 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69           } elsei
1a880 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69  f {[llength $pai 1a890 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d r] == 1} then {. 1a8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1a8b0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1a8c0 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20  endArgs \t \..
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c                [l
1a8e0 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69  ist [lindex $pai 1a8f0 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c r 0]] ": <null>\ 1a900 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } 1a910 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1a920 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1a930 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b  nel \t<empty>\n;
1a940 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61   # NOTE: No data
1a950 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
1a960 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1a970 20 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e       incr sequen
1a980 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ce..      }..
1a990 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1a9a0 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65  cleanupDb { file
1a9b0 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62  Name {varName db
1a9c0 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d  } {collect true}
1a9d0 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d   {qualify true}.
1a9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a9f0 20 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72        {delete tr
1aa00 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue} } {..      #
1aa10 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1aa20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65  Attempt to force
1aa30 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61   all pending "ga
1aa40 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74  rbage" objects t
1aa50 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d  o be collected,.
1aa60 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
1aa70 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20  ncluding SQLite
1aa80 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62  statements and b
1aa90 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74  ackup objects; t
1aaa0 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77  his should allow
1aab0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1aac0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
1aad0 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to
1aae0 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20  be deleted...
1aaf0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1ab00 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b  $collect} then { 1ab10 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 .. collec 1ab20 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 tGarbage$::test
1ab30 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20  _channel..
1ab40 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
1ab50 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
1ab60 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
1ab70 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
1ab80 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
1ab90 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
1aba0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
1abb0 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
1abc0 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
1abd0 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1abe0 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20  ed via the..
1abf0 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70    #       [setup
1ac00 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68  Db] procedure sh
1ac10 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74  ould be stored t
1ac20 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  here...      #..
1ac30 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 1ac40 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 arName db.... 1ac50 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1ac60 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f TE: Close the co 1ac70 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 nnection to the 1ac80 64 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 database now. T 1ac90 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 his should allow 1aca0 20 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 us.. # 1acb0 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 to delete the 1acc0 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 underlying data 1acd0 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 base file... 1ace0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 1acf0 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 info exists db] 1ad00 26 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 && [catch {sql c 1ad10 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d lose$db} error]
1ad20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1ad30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1ad40 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
1ad50 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20  failed to close
1ad60 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65  the database, re
1ad70 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
1ad80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
1ad90 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1ada0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1adb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 1adc0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1add0 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 iled to close da 1ade0 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 tabase \""$db "
1adf0 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  \", error: " \..
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
1ae10 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 1ae20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 1ae30 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 1ae40 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 irst, see if our 1ae50 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 caller has requ 1ae60 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f ested an in-memo 1ae70 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 ry database... 1ae80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 1ae90 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d isMemory [isMem 1aea0 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d oryDb$fileName]
1aeb0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
1aec0 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
1aed0 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74   the full path t
1aee0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
1aef0 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e  ile name.  For n
1af00 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20  ow, all test..
1af10 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61      #       data
1af20 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73  base files are s
1af30 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d  tored in the tem
1af40 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79  porary directory
1af50 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1af60 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79    if {!$isMemory 1af70 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 &&$qualify} th
1af80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
1af90 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
1afa0 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
1afb0 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69  seDirectory] [fi
1afc0 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d  le tail $fileNam 1afd0 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e]].. }.... 1afe0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1aff0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 1b000 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 the file still e 1b010 78 69 73 74 73 3b 20 69 6e 69 74 69 61 6c 6c 79 xists; initially 1b020 2c 20 61 73 73 75 6d 65 20 61 6c 6c 20 66 69 6c , assume all fil 1b030 65 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 23 es will.. # 1b040 20 20 20 20 20 20 20 62 65 20 64 65 6c 65 74 65 be delete 1b050 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 d successfully, 1b060 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 if necessary... 1b070 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 1b080 74 20 73 75 63 63 65 73 73 20 74 72 75 65 0d 0a t success true.. 1b090 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 .. if {!$is
1b0a0 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74  Memory && $delet 1b0b0 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 e && [file exist 1b0c0 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
1b0d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1b0e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1b0f0 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64   Skip deleting d
1b100 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 66  atabase files if
1b110 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74   somebody sets t
1b120 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20  he global..
1b130 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61     #       varia
1b140 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69  ble to prevent i
1b150 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
1b160 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1b170 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c  o exists ::no(cl
1b180 65 61 6e 75 70 44 62 46 69 6c 65 73 29 5d 7d 20  eanupDbFiles)]}
1b190 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1b1a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
1b1b0 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
1b1c0 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73  o delete the tes
1b1d0 74 20 57 41 4c 20 66 69 6c 65 2c 20 69 66 20 61  t WAL file, if a
1b1e0 6e 79 2c 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ny, now...
1b1f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1b200 20 73 65 74 20 77 61 6c 46 69 6c 65 4e 61 6d 65   set walFileName
1b210 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69   [appendArgs $fi 1b220 6c 65 4e 61 6d 65 20 2d 77 61 6c 5d 0d 0a 0d 0a leName -wal].... 1b230 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 if {[f 1b240 69 6c 65 20 65 78 69 73 74 73 20 24 77 61 6c 46 ile exists$walF
1b250 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
1b260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1b270 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1b280 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 69 73  OTE: If there is
1b290 20 61 20 57 41 4c 20 66 69 6c 65 2c 20 69 74 20   a WAL file, it
1b2a0 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 20 62  should be zero b
1b2b0 79 74 65 73 20 61 74 20 74 68 69 73 0d 0a 20 20  ytes at this..
1b2c0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1b2d0 20 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20    point...
1b2e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1b2f0 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 73 69       if {[set si
1b300 7a 65 20 5b 66 69 6c 65 20 73 69 7a 65 20 24 77  ze [file size $w 1b310 61 6c 46 69 6c 65 4e 61 6d 65 5d 5d 20 3d 3d 20 alFileName]] == 1b320 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1b330 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1b340 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1b350 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai 1b360 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 led to delete th 1b370 65 20 57 41 4c 20 66 69 6c 65 2c 20 72 65 70 6f e WAL file, repo 1b380 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 1b390 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b3a0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1b3b0 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 1b3c0 24 77 61 6c 46 69 6c 65 4e 61 6d 65 7d 20 65 72$walFileName} er
1b3d0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
1b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1b3f0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1b400 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1b410 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b420 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1b430 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1b440 64 65 6c 65 74 65 20 57 41 4c 20 66 69 6c 65 20 delete WAL file 1b450 5c 22 22 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 \""$walFileName
1b460 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b470 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
1b480 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f  ng cleanup, erro
1b490 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 1b4a0 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 1b4b0 20 20 20 20 20 20 20 20 73 65 74 20 73 75 63 63 set succ 1b4c0 65 73 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 ess false.. 1b4d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1b4e0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1b4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b500 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1b510 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1b520 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1b530 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
1b540 4e 49 4e 47 3a 20 57 41 4c 20 66 69 6c 65 20 5c  NING: WAL file \
1b550 22 22 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 20  "" $walFileName 1b560 22 5c 22 20 69 73 20 22 20 24 73 69 7a 65 20 5c "\" is "$size \
1b570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1b580 20 20 20 20 22 20 62 79 74 65 73 20 69 6e 20 73      " bytes in s
1b590 69 7a 65 2c 20 73 6b 69 70 70 69 6e 67 20 61 6c  ize, skipping al
1b5a0 6c 20 66 69 6c 65 20 64 65 6c 65 74 69 6f 6e 73  l file deletions
1b5b0 2e 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20  ...\n"]....
1b5c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
1b5d0 31 3b 20 23 20 65 72 72 6f 72 0d 0a 20 20 20 20  1; # error..
1b5e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1b5f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1b600 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1b610 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
1b620 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74   to delete the t
1b630 65 73 74 20 53 48 4d 20 66 69 6c 65 2c 20 69 66  est SHM file, if
1b640 20 61 6e 79 2c 20 6e 6f 77 2e 0d 0a 20 20 20 20   any, now...
1b650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1b660 20 20 20 73 65 74 20 73 68 6d 46 69 6c 65 4e 61     set shmFileNa
1b670 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  me [appendArgs $1b680 66 69 6c 65 4e 61 6d 65 20 2d 73 68 6d 5d 0d 0a fileName -shm].. 1b690 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1b6a0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 68 [file exists$sh
1b6b0 6d 46 69 6c 65 4e 61 6d 65 5d 20 26 26 20 5c 0d  mFileName] && \.
1b6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
1b6d0 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
1b6e0 74 65 20 24 73 68 6d 46 69 6c 65 4e 61 6d 65 7d  te $shmFileName} 1b6f0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 1b700 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 1b710 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1b720 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 1b730 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete 1b740 74 68 65 20 53 48 4d 20 66 69 6c 65 2c 20 72 65 the SHM file, re 1b750 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 port why... 1b760 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b770 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1b780 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1b790 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1b7a0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1b7b0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
1b7c0 20 74 6f 20 64 65 6c 65 74 65 20 53 48 4d 20 66   to delete SHM f
1b7d0 69 6c 65 20 5c 22 22 20 24 73 68 6d 46 69 6c 65  ile \"" $shmFile 1b7e0 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 1b7f0 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri 1b800 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f ng cleanup, erro 1b810 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
1b820 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
1b830 20 20 20 20 73 65 74 20 73 75 63 63 65 73 73 20      set success
1b840 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  false..
1b850 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1b860 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
1b870 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
1b880 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20  delete the test
1b890 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f  database file no
1b8a0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  w...          #.
1b8b0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
1b8c0 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
1b8d0 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72  te $fileName} er 1b8e0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 1b8f0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1b900 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1b910 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail 1b920 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 ed to delete the 1b930 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 file, report wh 1b940 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y... 1b950 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 #.. t 1b960 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1b970 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b980 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b990 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
1b9a0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  G: failed to del
1b9b0 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ete database fil
1b9c0 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 1b9d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b9e0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 1b9f0 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 eanup, error: " 1ba00 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1ba10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
1ba20 65 74 20 73 75 63 63 65 73 73 20 66 61 6c 73 65  et success false
1ba30 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1ba40 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1ba50 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1ba60 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1ba70 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69  Show that we ski
1ba80 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68  pped deleting th
1ba90 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  e file...
1baa0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1bab0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1bac0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1bad0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1bae0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 1baf0 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 : skipped deleti 1bb00 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ng database file 1bb10 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
1bb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1bb30 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e  "\" during clean
1bb40 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  up\n"]..
1bb50 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
1bb60 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
1bb70 20 7b 24 73 75 63 63 65 73 73 20 3f 20 30 20 3a   {$success ? 0 : 1bb80 20 31 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 1}].. }..... 1bb90 20 20 20 20 70 72 6f 63 20 73 61 76 65 45 6e 76 proc saveEnv 1bba0 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 1bbb0 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 s { names {varNa 1bbc0 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 me ""} } {.. 1bbd0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1bbe0 45 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 E: For each name 1bbf0 2c 20 64 6f 65 73 20 74 68 65 20 6c 69 76 65 20 , does the live 1bc00 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari 1bc10 61 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d able exist? If. 1bc20 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 1bc30 6f 2c 20 73 61 76 65 20 74 68 65 20 76 61 6c 75 o, save the valu 1bc40 65 20 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68 e for later; oth 1bc50 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 erwise, make sur 1bc60 65 20 74 68 65 20 73 61 76 65 64 0d 0a 20 20 20 e the saved.. 1bc70 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 # value 1bc80 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 does not exist 1bc90 65 69 74 68 65 72 2e 20 20 54 68 65 20 6c 69 76 either. The liv 1bca0 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 e environment va 1bcb0 72 69 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 23 riables.. # 1bcc0 20 20 20 20 20 20 20 41 52 45 20 4e 4f 54 20 63 ARE NOT c 1bcd0 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 hanged by this p 1bce0 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 rocedure... 1bcf0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 1bd00 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
1bd10 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65  rName] == 0} the
1bd20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
1bd30 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e   varName savedEn
1bd40 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  v..      }....
1bd50 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 1bd60 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d Name savedEnv... 1bd70 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e . foreach n 1bd80 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 ame$names {..
1bd90 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
1bda0 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61  exists ::env($na 1bdb0 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 me)]} then {.. 1bdc0 20 20 20 20 20 20 20 20 73 65 74 20 73 61 76 65 set save 1bdd0 64 45 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65 dEnv($name) $::e 1bde0 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 nv($name)..
1bdf0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1be00 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f         unset -no
1be10 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e  complain savedEn
1be20 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  v($name).. 1be30 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1be40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1be50 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 NOTE: This is s 1be60 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 elf-cleaning. I 1be70 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 f no saved envir 1be80 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 onment variables 1be90 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 now.. # 1bea0 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 exist, remov 1beb0 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 e the array... 1bec0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1bed0 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 {[array size sav 1bee0 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 edEnv] == 0} the 1bef0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 n {.. uns 1bf00 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 et -nocomplain s 1bf10 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d avedEnv.. } 1bf20 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1bf30 70 72 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 69 proc restoreEnvi 1bf40 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 1bf50 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d { names {varNam 1bf60 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. 1bf70 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1bf80 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c : For each name, 1bf90 20 64 6f 65 73 20 74 68 65 20 73 61 76 65 64 20 does the saved 1bfa0 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari 1bfb0 61 62 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d able exist? If. 1bfc0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 1bfd0 6f 2c 20 72 65 73 74 6f 72 65 20 74 68 65 20 73 o, restore the s 1bfe0 61 76 65 64 20 76 61 6c 75 65 20 61 6e 64 20 75 aved value and u 1bff0 6e 73 65 74 20 69 74 3b 20 6f 74 68 65 72 77 69 nset it; otherwi 1c000 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20 se, make sure.. 1c010 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 1c020 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e live environmen 1c030 74 20 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20 t variable does 1c040 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72 not exist either 1c050 20 28 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 (i.e. it.. 1c060 20 23 20 20 20 20 20 20 20 77 61 73 20 6e 6f 74 # was not 1c070 20 73 65 74 20 74 6f 20 62 65 67 69 6e 20 77 69 set to begin wi 1c080 74 68 29 2e 20 20 42 6f 74 68 20 73 61 76 65 64 th). Both saved 1c090 20 61 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 6f and live enviro 1c0a0 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 nment.. # 1c0b0 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 20 41 variables A 1c0c0 52 45 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 RE changed by th 1c0d0 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 is procedure... 1c0e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1c0f0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 1c100 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d$varName] == 0}
1c110 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c120 20 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76   set varName sav
1c130 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a  edEnv..      }..
1c140 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
1c150 24 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e  $varName savedEn 1c160 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 v.... forea 1c170 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b ch name$names {
1c180 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
1c190 6e 66 6f 20 65 78 69 73 74 73 20 73 61 76 65 64  nfo exists saved
1c1a0 45 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65  Env($name)]} the 1c1b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 1c1c0 65 74 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20 et ::env($name)
1c1d0 24 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29  $savedEnv($name)
1c1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65  ..          unse
1c1f0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61  t -nocomplain sa
1c200 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20  vedEnv($name).. 1c210 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1c220 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 . unset 1c230 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 -nocomplain ::e 1c240 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 nv($name)..
1c250 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
1c260 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1c270 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20  # NOTE: This is
1c280 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20  self-cleaning.
1c290 49 66 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69  If no saved envi
1c2a0 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65  ronment variable
1c2b0 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20  s now..      #
1c2c0 20 20 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f       exist, remo
1c2d0 76 65 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20  ve the array...
1c2e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1c2f0 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61   {[array size sa
1c300 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68  vedEnv] == 0} th
1c310 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e  en {..        un
1c320 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
1c330 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20  savedEnv..
1c340 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1c350 20 70 72 6f 63 20 73 61 76 65 45 61 67 6c 65 53   proc saveEagleS
1c360 68 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  hellEnvironment
1c370 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
1c380 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
1c390 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73  edEnv....      s
1c3a0 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  aveEnvironmentVa
1c3b0 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 4e 6f  riables [list No
1c3c0 4d 75 74 65 78 65 73 5d 20 73 61 76 65 64 45 6e  Mutexes] savedEn
1c3d0 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  v..    }.....
1c3e0 20 70 72 6f 63 20 72 65 73 74 6f 72 65 45 61 67   proc restoreEag
1c3f0 6c 65 53 68 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65  leShellEnvironme
1c400 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75  nt {} {..      u
1c410 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20  pvar 1 savedEnv
1c420 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
1c430 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e    restoreEnviron
1c440 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c  mentVariables [l
1c450 69 73 74 20 4e 6f 4d 75 74 65 78 65 73 5d 20 73  ist NoMutexes] s
1c460 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a  avedEnv..    }..
1c470 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65  ...    proc save
1c480 4d 64 61 43 6f 6e 66 69 67 45 6e 76 69 72 6f 6e  MdaConfigEnviron
1c490 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ment {} {..
1c4a0 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e   upvar 1 savedEn
1c4b0 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20  v savedEnv....
1c4c0 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d      saveEnvironm
1c4d0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69  entVariables [li
1c4e0 73 74 20 43 4f 4d 50 4c 55 53 5f 4d 44 41 5d 20  st COMPLUS_MDA]
1c4f0 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d  savedEnv..    }.
1c500 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73  ....    proc res
1c510 74 6f 72 65 4d 64 61 43 6f 6e 66 69 67 45 6e 76  toreMdaConfigEnv
1c520 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20  ironment {} {..
1c530 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76       upvar 1 sav
1c540 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a  edEnv savedEnv..
1c550 0d 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45  ..      restoreE
1c560 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62  nvironmentVariab
1c570 6c 65 73 20 5b 6c 69 73 74 20 43 4f 4d 50 4c 55  les [list COMPLU
1c580 53 5f 4d 44 41 5d 20 73 61 76 65 64 45 6e 76 0d  S_MDA] savedEnv.
1c590 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1c5a0 72 6f 63 20 73 61 76 65 47 65 74 53 65 74 74 69  roc saveGetSetti
1c5b0 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65  ngValueEnvironme
1c5c0 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75  nt {} {..      u
1c5d0 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20  pvar 1 savedEnv
1c5e0 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
1c5f0 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e    saveEnvironmen
1c600 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
1c610 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 6f   \..          No
1c620 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74  _Expand No_SQLit
1c630 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65  eGetSettingValue
1c640 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e   No_SQLiteXmlCon
1c650 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20  figFile] \..
1c660 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a        savedEnv..
1c670 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1c680 6f 63 20 72 65 73 74 6f 72 65 47 65 74 53 65 74  oc restoreGetSet
1c690 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e  tingValueEnviron
1c6a0 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ment {} {..
1c6b0 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e   upvar 1 savedEn
1c6c0 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20  v savedEnv....
1c6d0 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72      restoreEnvir
1c6e0 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1c6f0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
1c700 20 20 20 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f     No_Expand No_
1c710 53 51 4c 69 74 65 47 65 74 53 65 74 74 69 6e 67  SQLiteGetSetting
1c720 56 61 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58  Value No_SQLiteX
1c730 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d  mlConfigFile] \.
1c740 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64  .          saved
1c750 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  Env..    }.....
1c760 20 20 20 70 72 6f 63 20 73 61 76 65 53 51 4c 69     proc saveSQLi
1c770 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69  teConnectionEnvi
1c780 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20  ronment {} {..
1c790 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65      upvar 1 save
1c7a0 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d  dEnv savedEnv...
1c7b0 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72  .      saveEnvir
1c7c0 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1c7d0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
1c7e0 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 73 5f     DefaultFlags_
1c7f0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1c800 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63   No_SQLiteConnec
1c810 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d 20 5c  tionNewParser] \
1c820 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65  ..          save
1c830 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  dEnv..    }.....
1c840 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65      proc restore
1c850 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1c860 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b  Environment {} {
1c870 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
1c880 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e  savedEnv savedEn
1c890 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74 6f  v....      resto
1c8a0 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  reEnvironmentVar
1c8b0 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  iables [list \..
1c8c0 20 20 20 20 20 20 20 20 20 20 44 65 66 61 75 6c            Defaul
1c8d0 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 6f 6e  tFlags_SQLiteCon
1c8e0 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74  nection No_SQLit
1c8f0 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 61  eConnectionNewPa
1c900 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 20 20  rser] \..
1c910 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20     savedEnv..
1c920 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1c930 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 76 65 72  saveSQLiteConver
1c940 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20  tEnvironment {}
1c950 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  {..      upvar 1
1c960 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45   savedEnv savedE
1c970 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65  nv....      save
1c980 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
1c990 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  bles [list \..
1c9a0 20 20 20 20 20 20 20 20 55 73 65 5f 53 51 4c 69          Use_SQLi
1c9b0 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c  teConvert_Defaul
1c9c0 74 44 62 54 79 70 65 20 55 73 65 5f 53 51 4c 69  tDbType Use_SQLi
1c9d0 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c  teConvert_Defaul
1c9e0 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20  tTypeName] \..
1c9f0 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76          savedEnv
1ca00 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1ca10 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69  proc restoreSQLi
1ca20 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 6f 6e  teConvertEnviron
1ca30 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ment {} {..
1ca40 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e   upvar 1 savedEn
1ca50 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20  v savedEnv....
1ca60 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72      restoreEnvir
1ca70 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1ca80 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
1ca90 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e     Use_SQLiteCon
1caa0 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79  vert_DefaultDbTy
1cab0 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e  pe Use_SQLiteCon
1cac0 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65  vert_DefaultType
1cad0 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20  Name] \..
1cae0 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20     savedEnv..
1caf0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1cb00 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74  setupDbInterrupt
1cb10 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e  Callback { chann
1cb20 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20  el log } {..
1cb30 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1cb40 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 "---- setting u 1cb50 70 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 p debugger inter 1cb60 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e rupt callback... 1cb70 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b ".... if { 1cb80 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1cb90 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e saveEnvironmen 1cba0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 1cbb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cbc0 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 quietFindInterpr 1cbd0 65 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 eterTestPath qui 1cbe0 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 etSetupInterpret 1cbf0 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 erTestPath].... 1cc00 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 try {.. 1cc10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1cc20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 72 65 # NOTE: Pre 1cc30 76 65 6e 74 20 74 68 65 20 76 65 6e 64 6f 72 20 vent the vendor 1cc40 73 63 72 69 70 74 20 66 72 6f 6d 20 62 65 69 6e script from bein 1cc50 67 20 6e 6f 69 73 79 20 77 68 65 6e 20 63 72 65 g noisy when cre 1cc60 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 ating.. 1cc70 20 23 20 20 20 20 20 20 20 74 68 65 20 69 73 6f # the iso 1cc80 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete 1cc90 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. 1cca0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a . set : 1ccb0 3a 65 6e 76 28 71 75 69 65 74 46 69 6e 64 49 6e :env(quietFindIn 1ccc0 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 terpreterTestPat 1ccd0 68 29 20 31 0d 0a 20 20 20 20 20 20 20 20 20 20 h) 1.. 1cce0 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 53 set ::env(quietS 1ccf0 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 etupInterpreterT 1cd00 65 73 74 50 61 74 68 29 20 31 0d 0a 0d 0a 20 20 estPath) 1.... 1cd10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1cd20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak 1cd30 65 20 73 75 72 65 20 74 68 65 20 73 63 72 69 70 e sure the scrip 1cd40 74 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 74 t debugger and t 1cd50 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 he isolated inte 1cd60 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 20 rpreter.. 1cd70 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 # are s 1cd80 65 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 66 etup and ready f 1cd90 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 or use... 1cda0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1cdb0 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 debug setup true 1cdc0 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... 1cdd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1cde0 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 1cdf0 20 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b 61 necessary packa 1ce00 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f ges into the iso 1ce10 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete 1ce20 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. 1ce30 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 1ce40 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 eval {.. 1ce50 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 package req 1ce60 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 uire Eagle.. 1ce70 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 package 1ce80 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 require Eagle.Li 1ce90 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 brary.. 1cea0 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 package requi 1ceb0 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 re Eagle.Test.. 1cec0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1ced0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1cee0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 # NOTE: Cop 1cef0 79 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 y the necessary 1cf00 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 variables into t 1cf10 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 he isolated inte 1cf20 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 1cf30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1cf40 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 debug invoke 0 1cf50 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e set ::test_chann 1cf60 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e el$channel; # N
1cf70 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d  OTE: For [tputs]
1cf80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  ...          deb
1cf90 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20  ug invoke 0 set
1cfa0 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b  ::test_log $log; 1cfb0 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c # NOTE: For [tl 1cfc0 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]..... 1cfd0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1cfe0 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 NOTE: Install t 1cff0 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 he callback scri 1d000 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 pt to be evaluat 1d010 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 ed in the isolat 1d020 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ed.. # 1d030 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 interprete 1d040 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 r when this inte 1d050 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 rpreter is inter 1d060 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 rupted by script 1d070 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1d080 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e cancellation 1d090 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 , etc... 1d0a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 #.. d 1d0b0 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 ebug callback ap 1d0c0 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 ply {{sender e} 1d0d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 1d0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 1d0f0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 1d100 68 69 73 20 64 65 62 75 67 67 65 72 20 63 61 6c his debugger cal 1d110 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 lback is one tha 1d120 74 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e t we care about. 1d130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1d140 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 1d150 20 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 20 interruptTypes 1d160 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 [split [$e Inter
1d170 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d 0d  ruptType] ", "].
1d180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1d190 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e  f {"Canceled" in
1d1a0 20 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73   $interruptTypes 1d1b0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 1d1c0 20 20 20 20 20 20 20 22 55 6e 77 6f 75 6e 64 22 "Unwound" 1d1d0 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79 in$interruptTy
1d1e0 70 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  pes} then {..
1d1f0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1d200 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1d210 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68  TE: Make sure th
1d220 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61  e [object] comma
1d230 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  nd is available.
1d240 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 20 20 20    Since..
1d250 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
1d260 68 69 73 20 69 73 20 61 6e 20 69 73 6f 6c 61 74  his is an isolat
1d270 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20  ed interpreter,
1d280 63 68 65 63 6b 20 66 6f 72 20 69 74 20 74 68 65  check for it the
1d290 20 68 61 72 64 0d 0a 20 20 20 20 20 20 20 20 20   hard..
1d2a0 20 20 20 20 20 23 20 20 20 20 20 20 20 77 61 79       #       way
1d2b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
1d2c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1d2d0 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b    if {[llength [
1d2e0 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62  info commands ob
1d2f0 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74 68 65 6e  ject]] > 0} then
1d300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1d320 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
1d330 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 61  terate through a
1d340 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ll database conn
1d350 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f  ections known to
1d360 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..
1d370 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61        #       pa
1d380 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65 72  rent interpreter
1d390 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
1d3a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1d3b0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
1d3c0 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72  each -alias pair
1d3d0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
1d3e0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
1d3f0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
1d400 20 20 20 20 20 20 20 20 20 24 65 20 49 6e 74 65           $e Inte 1d410 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 rpreter.connecti 1d420 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ons] {.. 1d430 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 1d450 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 1d460 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c o cancel any SQL 1d470 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 queries in prog 1d480 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20 20 20 20 ress on.. 1d490 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 1d4a0 20 20 20 74 68 69 73 20 64 61 74 61 62 61 73 65 this database 1d4b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 connection... 1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d4d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1d4e0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1d4f0 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61 6e {$pair Value.Can
1d500 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  cel} error]} the
1d510 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1d520 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1d530 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1d540 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d appendArgs \n \. 1d550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1d560 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1d570 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1d580 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66 o cancel query f 1d590 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 or " \.. 1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d5b0 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20 "connection \"" 1d5c0 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c [$pair Key] "\",
1d5d0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c   error: " \n\t \
1d5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d5f0 20 20 20 20 20 20 20 20 20 20 24 65 72 72 6f 72            $error 1d600 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1d610 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1d620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1d630 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 1d640 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1d650 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1d660 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1d670 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20  endArgs \n \..
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d690 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1d6a0 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65 6c 20 61   cannot cancel a
1d6b0 6e 79 20 71 75 65 72 69 65 73 3a 20 22 20 5c 0d  ny queries: " \.
1d6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d6d0 20 20 20 20 20 22 74 68 65 20 5c 22 6f 62 6a 65       "the \"obje
1d6e0 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ct\" command is
1d6f0 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 5c 6e 22  not available\n"
1d700 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
1d710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1d720 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 7d 0d  }..          }}.
1d730 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c  .        } final
1d740 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ly {..
1d750 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65  restoreEnvironme
1d760 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
1d770 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1d780 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65     quietFindInte
1d790 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 20  rpreterTestPath
1d7a0 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 72 70  quietSetupInterp
1d7b0 72 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a  reterTestPath]..
1d7c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1d7d0 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20   } error] == 0}
1d7e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d7f0 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e  addConstraint in
1d800 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e  terruptCallback.
1d810 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20  sqlite3....
1d820 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1d830 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d l yes\n.. } 1d840 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1d850 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1d860 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c  [appendArgs "no,
1d870 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $1d880 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 1d890 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1d8a0 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 69 proc cleanupFi 1d8b0 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63 le { fileName {c 1d8c0 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 6f ollect true} {fo 1d8d0 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a rce false} } {.. 1d8e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1d8f0 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 1d900 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 o force all pend 1d910 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 ing "garbage" ob 1d920 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c jects to be coll 1d930 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 ected,.. # 1d940 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 including 1d950 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 SQLite statement 1d960 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a s and backup obj 1d970 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c ects; this shoul 1d980 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 d allow.. # 1d990 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 the under 1d9a0 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 lying database f 1d9b0 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 ile to be delete 1d9c0 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 1d9d0 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d if {$collect}
1d9e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d9f0 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20   collectGarbage
1da00 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 1da10 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1da20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1da30 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 1da40 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 file still exist 1da50 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 1da60 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi 1da70 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
1da80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1da90 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1daa0 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67  E: Skip deleting
1dab0 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 20 73   test files if s
1dac0 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65  omebody sets the
1dad0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
1dae0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1daf0 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e    to prevent it.
1db00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1db10 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20       if {$force 1db20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 || ![info exists 1db30 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c ::no(cleanupFil 1db40 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 1db50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1db60 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 1db70 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 mpt to delete th 1db80 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e e test file now. 1db90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1dba0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 if {[se 1dbb0 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 t code [catch {f 1dbc0 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
1dbd0 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74  Name} error]]} t
1dbe0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1dbf0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1dc00 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
1dc10 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64  ehow failed to d
1dc20 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20  elete the file,
1dc30 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
1dc40 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1dc50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1dc60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1dc70 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1dc90 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1dca0 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73 ed to delete tes 1dcb0 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 t file \""$file
1dcc0 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
1dcd0 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
1dce0 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f  ng cleanup, erro
1dcf0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 1dd00 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1dd10 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1dd20 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e {.. # 1dd30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 1dd40 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 TE: Show that we 1dd50 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin 1dd60 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 g the file... 1dd70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1dd80 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a set code 0.. 1dd90 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1dda0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1ddb0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1ddc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
1ddd0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b  ==== WARNING: sk
1dde0 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74  ipped deleting t
1ddf0 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69  est file \"" $fi 1de00 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. 1de10 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri 1de20 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a ng cleanup\n"].. 1de30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1de40 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1de50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1de60 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 NOTE: The file d 1de70 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 oes not exist, s 1de80 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 uccess!.. 1de90 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 1dea0 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d code 0.. }. 1deb0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 1dec0 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d$code..    }....
1ded0 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75  .    proc cleanu
1dee0 70 4d 65 6d 6f 72 79 20 7b 20 76 61 72 4e 61 6d  pMemory { varNam
1def0 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  e {quiet false}
1df00 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
1df10 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
1df20 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20  Command] && \..
1df30 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1df40 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 1df50 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 1df60 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1df70 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 # NOTE: Refer 1df80 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 to the specified 1df90 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 variable (e.g. 1dfa0 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e "connection") in 1dfb0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 1dfc0 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 context of 1dfd0 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 our caller. Th 1dfe0 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 e opaque object 1dff0 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 handle for an.. 1e000 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 41 # A 1e010 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63 74 69 6f DO.NET connectio 1e020 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 n previously ret 1e030 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 urned by [getDbC 1e040 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 onnection].. 1e050 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 1e060 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 ld be stored the 1e070 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a re... #.. 1e080 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 upvar 1 1e090 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74$varName connect
1e0a0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ion....        i
1e0b0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1e0c0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1e0d0 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  voke $connection 1e0e0 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 0d 0a ReleaseMemory.. 1e0f0 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 1e100 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1e110 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e120 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e130 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1e140 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1e150 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1e160 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 1e170 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 1e180 20 74 6f 20 72 65 6c 65 61 73 65 20 64 61 74 61 to release data 1e190 62 61 73 65 20 6d 65 6d 6f 72 79 2c 20 65 72 72 base memory, err 1e1a0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 1e1b0 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
1e1c0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
1e1d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1e1e0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
1e1f0 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
1e200 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20   [info commands
1e210 64 65 62 75 67 5d 5d 20 3e 20 30 7d 20 74 68 65  debug]] > 0} the
1e220 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
1e230 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
1e240 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b       uplevel 1 [
1e250 6c 69 73 74 20 64 65 62 75 67 20 70 75 72 67 65  list debug purge
1e260 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  ]..        } res
1e270 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ult]} then {..
1e280 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1e290 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1e2a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1e2b0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1e2c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1e2e0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1e2f0 6c 65 64 20 74 6f 20 70 75 72 67 65 20 63 61 6c  led to purge cal
1e300 6c 20 66 72 61 6d 65 2c 20 65 72 72 6f 72 3a 20  l frame, error:
1e310 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1e320 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 1e330 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 1e340 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1e350 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 1e360 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1e370 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 1e380 20 64 65 62 75 67 20 63 6c 65 61 6e 75 70 5d 0d debug cleanup]. 1e390 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c . } resul 1e3a0 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 t]} then {.. 1e3b0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1e3c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1e3d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1e3e0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1e3f0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1e400 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1e410 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 1e420 64 20 74 6f 20 63 6c 65 61 6e 75 70 20 69 6e 74 d to cleanup int 1e430 65 72 70 72 65 74 65 72 2c 20 65 72 72 6f 72 3a erpreter, error: 1e440 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1e450 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 \n\t$resu
1e460 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
1e470 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1e480 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1e490 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1e4a0 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73    uplevel 1 [lis
1e4b0 74 20 64 65 62 75 67 20 63 6f 6c 6c 65 63 74 5d  t debug collect]
1e4c0 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75  ..        } resu
1e4d0 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  lt]} then {..
1e4e0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1e4f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1e500 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1e510 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1e520 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1e540 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
1e550 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61  ed to collect ga
1e560 72 62 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20  rbage, error: "
1e570 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1e580 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20     \n\t $result 1e590 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1e5a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1e5b0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1e5c0 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 4d 65 proc setupMe 1e5d0 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 76 moryCounters { v 1e5e0 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 arName } {.. 1e5f0 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 1e600 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 1e610 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1e620 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
1e630 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20  e counter....
1e640 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72       set counter
1e650 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  (1) [object crea
1e660 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  te -alias \..
1e670 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1e680 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66  Diagnostics.Perf
1e690 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50  ormanceCounter P
1e6a0 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20  rocess \..
1e6b0 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53        "Working S
1e6c0 65 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  et" [file rootna
1e6d0 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a  me [file tail $: 1e6e0 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a :bin_file]]].... 1e6f0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e set coun 1e700 74 65 72 28 32 29 20 5b 6f 62 6a 65 63 74 20 63 ter(2) [object c 1e710 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a reate -alias \.. 1e720 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 1e730 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 em.Diagnostics.P 1e740 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 erformanceCounte 1e750 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 r Process \.. 1e760 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e "Workin 1e770 67 20 53 65 74 20 50 65 61 6b 22 20 5b 66 69 6c g Set Peak" [fil 1e780 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 e rootname [file 1e790 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c tail$::bin_fil
1e7a0 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e]]]....
1e7b0 73 65 74 20 63 6f 75 6e 74 65 72 28 33 29 20 5b  set counter(3) [
1e7c0 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
1e7d0 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
1e7e0 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e      System.Diagn
1e7f0 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e  ostics.Performan
1e800 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73  ceCounter Proces
1e810 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1e820 20 22 50 72 69 76 61 74 65 20 42 79 74 65 73 22   "Private Bytes"
1e830 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20   [file rootname
1e840 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69  [file tail $::bi 1e850 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 n_file]]].. 1e860 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 1e870 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d rn "".. }.... 1e880 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 . proc report 1e890 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b MemoryCounters { 1e8a0 20 63 68 61 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 channel varName 1e8b0 20 70 72 65 66 69 78 20 7d 20 7b 0d 0a 20 20 20 prefix } {.. 1e8c0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1e8d0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1e8e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e8f0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
1e900 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20  me counter....
1e910 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1e920 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1e930 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e940 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 "---- "$prefix
1e950 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d  " counter \"" \.
1e960 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62  .            [ob
1e970 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75  ject invoke $cou 1e980 6e 74 65 72 28 31 29 20 43 6f 75 6e 74 65 72 4e nter(1) CounterN 1e990 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 ame] "\" value i 1e9a0 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 s " \.. 1e9b0 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b [object invok 1e9c0 65 20 24 63 6f 75 6e 74 65 72 28 31 29 20 52 61 e$counter(1) Ra
1e9d0 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20  wValue] \n]....
1e9e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1e9f0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1ea00 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1ea10 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 "---- "$prefix
1ea20 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c   " counter \"" \
1ea30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f  ..            [o
1ea40 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f  bject invoke $co 1ea50 75 6e 74 65 72 28 32 29 20 43 6f 75 6e 74 65 72 unter(2) Counter 1ea60 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 Name] "\" value 1ea70 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 is " \.. 1ea80 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f [object invo 1ea90 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 29 20 52 ke$counter(2) R
1eaa0 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a  awValue] \n]....
1eab0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1eac0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1ead0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1eae0 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 "---- "$prefi
1eaf0 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20  x " counter \""
1eb00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
1eb10 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c 1eb20 6f 75 6e 74 65 72 28 33 29 20 43 6f 75 6e 74 65 ounter(3) Counte 1eb30 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 rName] "\" value 1eb40 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 is " \.. 1eb50 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 [object inv 1eb60 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 33 29 20 oke$counter(3)
1eb70 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20  RawValue] \n]..
1eb80 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1eb90 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65  ..    proc colle
1eba0 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 6e  ctGarbage { chan
1ebb0 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64  nel {millisecond
1ebc0 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 74  s 1000} {quiet t
1ebd0 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
1ebe0 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
1ebf0 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
1ec00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
1ec10 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1ec20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1ec30 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c  voke GC GetTotal
1ec40 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20  Memory false..
1ec50 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result]
1ec60 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1ec70 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1ec80 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1ec90 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1eca0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1ecb0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1ecc0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d         "---- mem
1ecd0 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68  ory in use by th
1ece0 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c  e CLR before col
1ecf0 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a  lection... " \..
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ed10 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c  $result " bytes\ 1ed20 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } 1ed30 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 1ed40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1ed50 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1ed60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1ed70 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1ed80 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1eda0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1edb0 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 ed to get CLR me 1edc0 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f mory usage, erro 1edd0 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. 1ede0 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 \n\t$re
1edf0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
1ee00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1ee10 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1ee20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
1ee30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ee40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ee50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ee60 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1ee70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1ee80 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c   NOTE: Repeatedl
1ee90 79 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c  y attempt to col
1eea0 6c 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74  lect garbage unt
1eeb0 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20  il the allotted
1eec0 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20  number..      #
1eed0 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65        of millise
1eee0 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65  conds has elapse
1eef0 64 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d  d.  Always attem
1ef00 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61  pt to collect ga
1ef10 72 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20  rbage..      #
1ef20 20 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e       at least on
1ef30 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ce...      #..
1ef40 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1ef50 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1ef60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1ef70 20 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c     set start [cl
1ef80 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20  ock seconds]..
1ef90 20 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b        set stop [
1efa0 65 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28  expr {$start + ( 1efb0 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20$milliseconds /
1efc0 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20  1000)}]....
1efd0 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20     do {..
1efe0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1eff0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
1f000 74 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20  to force a full
1f010 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69  garbage collecti
1f020 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20  on now.  Report
1f030 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23  any..          #
1f040 20 20 20 20 20 20 20 65 72 72 6f 72 20 74 68 61         error tha
1f050 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  t is encountered
1f060 20 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20   if we fail...
1f070 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1f080 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1f090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
1f0a0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
1f0b0 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74  GetTotalMemory t
1f0c0 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  rue..          }
1f0d0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
1f0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
1f0f0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1f100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f110 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1f120 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f140 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
1f150 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61  ailed full garba
1f160 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65  ge collection, e
1f170 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c               \n\
1f190 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 1f1a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1f1b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1f1c0 20 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 set now [c 1f1d0 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 lock seconds].. 1f1e0 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 7b } while { 1f1f0 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26$start <= $now & 1f200 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d &$now < $stop}. 1f210 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1f220 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 1f230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f260 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 ###########.... 1f270 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 1f280 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 1f290 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 d]} then {.. 1f2a0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1f2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1f2c0 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 ct invoke GC Get 1f2d0 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 TotalMemory fals 1f2e0 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 e.. } res 1f2f0 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 1f300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 1f310 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
1f320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1f330 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1f340 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1f350 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1f360 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 - memory in use 1f370 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72 by the CLR after 1f380 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 collection... " 1f390 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f3a0 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79$result " by
1f3b0 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
1f3c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
1f3d0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1f3e0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1f3f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f400 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1f410 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1f420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f430 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
1f440 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c  failed to get CL
1f450 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20  R memory usage,
1f460 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
1f470 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
1f480 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1f490 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f4a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1f4b0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1f4c0 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c c getSQLiteHandl 1f4d0 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 eCounts { channe 1f4e0 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 l {quiet false} 1f4f0 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 } {.. set r 1f500 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a esult [list].... 1f510 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 if {[haveS 1f520 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma 1f530 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 nd] && \.. 1f540 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 [haveSQLiteD 1f550 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 43 4f efineConstant CO 1f560 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 UNT_HANDLE]} the 1f570 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 1f580 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1f590 41 64 64 20 65 61 63 68 20 63 72 69 74 69 63 61 Add each critica 1f5a0 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 l handle count t 1f5b0 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 o the resulting 1f5c0 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 list... # 1f5d0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 1f5e0 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 5c 0d 0a h name [list \.. 1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e conn 1f600 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 ectionCount stat 1f610 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 ementCount backu 1f620 70 43 6f 75 6e 74 20 62 6c 6f 62 43 6f 75 6e 74 pCount blobCount 1f630 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ] {.. i 1f640 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1f650 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1f660 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 1f670 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 1f680 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 1f690 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 em.Data.SQLite.D 1f6a0 65 62 75 67 44 61 74 61 20 24 6e 61 6d 65 0d 0a ebugData$name..
1f6b0 20 20 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75            } valu
1f6c0 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  e] == 0} then {.
1f6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
1f6e0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1f6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f700 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1f710 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f730 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68  "---- critical h
1f740 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20  andle count \""
1f750 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24  $name "\" is "$
1f760 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20  value \n]..
1f770 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1f780 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
1f790 72 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20  result $value.. 1f7a0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1f7b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1f7c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1f7d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1f7e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1f7f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f810 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 1f820 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 failed to get c 1f830 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c 1f840 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 20 20 20 ount \"" \.. 1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e$n
1f860 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  ame "\", error:
1f870 22 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e  " \n\t $value \n 1f880 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 1f890 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1f8a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1f8b0 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 } elseif {!$quie
1f8c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1f8d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1f8e0 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c  NOTE: The actual
1f8f0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61   handle counts a
1f900 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  re not available
1f910 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73  ; therefore, jus
1f920 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
1f930 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70     return an emp
1f940 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20  ty list...
1f950 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
1f960 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 1f970 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c - critical handl 1f980 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c e counts unavail 1f990 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d able\n".. } 1f9a0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 1f9b0 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d$result..    }.
1f9c0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75  ....    proc shu
1f9d0 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68  tdownSQLite { ch
1f9e0 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c  annel {force fal
1f9f0 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65  se} {quiet false
1fa00 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
1fa10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61        # NOTE: Ma
1fa20 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c  ke sure that SQL
1fa30 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1fa40 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73   is completely s
1fa50 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a  hutdown.  This..
1fa60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73        #       is
1fa70 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74   used by tests t
1fa80 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69  hat change confi
1fa90 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
1faa0 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20   and/or those..
1fab0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61       #       tha
1fac0 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73  t need to make s
1fad0 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69  ure logging is i
1fae0 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e  nitialized (i.e.
1faf0 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20   just in case..
1fb00 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1fb10 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
1fb20 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c  rary was initial
1fb30 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63  ized in the proc
1fb40 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20  ess prior to..
1fb50 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
1fb60 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20  SQLiteLog class
1fb70 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65  being able to se
1fb80 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20  tup its logging
1fb90 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20  callback)...
1fba0 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c    #       Normal
1fbb0 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  ly, this should
1fbc0 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65  only be performe
1fbd0 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c  d if SQLite is l
1fbe0 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20  oaded and..
1fbf0 20 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66   #       ready f
1fc00 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65  or use by the te
1fc10 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
1fc20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66   #..      if {$f 1fc30 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 orce || [isSQLit 1fc40 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d eReady]} then {. 1fc50 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1fc60 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 4d 61 # BUGFIX: Ma 1fc70 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6e 79 ke sure that any 1fc80 20 22 6c 65 61 6b 65 64 22 20 74 72 61 6e 73 61 "leaked" transa 1fc90 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f ctions and/or co 1fca0 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 nnections.. 1fcb0 20 20 20 23 20 20 20 20 20 20 20 20 20 61 72 65 # are 1fcc0 20 63 6c 65 61 6e 65 64 20 75 70 20 62 65 66 6f cleaned up befo 1fcd0 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e re calling the n 1fce0 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 ative shutdown f 1fcf0 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 unction... 1fd00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 #.. for 1fd10 65 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e each transaction 1fd20 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 74 69 [info transacti 1fd30 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ons] {.. 1fd40 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 1fd50 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 tch \.. 1fd60 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 System#Data 1fd70 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 54 72 #SQLite#SQLiteTr 1fd80 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 72 61 ansaction#*$tra
1fd90 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20  nsaction]} then
1fda0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1fdb0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1fdc0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 74             sql t
1fdd0 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62  ransaction rollb
1fde0 61 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f 6e  ack $transaction 1fdf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 1fe00 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 1fe10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1fe20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1fe30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1fe40 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1fe50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1fe60 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1fe70 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1fe80 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b rolled back leak 1fe90 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c ed transaction \ 1fea0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1feb0 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73$trans
1fec0 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20  action \"\n]..
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1fee0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1fef0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1ff00 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1ff10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1ff20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1ff30 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1ff40 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1ff50 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1ff60 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1ff70 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b  to rollback leak
1ff80 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c  ed transaction \
1ff90 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1ffa0 20 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73            $trans 1ffb0 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f action "\", erro 1ffc0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
1ffd0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1ffe0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1fff0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
20000 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
20010 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
20020 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74  db [info connect
20030 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ions] {..
20040 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d     if {[string m
20050 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20  atch \..
20060 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74        System#Dat
20070 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 43  a#SQLite#SQLiteC
20080 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d  onnection#* $db] 20090 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 200a0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 200b0 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d {sql close$db}
200c0 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68   error] == 0} th
200d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
200e0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 200f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 20100 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
20110 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
20120 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
20130 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
20140 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 20 64   closed leaked d
20150 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20  atabase \"" $db 20160 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 20170 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 20180 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 20190 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 201a0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
201b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
201c0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 201d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 201f0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 20200 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 : failed to clos 20210 65 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 e leaked databas 20220 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 20230 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62$db
20240 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
20250 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 20270 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 20280 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 20290 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 202a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 #.. # B 202b0 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61 UGFIX: Before ca 202c0 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 lling the native 202d0 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 shutdown functi 202e0 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f on, make sure bo 202f0 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 th.. # 20300 20 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 41 of the PRA 20310 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 GMA related dire 20320 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 ctory names are 20330 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 freed... 20340 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 20350 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f ForSQLiteDirecto 20360 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 ries$channel tr
20370 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ue....        if
20380 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
20390 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
203a0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
203b0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
203c0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
203d0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
203e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71  NativeMethods sq
203f0 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a  lite3_shutdown..
20400 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74          } result
20410 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
20420 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$20430 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 20440 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 20450 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
20460 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
20470 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
20480 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74  all sqlite3_shut
20490 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20  down()... ok: "
204a0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 204b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 204c0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 204d0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
204e0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
204f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 20500 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 20510 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 20520 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 20530 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e sqlite3_shutdown 20540 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c ()... error: " \ 20550 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
20560 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
20570 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20580 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
20590 70 72 6f 63 20 67 65 74 53 65 74 74 69 6e 67 52  proc getSettingR
205a0 65 61 64 43 6f 75 6e 74 20 7b 20 6e 61 6d 65 20  eadCount { name
205b0 7b 76 69 61 46 69 6c 65 20 66 61 6c 73 65 7d 20  {viaFile false}
205c0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
205d0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 62  haveConstraint b
205e0 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
205f0 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b 63 61 74  n.Debug] && [cat
20600 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
20610 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
20620 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61  gs +NonPublic -a
20630 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
20640 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
20650 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61  SQLite.DebugData
20660 20 47 65 74 53 65 74 74 69 6e 67 52 65 61 64 43   GetSettingReadC
20670 6f 75 6e 74 73 20 24 76 69 61 46 69 6c 65 0d 0a  ounts $viaFile.. 20680 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 } settingR 20690 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d eadCounts] == 0} 206a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 206b0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 206c0 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 gth$name] > 0}
206d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
206e0 20 20 69 66 20 7b 5b 24 73 65 74 74 69 6e 67 52    if {[$settingR 206f0 65 61 64 43 6f 75 6e 74 73 20 54 72 79 47 65 74 eadCounts TryGet 20700 56 61 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c 75 Value$name valu
20710 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
20720 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 20730 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 20740 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 20750 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 20760 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24 -- setting \""$
20770 6e 61 6d 65 20 22 5c 22 20 77 61 73 20 72 65 61  name "\" was rea
20780 64 20 22 20 24 76 61 6c 75 65 20 22 20 74 69 6d  d " $value " tim 20790 65 73 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 es" \.. 207a0 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 76 [expr {$v
207b0 69 61 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20  iaFile ? " from
207c0 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
207d0 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c  n file" : ""}] \
207e0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n]....
207f0 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d    return $value. 20800 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 20810 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 20820 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 set na 20830 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e meCount [$settin
20840 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e  gReadCounts Coun
20850 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  t]..          se
20860 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a  t valueCount 0..
20870 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
20880 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
20890 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52  s pair $settingR 208a0 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 eadCounts {.. 208b0 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 incr va 208c0 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 lueCount [$pair
208d0 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  Value]....
208e0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 208f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 20900 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 20910 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 20920 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 setting \"" [$p
20930 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73  air Key] "\" was
20940 20 72 65 61 64 20 22 20 5b 24 70 61 69 72 20 56   read " [$pair V 20950 61 6c 75 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 alue] \.. 20960 20 20 20 20 20 20 20 20 20 22 20 74 69 6d 65 73 " times 20970 22 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c " [expr {$viaFil
20980 65 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 20 63  e ? " from the c
20990 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
209a0 65 22 20 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20  e" : \..
209b0 20 20 20 20 20 20 20 20 22 22 7d 5d 20 5c 6e 5d          ""}] \n]
209c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
209d0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
209e0 6e 20 5b 6c 69 73 74 20 24 6e 61 6d 65 43 6f 75  n [list $nameCou 209f0 6e 74 20 24 76 61 6c 75 65 43 6f 75 6e 74 5d 0d nt$valueCount].
20a00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
20a10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
20a20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
20a30 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  $name] > 0} then 20a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 20a50 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
20a60 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
20a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
20a80 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 24  -- setting \"" $20a90 6e 61 6d 65 20 22 5c 22 20 77 61 73 20 6e 6f 74 name "\" was not 20aa0 20 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76 read" [expr {$v
20ab0 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20  iaFile ? \..
20ac0 20 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74          " from t
20ad0 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
20ae0 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e   file" : ""}] \n
20af0 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
20b00 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
20b10 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 20b20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 20b30 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20b40 2d 20 6e 6f 20 73 65 74 74 69 6e 67 73 20 77 65 - no settings we 20b50 72 65 20 72 65 61 64 22 20 5b 65 78 70 72 20 7b re read" [expr { 20b60 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20$viaFile ? \..
20b70 20 20 20 20 20 20 20 20 20 20 22 20 66 72 6f 6d            " from
20b80 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
20b90 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20  on file" : ""}]
20ba0 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  \n]..      }....
20bb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 0d        return -1.
20bc0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
20bd0 72 6f 63 20 67 65 74 4f 74 68 65 72 43 6f 75 6e  roc getOtherCoun
20be0 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20  t { name } {..
20bf0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e      if {[haveCon
20c00 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e  straint buildCon
20c10 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67  figuration.Debug
20c20 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20  ] && [catch {..
20c30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
20c40 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
20c50 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d  Public -alias \.
20c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
20c70 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
20c80 44 65 62 75 67 44 61 74 61 20 47 65 74 4f 74 68  DebugData GetOth
20c90 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20  erCounts..
20ca0 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d 20 3d  } otherCounts] =
20cb0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
20cc0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
20cd0 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e   length $name] > 20ce0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 20cf0 20 20 20 20 20 20 69 66 20 7b 5b 24 6f 74 68 65 if {[$othe
20d00 72 43 6f 75 6e 74 73 20 54 72 79 47 65 74 56 61  rCounts TryGetVa
20d10 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d  lue $name value] 20d20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20d30 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
20d40 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
20d50 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
20d60 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
20d70 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c   other counter \
20d80 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 68 61 73  "" $name "\" has 20d90 20 76 61 6c 75 65 20 22 20 24 76 61 6c 75 65 20 value "$value
20da0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \n]....
20db0 20 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65     return $value 20dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 20dd0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 20de0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e . set n 20df0 61 6d 65 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 ameCount [$other
20e00 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20  Counts Count]..
20e10 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c           set val
20e20 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20  ueCount 0....
20e30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f         object fo
20e40 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69  reach -alias pai
20e50 72 20 24 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b  r $otherCounts { 20e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e .. in 20e70 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 cr valueCount [$
20e80 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20  pair Value]....
20e90 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
20ea0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 20eb0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20ed0 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e "---- other coun 20ee0 74 65 72 20 5c 22 22 20 5b 24 70 61 69 72 20 4b ter \"" [$pair K
20ef0 65 79 5d 20 22 5c 22 20 68 61 73 20 76 61 6c 75  ey] "\" has valu
20f00 65 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  e " \..
20f10 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 56 61         [$pair Va 20f20 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 lue] \n].. 20f30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 20f40 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 20f50 24 6e 61 6d 65 43 6f 75 6e 74 20 24 76 61 6c 75$nameCount $valu 20f60 65 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 eCount].. 20f70 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 20f80 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 20f90 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e length$name] >
20fa0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
20fb0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 20fc0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 20fd0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 20fe0 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 "---- other 20ff0 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 24 6e 61 counter \""$na
21000 6d 65 20 22 5c 22 20 68 61 73 20 6e 6f 20 76 61  me "\" has no va
21010 6c 75 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d  lue\n"]..      }
21020 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
21030 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 21040 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 74 68 65 hannel "---- the 21050 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 re are no other 21060 63 6f 75 6e 74 65 72 73 5c 6e 22 0d 0a 20 20 20 counters\n".. 21070 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 21080 74 75 72 6e 20 2d 31 0d 0a 20 20 20 20 7d 0d 0a turn -1.. }.. 21090 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f ... proc repo 210a0 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 rtSQLiteResource 210b0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 210c0 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 channel {quiet 210d0 66 61 6c 73 65 7d 20 7b 72 65 73 65 74 20 74 72 false} {reset tr 210e0 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 ue} {collect tru 210f0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 21100 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 21110 66 20 70 6f 73 73 69 62 6c 65 2c 20 61 6c 77 61 f possible, alwa 21120 79 73 20 72 65 73 65 74 20 74 68 65 20 63 61 63 ys reset the cac 21130 68 65 64 20 61 73 73 65 6d 62 6c 79 20 64 69 72 hed assembly dir 21140 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 ectory.. # 21150 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 61 and the ca 21160 63 68 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 ched XML configu 21170 72 61 74 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 ration file name 21180 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 21190 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 211a0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 211b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 211c0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 211d0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 211e0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 211f0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 21200 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 21210 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 21220 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 21230 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21240 20 20 52 65 73 65 74 43 61 63 68 65 64 41 73 73 ResetCachedAss 21250 65 6d 62 6c 79 44 69 72 65 63 74 6f 72 79 0d 0a emblyDirectory.. 21260 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d } error] 21270 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 21280 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
21290 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
212a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
212b0 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 72  $channel "---- r 212c0 65 73 65 74 20 63 61 63 68 65 64 20 61 73 73 65 eset cached asse 212d0 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79 5c 6e mbly directory\n 212e0 22 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ".. }.. 212f0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 21300 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 21310 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
21320 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
21330 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 21340 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 21350 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 21360 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 21370 20 74 6f 20 72 65 73 65 74 20 63 61 63 68 65 64 to reset cached 21380 20 61 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 assembly direct 21390 6f 72 79 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 ory, " \.. 213a0 20 20 20 20 20 20 20 20 20 20 22 65 72 72 6f 72 "error 213b0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
213c0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
213d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
213e0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
213f0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
21400 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
21410 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
21420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21430 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
21440 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
21450 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20  ethods \..
21460 20 20 20 20 20 20 20 20 52 65 73 65 74 43 61 63          ResetCac
21470 68 65 64 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65  hedXmlConfigFile
21480 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 20  Name..        }
21490 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65  error] == 0} the
214a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
214b0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 214c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 214d0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
214e0 2d 2d 2d 2d 20 72 65 73 65 74 20 63 61 63 68 65  ---- reset cache
214f0 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74  d XML configurat
21500 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 5c 6e 22  ion file name\n"
21510 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
21520 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
21530 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
21540 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 21550 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 21560 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
21570 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
21580 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
21590 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
215a0 74 6f 20 72 65 73 65 74 20 63 61 63 68 65 64 20  to reset cached
215b0 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  XML configuratio
215c0 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  n " \..
215d0 20 20 20 20 20 20 20 22 66 69 6c 65 20 6e 61 6d         "file nam
215e0 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  e, error: " \n\t
215f0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 21600 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 21610 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 21620 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 21630 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61 NOTE: If availa 21640 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f 6e 20 28 ble, report on ( 21650 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 72 65 73 and possibly res 21660 65 74 29 20 74 68 65 20 72 75 6e 74 69 6d 65 0d et) the runtime. 21670 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 21680 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 74 61 onfiguration sta 21690 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 20 20 20 tistics... 216a0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 #.. if {[ha 216b0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 216c0 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 mmand] && \.. 216d0 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons 216e0 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 traint buildConf 216f0 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d iguration.Debug] 21700 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 21710 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 21720 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 21730 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 21740 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 NonPublic -alias 21750 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21760 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 21770 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 Lite.DebugData G 21780 65 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 etSettingReadCou 21790 6e 74 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 nts false.. 217a0 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64 } settingRead 217b0 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 Counts] == 0} th 217c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 217d0 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 set nameCount [$
217e0 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74  settingReadCount
217f0 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20  s Count]..
21800 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75      set valueCou
21810 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt 0....
21820 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
21830 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 73 65   -alias pair $se 21840 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 ttingReadCounts 21850 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 21860 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b ncr valueCount [ 21870 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a$pair Value]....
21880 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
21890 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 218a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 218b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
218c0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
218d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
218e0 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22  ---- setting \""
218f0 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22   [$pair Key] "\" 21900 20 77 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 was read " \.. 21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21920 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 [$pair Value] "
21930 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   times\n"]..
21940 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
21950 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21960 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20      if {$reset} 21970 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21980 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 21990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 219a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 219b0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 219c0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 219d0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 219e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 em.Data.SQLite.D 219f0 65 62 75 67 44 61 74 61 20 43 6c 65 61 72 53 65 ebugData ClearSe 21a00 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 ttingReadCounts 21a10 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 false.. 21a20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 21a30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 21a40 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
21a50 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
21a60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
21a70 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 21a80 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 21a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 21aa0 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 ---- reset setti 21ab0 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f ng statistics fo 21ac0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 r the previous " 21ad0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21ae0 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75$nameCou
21af0 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22  nt " names and "
21b00 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76   $valueCount " v 21b10 61 6c 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a alues read\n"].. 21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 21b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 21b40 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 21b50 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
21b60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21b70 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21b80 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 21b90 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 21ba0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 21bb0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 21bc0 64 20 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 d to reset setti 21bd0 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f ng statistics fo 21be0 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 r " \.. 21bf0 20 20 20 20 20 20 20 20 20 20 20 22 74 68 65 20 "the 21c00 70 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 previous "$name
21c10 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e  Count " names an
21c20 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20  d " $valueCount 21c30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21c40 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 20 " values 21c50 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c read, error: " \ 21c60 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21c90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
21ca0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21cb0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
21cc0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
21cd0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
21ce0 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73  NonPublic -alias
21cf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21d00 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
21d10 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 47  Lite.DebugData G
21d20 65 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75  etSettingReadCou
21d30 6e 74 73 20 74 72 75 65 0d 0a 20 20 20 20 20 20  nts true..
21d40 20 20 7d 20 73 65 74 74 69 6e 67 46 69 6c 65 52    } settingFileR
21d50 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d  eadCounts] == 0}
21d60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21d70 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74     set nameCount
21d80 20 5b 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65   [$settingFileRe 21d90 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d adCounts Count]. 21da0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 . set v 21db0 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 alueCount 0.... 21dc0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 21dd0 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 foreach -alias p 21de0 61 69 72 20 24 73 65 74 74 69 6e 67 46 69 6c 65 air$settingFile
21df0 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20  ReadCounts {..
21e00 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76            incr v
21e10 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72  alueCount [$pair 21e20 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 Value].... 21e30 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
21e40 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
21e50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21e60 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 21e70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 21e80 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 21e90 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 setting \"" [$pa
21ea0 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20  ir Key] "\" was
21eb0 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20  read " \..
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61              [$pa 21ed0 69 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 ir Value] " time 21ee0 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 s from the confi 21ef0 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 guration file\n" 21f00 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 21f10 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 21f20 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
21f30 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  reset} then {..
21f40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
21f50 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
21f60 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
21f70 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
21f80 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d  Public -alias \.
21f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21fa0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
21fb0 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 20  QLite.DebugData
21fc0 43 6c 65 61 72 53 65 74 74 69 6e 67 52 65 61 64  ClearSettingRead
21fd0 43 6f 75 6e 74 73 20 74 72 75 65 0d 0a 20 20 20  Counts true..
21fe0 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72           } error
21ff0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22010 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 22020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22030 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
22040 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
22050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
22060 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74       "---- reset
22070 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74   setting statist
22080 69 63 73 20 66 6f 72 20 74 68 65 20 70 72 65 76  ics for the prev
22090 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20  ious " \..
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6e                $n 220b0 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 ameCount " names 220c0 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 and "$valueCou
220d0 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65 61 64  nt " values read
220e0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
220f0 20 20 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20            "from
22100 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
22110 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20  n file\n"]..
22120 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
22130 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
22140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
22150 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 22160 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22170 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
22180 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22190 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
221a0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
221b0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
221c0 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73   reset setting s
221d0 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 22 20  tatistics for "
221e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
221f0 20 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76         "the prev
22200 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e  ious " $nameCoun 22210 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 t " names and " 22220 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20$valueCount \..
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22240 20 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 64     " values read
22250 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67   from the config
22260 75 72 61 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72  uration file, er
22270 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20  ror: " \n\t \..
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22290 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20     $error \n].. 222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 222b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 222c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 222d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 222e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 222f0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 22300 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 22310 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 onPublic -alias 22320 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22330 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 22340 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 ite.DebugData Ge 22350 74 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 tOtherCounts.. 22360 20 20 20 20 20 20 7d 20 6f 74 68 65 72 43 6f 75 } otherCou 22370 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 nts] == 0} then 22380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 22390 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 6f 74 68 nameCount [$oth
223a0 65 72 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d  erCounts Count].
223b0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76  .          set v
223c0 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20  alueCount 0....
223d0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
223e0 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70  foreach -alias p
223f0 61 69 72 20 24 6f 74 68 65 72 43 6f 75 6e 74 73  air $otherCounts 22400 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22410 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 incr valueCount 22420 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d [$pair Value]...
22430 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
22440 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 22450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22460 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
22470 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22490 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e  "---- other coun
224a0 74 65 72 20 5c 22 22 20 5b 24 70 61 69 72 20 4b  ter \"" [$pair K 224b0 65 79 5d 20 22 5c 22 20 68 61 73 20 76 61 6c 75 ey] "\" has valu 224c0 65 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 e " \.. 224d0 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 [$pair
224e0 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20  Value] \n]..
224f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
22500 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
22510 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20      if {$reset} 22520 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 22530 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 22540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22550 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 22560 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 22570 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 22580 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 22590 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 em.Data.SQLite.D 225a0 65 62 75 67 44 61 74 61 20 43 6c 65 61 72 4f 74 ebugData ClearOt 225b0 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 herCounts.. 225c0 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 } error] 225d0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 225e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 225f0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
22600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
22610 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 22620 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22640 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 6f "---- reset o 22650 74 68 65 72 20 63 6f 75 6e 74 65 72 73 20 66 6f ther counters fo 22660 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 r the previous " 22670 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22680 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75$nameCou
22690 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22  nt " names and "
226a0 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76   $valueCount " v 226b0 61 6c 75 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 alues\n"].. 226c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 226d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 226e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 226f0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
22700 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
22710 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 22720 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22730 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22740 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 22750 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 22760 72 65 73 65 74 20 6f 74 68 65 72 20 63 6f 75 6e reset other coun 22770 74 65 72 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 ters for " \.. 22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22790 20 20 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 "the previous 227a0 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e "$nameCount " n
227b0 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75  ames and " $valu 227c0 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 eCount \.. 227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " 227e0 76 61 6c 75 65 73 2c 20 65 72 72 6f 72 3a 20 22 values, error: " 227f0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
22800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22810 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22820 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
22830 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
22840 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
22850 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
22860 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20  Command] && \..
22870 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51           [haveSQ
22880 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
22890 6e 74 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  nt INTEROP_VIRTU
228a0 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d 0a  AL_TABLE] && \..
228b0 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53            [haveS
228c0 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
228d0 61 6e 74 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  ant TRACK_MEMORY
228e0 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d  _BYTES]} then {.
228f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 22900 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 22910 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
22920 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
22930 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
22940 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f  se by SQLiteMemo
22950 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20  ry... "..
22960 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
22970 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
22980 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
22990 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
229a0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
229b0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
229c0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
229d0 4d 65 6d 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f  Memory bytesAllo
229e0 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d  cated..        }
229f0 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
22a00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
22a10 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 22a20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22a30 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
22a40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 22a50 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d mory " bytes\n"] 22a60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 22a70 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 22a80 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d . set m 22a90 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 22aa0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 22ab0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
22ad0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 22ae0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
22af0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
22b00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
22b10 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 22b20 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 22b30 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
22b40 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75  nel "---- maximu
22b50 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  m memory in use
22b60 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e  by SQLiteMemory.
22b70 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d  .. "..        }.
22b80 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
22b90 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
22ba0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
22bb0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
22bc0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
22bd0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
22be0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d  SQLite.SQLiteMem
22bf0 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79 74 65 73  ory maximumBytes
22c00 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20  Allocated..
22c10 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20     } memory] ==
22c20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
22c30 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 22c40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22c50 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
22c60 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22c70 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73   $memory " bytes 22c80 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 22c90 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 22ca0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s 22cb0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow 22cc0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n.... i 22cd0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
22ce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22cf0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 22d00 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
22d10 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
22d20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
22d30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
22d40 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 22d50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 22d60 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
22d70 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72  -- current memor
22d80 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69  y in use by SQLi
22d90 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d  te... "..      }
22da0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68  ....      if {[h
22db0 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
22dc0 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
22dd0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
22de0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
22df0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
22e00 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
22e10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22e20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
22e30 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
22e40 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33  eMethods sqlite3
22e50 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20  _memory_used..
22e60 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20        } memory]
22e70 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
22e80 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 22e90 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 22ea0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
22eb0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
22ec0 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79  rgs $memory " by 22ed0 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 22ee0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 22ef0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 22f00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 22f10 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 NOTE: Maybe the 22f20 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 22f30 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 rary is unavaila 22f40 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 ble?.. 22f50 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 #.. set 22f60 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d memory unknown. 22f70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 22f80 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
22f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
22fa0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 22fb0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
22fc0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
22fd0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
22fe0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
22ff0 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
23000 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a   unavailable....
23010 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 23020 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 23030 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
23040 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
23050 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 23060 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 23070 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 }.... set r 23080 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 esult$memory; #
23090 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65   NOTE: Return me
230a0 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f  mory in-use to o
230b0 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20  ur caller.....
230c0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 230d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 230e0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
230f0 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65  "---- maximum me
23100 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
23110 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20  QLite... "..
23120 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
23130 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
23140 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
23150 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
23160 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
23170 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
23180 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
23190 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
231a0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
231b0 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
231c0 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
231e0 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
231f0 77 61 74 65 72 20 30 0d 0a 20 20 20 20 20 20 20  water 0..
23200 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d   } memory] == 0}
23210 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23220 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 23230 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 23240 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
23250 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $23260 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e memory " bytes\n 23270 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 23280 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 23290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 232a0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 232b0 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 232c0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 232d0 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 232e0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 232f0 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 23300 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 23310 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
23320 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
23330 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $23340 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 23350 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
23360 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
23370 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
23380 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
23390 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76   set memory unav
233a0 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20  ailable....
233b0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 233c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 233d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
233e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 233f0 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 23400 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 23410 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 if {$colle
23420 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ct} then {..
23430 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61      collectGarba
23440 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  ge $channel.. 23450 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 23460 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
23470 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
23480 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 23490 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 234a0 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 n use by the CLR 234b0 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a ... ".. }.. 234c0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 234d0 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 234e0 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 234f0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 23500 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 23510 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 bject invoke GC 23520 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 GetTotalMemory f 23530 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 alse.. } 23540 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 23550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 23560 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 if {[string is i 23570 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 nteger -strict$
23580 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  memory]} then {.
23590 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
235a0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 235b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 235c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
235d0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 235e0 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 235f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 23600 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 23610 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {.. s 23620 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 et memory invali 23630 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d.... 23640 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
23650 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
23660 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 23670 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
23680 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
23690 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
236a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
236b0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
236c0 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75      set memory u
236d0 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20  nknown....
236e0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 236f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 23700 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
23710 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
23720 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 23730 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 23740 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 23750 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set 23760 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 memory unavaila 23770 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 ble.... i 23780 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
23790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
237a0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 237b0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
237c0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
237d0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
237e0 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 237f0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 23800 70 72 6f 63 20 72 65 73 65 74 53 51 4c 69 74 65 proc resetSQLite 23810 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 Directories { ch 23820 61 6e 6e 65 6c 20 6e 61 74 69 76 65 20 7d 20 7b annel native } { 23830 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 23840 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 23850 20 74 6f 20 75 73 65 20 74 68 65 20 6e 61 74 69 to use the nati 23860 76 65 20 41 50 49 20 28 76 69 61 20 74 68 65 20 ve API (via the 23870 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 23880 29 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )?.. #.. 23890 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 if {$native}
238a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
238b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
238c0 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65  E: Now make sure
238d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
238e0 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  d temporary dire
238f0 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20  ctories are..
23900 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73       #       res
23910 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74  et their default
23920 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73   values, which s
23930 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f  hould be null fo
23940 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20  r both...
23950 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74   #       Since t
23960 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
23970 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
23980 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c  unction is avail
23990 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 23  able,..        #
239a0 20 20 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a         use it...
239b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
239c0 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65     for {set inde
239d0 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33  x 1} {$index < 3 239e0 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b } {incr index} { 239f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 23a00 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 23a10 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 23a20 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 23a30 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 23a40 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 23a50 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 23a60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 23a70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23a80 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 sqlite3_win32 23a90 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 24 _set_directory$
23aa0 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20  index null..
23ab0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result]
23ac0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
23ad0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
23ae0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 23af0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 23b00 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 23b10 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 ll sqlite3_win32 23b20 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 _set_directory(" 23b30 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20$index \..
23b40 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75             ", nu
23b50 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65  ll)... ok: " $re 23b60 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 23b70 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 23b80 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 23b90 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
23ba0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
23bb0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61          "---- ca
23bc0 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  ll sqlite3_win32
23bd0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22  _set_directory("
23be0 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20   $index \.. 23bf0 20 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 ", nu 23c00 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 ll)... error: " 23c10 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
23c20 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
23c30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
23c40 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
23c50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
23c60 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75  OTE: Now make su
23c70 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database
23c80 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69  and temporary di
23c90 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20  rectories are..
23ca0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
23cb0 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61 75  eset their defau
23cc0 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68  lt values, which
23cd0 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20   should be null
23ce0 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20  for both...
23cf0 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65     #       Since
23d00 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e   the sqlite3_win
23d10 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
23d20 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e   function does n
23d30 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ot..        #
23d40 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 65      appear to be
23d50 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20   available, use
23d60 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 50  the associated P
23d70 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a  RAGMA commands..
23d80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
23d90 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20  instead...
23da0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
23db0 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b  each directory [
23dc0 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f  list data_store_
23dd0 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73  directory temp_s
23de0 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20  tore_directory]
23df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
23e00 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73   sql [appendArgs
23e10 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 65   "PRAGMA " $dire 23e20 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 ctory " = \"\";" 23e30 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 23e40 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 f {[catch {execu 23e50 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 teSql$sql} resu
23e60 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
23e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
23e80 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 23e90 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 23ea0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 23eb0 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 - execute PRAGMA 23ec0 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e "$directory ".
23ed0 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20  .. ok: \"" \..
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72                $r 23ef0 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 esult \"\n].. 23f00 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 23f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 23f20 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
23f30 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
23f40 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
23f50 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20   execute PRAGMA
23f60 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e  " $directory ".. 23f70 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 . error: " \.. 23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e \n 23f90 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
23fa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
23fb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
23fc0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
23fd0 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69  roc checkForSQLi
23fe0 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20  teDirectories {
23ff0 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66  channel {reset f
24000 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
24010 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
24020 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 73  : Check if the s
24030 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
24040 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
24050 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
24060 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
24070 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 24080 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d \.. "- 24090 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 240a0 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 function sqlite 240b0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 240c0 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 ctory... ".... 240d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 240e0 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 OTE: This call t 240f0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 o the sqlite3_wi 24100 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 24110 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 y function uses 24120 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 24130 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 invalid value 24140 20 30 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 0 for the first 24150 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 argument. This 24160 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 code is designe 24170 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 24180 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63 61 6c to check if cal 24190 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f ling the functio 241a0 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 n will raise an 241b0 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d exception (i.e.. 241c0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 241d0 68 65 20 61 63 74 75 61 6c 20 72 65 73 75 6c 74 he actual result 241e0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e of the function 241f0 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 does not matter 24200 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a as long as no.. 24210 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 24220 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 rectory is chang 24230 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ed)... #.. 24240 20 20 20 20 20 69 66 20 7b 5b 69 73 57 69 6e 64 if {[isWind 24250 6f 77 73 5d 20 26 26 20 5b 63 61 74 63 68 20 7b ows] && [catch { 24260 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object 24270 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 24280 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 24290 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 242a0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 242b0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 242c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s 242d0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 242e0 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c _directory 0 nul 242f0 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 l.. }] == 0 24300 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 24310 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 24320 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 OTE: Calling the 24330 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 24340 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e et_directory fun 24350 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a ction does not.. 24360 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 24370 63 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 cause an excepti 24380 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 on; therefore, i 24390 74 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 t must be availa 243a0 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 ble (i.e... 243b0 20 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 # even 243c0 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 though it should 243d0 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 return a failur 243e0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e e return code in 243f0 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 this.. # 24400 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 case)... 24410 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 24420 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 24430 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 24440 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 t_directory.... 24450 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
24460 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20  annel yes\n....
24470 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24480 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f    # NOTE: Does o
24490 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74  ur caller want t
244a0 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65  o reset the dire
244b0 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20  ctories?..
244c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
244d0 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d  {$reset} then {. 244e0 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74 . reset 244f0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 24500 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d s$channel true.
24510 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
24520 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
24530 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 24540 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 el no\n.... 24550 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 24560 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 NOTE: Does our c 24570 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 aller want to re 24580 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 set the director 24590 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f ies? This can o 245a0 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 nly.. # 245b0 20 20 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65 be performe 245c0 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c d if SQLite is l 245d0 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64 79 20 oaded and ready 245e0 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 for use by the t 245f0 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 est.. # 24600 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 suite... 24610 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24620 69 66 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69 if {$reset && [i
24630 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74  sSQLiteReady]} t
24640 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
24650 20 72 65 73 65 74 53 51 4c 69 74 65 44 69 72 65   resetSQLiteDire
24660 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c  ctories $channel 24670 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 false.. 24680 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 24690 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 246a0 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 OTE: Finally, sh 246b0 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 ow the current v 246c0 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 alue of the data 246d0 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 base and tempora 246e0 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ry.. # 246f0 20 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 directories. 24700 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 This can only be 24710 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 performed if SQ 24720 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a Lite is loaded.. 24730 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 24740 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 d ready for use 24750 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 24760 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 24770 20 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 if {[isSQLite 24780 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a Ready]} then {.. 24790 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 247a0 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 directory [list 247b0 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 data_store_direc 247c0 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f tory temp_store_ 247d0 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 directory] {.. 247e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
247f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
24800 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e  gs "---- checkin
24810 67 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22  g " $directory " 24820 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 ... "].... 24830 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 set sql [app 24840 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 endArgs "PRAGMA 24850 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d "$directory \;]
24860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
24870 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74   {[catch {execut
24880 65 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 72  eSql $sql scalar 24890 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 248a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 248b0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
248c0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
248d0 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 20  ok: \"" $result 248e0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 248f0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 24900 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
24910 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
24920 73 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  s "error: " \n\t
24930 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 24940 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 24950 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 24960 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 24970 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 c loadSQLiteTest 24980 53 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e Settings { chann 24990 65 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7b el {suffix ""} { 249a0 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 249b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 249c0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f # NOTE: Skip lo 249d0 61 64 69 6e 67 20 74 68 65 20 73 65 74 74 69 6e ading the settin 249e0 67 73 20 69 66 20 74 68 65 69 72 20 75 73 61 67 gs if their usag 249f0 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 e has been disab 24a00 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 led... #.. 24a10 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 24a20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 exists ::no(sqli 24a30 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 29 5d teTestSettings)] 24a40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 24a50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 24a60 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d OTE: Load custom 24a70 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 per-user and/or 24a80 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 per-host test s 24a90 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 24aa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 24ab0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 24ac0 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d s ::tcl_platform 24ad0 28 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d (user)]} then {. 24ae0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 75 . set u 24af0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 24b00 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ 24b10 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f getCommonDirecto 24b20 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ry] \.. 24b30 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 [appendArgs 24b40 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 settings$suffi
24b50 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  x . $::tcl_platf 24b60 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c 65 orm(user) .eagle 24b70 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ]].... 24b80 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 if {[file exists 24b90 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69$userSettingsFi
24ba0 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
24bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
24bc0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 24bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24be0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
24bf0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24c10 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65  "---- loading pe
24c20 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74  r-user test sett
24c30 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d  ings file \"" \.
24c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
24c50 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73     $userSettings 24c60 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e FileName \"...\n 24c70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 24c80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 24c90 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 24ca0 20 20 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 uple 24cb0 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 vel 1 [list sour 24cc0 63 65 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 ce$userSettings
24cd0 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  FileName]..
24ce0 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d         } error]}
24cf0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
24d00 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 24d10 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 24d20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 24d30 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
24d40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
24d60 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
24d70 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d  led to load per-
24d80 75 73 65 72 20 73 65 74 74 69 6e 67 73 20 66 69  user settings fi
24d90 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75                $u 24db0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 24dc0 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 ame "\", error: 24dd0 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
24de0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
24df0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
24e00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
24e10 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
24e20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 24e30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 24e40 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
24e50 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
24e60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24e70 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70        "---- skip
24e80 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d  ped loading per-
24e90 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e  user test settin
24ea0 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24ec0 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69   $userSettingsFi 24ed0 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 leName "\", it d 24ee0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 oes not exist\n" 24ef0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 24f00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 24f10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 24f20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 ############ 24f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24f60 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 ###########.... 24f70 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 24f80 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c exists ::tcl_pl 24f90 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 atform(host)]} t 24fa0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 24fb0 20 73 65 74 20 68 6f 73 74 53 65 74 74 69 6e 67 set hostSetting 24fc0 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 sFileName [file 24fd0 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 join [getCommonD 24fe0 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 irectory] \.. 24ff0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 [appe 25000 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 ndArgs settings 25010 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c$suffix . $::tcl 25020 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 _platform(host) 25030 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 .eagle]].... 25040 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 25050 65 78 69 73 74 73 20 24 68 6f 73 74 53 65 74 74 exists$hostSett
25060 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  ingsFileName]} t
25070 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
25080 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 25090 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 250a0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
250b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
250c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
250d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64        "---- load
250e0 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73  ing per-host tes
250f0 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20  t settings file
25100 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
25110 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65           $hostSe 25120 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c ttingsFileName \ 25130 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 "...\n].. 25140 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 25150 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 25160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25170 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 25180 74 20 73 6f 75 72 63 65 20 24 68 6f 73 74 53 65 t source$hostSe
25190 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d  ttingsFileName].
251a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
251b0 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
251d0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 251e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 251f0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
25200 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
25210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25220 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
25230 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61  G: failed to loa
25240 64 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69  d per-host setti
25250 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25270 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67      $hostSetting 25280 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 sFileName "\", e 25290 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
252a0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
252b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
252c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
252d0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
252e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 252f0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 25300 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 25310 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
25320 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
25330 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
25340 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e  - skipped loadin
25350 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20  g per-host test
25360 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
25370 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
25380 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74         $hostSett 25390 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 ingsFileName "\" 253a0 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex 253b0 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. 253c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 253d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 253e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 253f0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 70 79 ... proc copy 25400 53 61 6d 70 6c 65 44 61 74 61 62 61 73 65 46 69 SampleDatabaseFi 25410 6c 65 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 les {} {.. 25420 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 uplevel 1 {.. 25430 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 25440 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 28 6f 72 # NOTE: Copy (or 25450 20 72 65 2d 63 6f 70 79 29 20 74 68 65 20 72 65 re-copy) the re 25460 66 65 72 65 6e 63 65 20 64 61 74 61 62 61 73 65 ference database 25470 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 file used for t 25480 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 his.. # 25490 20 20 20 20 20 75 6e 69 74 20 74 65 73 74 20 74 unit test t 254a0 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 o the build dire 254b0 63 74 6f 72 79 20 69 6e 20 63 61 73 65 20 69 74 ctory in case it 254c0 20 68 61 73 20 62 65 65 6e 20 63 68 61 6e 67 65 has been change 254d0 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 254e0 20 20 20 62 79 20 61 20 70 72 65 76 69 6f 75 73 by a previous 254f0 20 74 65 73 74 20 72 75 6e 2e 0d 0a 20 20 20 20 test run... 25500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 #.. f 25510 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 ile copy -force 25520 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69$northwindEfDbFi
25530 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
25540 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
25550 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61  uildDirectory fa
25560 6c 73 65 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20  lse] [file tail
25570 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69  $northwindEfDbFi 25580 6c 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 le]].. }.. 25590 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 255a0 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 c runSQLiteTestP 255b0 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 rologue {} {.. 255c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 255d0 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e OTE: Skip runnin 255e0 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f g our custom pro 255f0 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 25600 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 25610 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 25620 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 25630 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 25640 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 o exists ::no(pr 25650 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ologue.eagle)]} 25660 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 25670 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 25680 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 E: Load the "bef 25690 6f 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 ore-constraints" 256a0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 custom per-user 256b0 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 and/or per-host 256c0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 256d0 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 test settings 256e0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 256f0 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c . uplevel 25700 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 1 [list loadSQL 25710 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 iteTestSettings 25720 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
25730 2e 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20  .before]....
25740 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
25750 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
25760 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d  the [object] com
25770 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c  mand is availabl
25780 65 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64 20 73  e; if not, add s
25790 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ome..        #
257a0 20 20 20 20 20 73 68 69 6d 73 20 74 6f 20 6d 61       shims to ma
257b0 6b 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74  ke the test suit
257c0 65 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d  e run smoother..
257d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
257e0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
257f0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20  teObjectCommand
25800 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 25810 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 25820 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 # NOTE: De 25830 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 termine the name 25840 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 s of the native 25850 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 platform and arc 25860 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 25870 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 25880 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get 25890 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 BuildPlatform tr 258a0 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ue].. set 258b0 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 architecture [a 258c0 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c rchitectureForPl 258d0 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d atform$platform
258e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
258f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
25900 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72  Show the platfor
25910 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75  m and architectu
25920 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  re used to help
25930 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20  locate the..
25940 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69      #       nati
25950 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d  ve build files..
25960 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
25970 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 25980 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 25990 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 259a0 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 "---- platf 259b0 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 orm for locating 259c0 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 native build fi 259d0 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 les is \"" \.. 259e0 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
259f0 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  orm \"\n]....
25a00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 25a10 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 25a20 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 25a30 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 "---- arch 25a40 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 itecture for loc 25a50 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 ating native bui 25a60 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 ld files is \"" 25a70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
25a80 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c  architecture \"\
25a90 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
25aa0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
25ab0 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66   Build a list of
25ac0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
25ad0 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
25ae0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
25af0 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
25b00 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
25b10 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
25b20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
25b30 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d  Lite.dll.config]
25b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
25b50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
25b60 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
25b70 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64  uxiliary Managed
25b80 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73   Debugging Assis
25b90 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20  tants (MDA)..
25ba0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
25bb0 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
25bc0 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
25bd0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
25be0 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66       set mdaConf
25bf0 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
25c00 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
25c10 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78   EagleShell32.ex
25c20 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73  e.mda.config Ins
25c30 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63  taller.exe.mda.c
25c40 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20  onfig \..
25c50 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64       test.exe.md
25c60 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e  a.config testlin
25c70 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  q.exe.mda.config
25c80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
25c90 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e  testef6.exe.mda.
25ca0 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20  config]....
25cb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
25cc0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
25cd0 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c  list of external
25ce0 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
25cf0 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d  andle.  Some of.
25d00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
25d10 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79   these files may
25d20 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f   be native and/o
25d30 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  r managed assemb
25d40 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20  lies that are..
25d50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
25d60 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f  equired to perfo
25d70 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 73  rm various tests
25d80 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
25d90 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72 6e        set extern
25da0 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  alFileNames [lis
25db0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
25dc0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69   [file join Enti
25dd0 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20  tyFramework lib
25de0 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
25df0 74 20 46 78 20 22 22 5d 20 5c 0d 0a 20 20 20 20  t Fx ""] \..
25e00 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
25e10 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34  map [list netFx4
25e20 35 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78  51 netFx45 netFx
25e30 34 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46  452 netFx45 netF
25e40 78 34 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  x46 \..
25e50 20 20 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78     netFx45 netFx
25e60 34 36 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46  461 netFx45 netF
25e70 78 34 36 32 20 6e 65 74 46 78 34 35 20 6e 65 74  x462 netFx45 net
25e80 46 78 34 37 20 6e 65 74 46 78 34 35 20 5c 0d 0a  Fx47 netFx45 \..
25e90 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 74 46              netF
25ea0 78 34 37 31 20 6e 65 74 46 78 34 35 20 6e 65 74  x471 netFx45 net
25eb0 46 78 34 37 32 20 6e 65 74 46 78 34 35 20 6e 65  Fx472 netFx45 ne
25ec0 74 53 74 61 6e 64 61 72 64 32 30 20 6e 65 74 46  tStandard20 netF
25ed0 78 34 35 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  x45] \..
25ee0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 4e 65 74      [getBuildNet
25ef0 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d  Fx]]] EntityFram
25f00 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  ework.dll]]....
25f10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25f20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
25f30 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69  the list of nati
25f40 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  ve assembly file
25f50 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
25f60 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
25f70 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65        set native
25f80 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d  FileNames [list]
25f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c  ....        eval
25fa0 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46   lappend nativeF
25fb0 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74  ileNames [getNat
25fc0 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61  iveLibraryFileNa
25fd0 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20  mesOnly]..
25fe0 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e    eval lappend n
25ff0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b  ativeFileNames [
26000 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62  getInteropAssemb
26010 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d  lyFileNamesOnly]
26020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
26030 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
26040 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66  uild the list of
26050 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
26060 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20  mbly files that
26070 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
26080 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
26090 65 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65  et mixedFileName
260a0 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20  s [list]....
260b0 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
260c0 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
260d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
260e0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69 78       lappend mix
260f0 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74  edFileNames Syst
26100 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
26110 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ll..        }...
26120 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
26130 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
26140 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61  d the list of ma
26150 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66  naged assembly f
26160 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
26170 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
26180 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e  .        set man
26190 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c  agedFileNames [l
261a0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
261b0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
261c0 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53  QLite.Linq.dll S
261d0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
261e0 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  e.EF6.dll]....
261f0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73 52        if {![hasR
26200 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
26210 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ive]} then {..
26220 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
26230 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
26240 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
26250 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  ite.dll..
26260 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
26270 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
26280 20 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f 75   Show the variou
26290 73 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65 20  s lists of file
262a0 6e 61 6d 65 73 20 74 68 61 74 20 61 72 65 20 68  names that are h
262b0 61 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d 0a  andled by this..
262c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
262d0 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20  procedure...
262e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
262f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 26300 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 26310 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26320 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 "---- list of \" 26330 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 configuration\" 26340 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 file names is: " 26350 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26360 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73$configFileNames
26370 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
26380 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 26390 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 263a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 263b0 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c "---- list of \ 263c0 22 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 "MDA configurati 263d0 6f 6e 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 on\" file names 263e0 69 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 is: " \.. 263f0 20 20 20 20 20 24 6d 64 61 43 6f 6e 66 69 67 46$mdaConfigF
26400 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a  ileNames \n]....
26410 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 26420 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 26430 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 26440 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 26450 69 73 74 20 6f 66 20 5c 22 65 78 74 65 72 6e 61 ist of \"externa 26460 6c 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 l\" file names i 26470 73 3a 20 22 20 24 65 78 74 65 72 6e 61 6c 46 69 s: "$externalFi
26480 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20  leNames \n]....
26490 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 264a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 264b0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 264c0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 "---- li 264d0 73 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c 22 st of \"native\" 264e0 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 file names is: 264f0 22 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d "$nativeFileNam
26500 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  es \n]....
26510 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 26520 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 26530 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 26540 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 "---- list of 26550 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 20 \"mixed\" file 26560 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 6d 69 78 names is: "$mix
26570 65 64 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d  edFileNames \n].
26580 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
26590 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 265a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 265b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 265c0 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d 61 6e 61 - list of \"mana 265d0 67 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 ged\" file names 265e0 20 69 73 3a 20 22 20 24 6d 61 6e 61 67 65 64 46 is: "$managedF
265f0 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a  ileNames \n]....
26600 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
26610 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76     # NOTE: Remov
26620 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74  e any test const
26630 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 65  raints that refe
26640 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20  r to the native
26650 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20  and/or..
26660 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20  #       managed
26670 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74  assembly files t
26680 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e  hat we handle un
26690 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66  less forbidden f
266a0 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20  rom..        #
266b0 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a       doing so...
266c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
266d0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
266e0 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65  ists ::no(sqlite
266f0 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  RemoveConstraint
26700 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
26710 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
26720 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46  ileName $configF 26730 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 26740 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f removeCo 26750 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 26760 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 Args file_$file
26770 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  Name]..
26780 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
26790 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
267a0 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e   $mdaConfigFileN 267b0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 267c0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 267d0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 267e0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 file_$fileName
267f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
26800 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
26810 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78  ach fileName $ex 26820 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 ternalFileNames 26830 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 26840 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 emoveConstraint 26850 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 26860 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 _ [file tail$fi
26870 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20  leName]]..
26880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
26890 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
268a0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 268b0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 268c0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 268d0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 268e0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 file_$fileName
268f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
26900 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
26910 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69  ach fileName $mi 26920 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a xedFileNames {.. 26930 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f remo 26940 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 26950 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 pendArgs file_$
26960 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
26970 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
26980 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
26990 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c  Name $managedFil 269a0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 269b0 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 269c0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 269d0 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
269e0 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
269f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
26a00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
26a10 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61    # NOTE: Skip a
26a20 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ll System.Data.S
26a30 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69  QLite related fi
26a40 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c  le handling (del
26a50 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  eting,..
26a60 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c  #       copying,
26a70 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66   and loading) if
26a80 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
26a90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
26aa0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
26ab0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69  ts ::no(sqliteFi
26ac0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
26ad0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
26ae0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
26af0 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c  ip trying to del
26b00 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66  ete any files if
26b10 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
26b20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
26b30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
26b40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
26b50 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  teSqliteFiles)]}
26b60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
26b70 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
26b80 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
26b90 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69  teSqliteConfigFi
26ba0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
26bc0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63  each fileName $c 26bd0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 26be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26bf0 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 tryDeleteBinar 26c00 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d yFile$fileName.
26c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
26c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26c30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
26c40 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
26c50 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
26c60 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29  teExternalFiles)
26c70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
26c80 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
26c90 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f   fileName $mdaCo 26ca0 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 26cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26cc0 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 tryDeleteBuildF 26cd0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 ile$fileName fa
26ce0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..
26cf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
26d00 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
26d10 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c  leName $external 26d20 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 26d40 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 DeleteBinaryFile 26d50 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
26d60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
26d70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
26d80 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
26d90 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
26da0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74  (deleteSqliteNat
26db0 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iveFiles)]} then
26dc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
26dd0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
26de0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
26df0 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74  qliteImplicitNat
26e00 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iveFiles)]} then
26e10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
26e20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
26e30 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 26e40 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 26e50 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 26e60 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 leteAssembly$fi
26e70 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
26e80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
26e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
26eb0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
26ec0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e  no(deleteSqliteN
26ed0 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29  onImplicitFiles)
26ee0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
26ef0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
26f00 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
26f10 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c  o(deleteSqlitePl
26f20 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26  atformFiles)] &&
26f30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26f40 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
26f50 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform 26f60 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26f80 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 26f90 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d e$nativeFileNam
26fa0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
26fb0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
26fc0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  eteAssembly $fil 26fd0 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d eName$platform.
26fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26ff0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
27000 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
27010 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
27020 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
27030 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72  o(deleteSqliteAr
27040 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29  chitectureFiles)
27050 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
27060 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
27070 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68  ing length $arch 27080 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 itecture] > 0} t 27090 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 270a0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 270b0 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 fileName$nativ
270c0 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  eFileNames {..
270d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
270e0 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d    tryDeleteAssem
270f0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61  bly $fileName$a
27100 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20  rchitecture..
27110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
27120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
27130 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
27140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
27150 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
27160 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
27170 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
27180 53 71 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73  SqliteMixedFiles
27190 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
271a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
271b0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
271c0 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76  E: If the "nativ
271d0 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  e" runtime optio
271e0 6e 20 69 73 20 73 65 74 2c 20 64 65 6c 65 74 65  n is set, delete
271f0 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 20   implicit..
27200 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
27210 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
27220 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 65  mbly files as we
27230 6c 6c 2e 20 20 54 68 69 73 20 72 75 6e 74 69 6d  ll.  This runtim
27240 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20  e option..
27250 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
27260 63 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64  check is handled
27270 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74   when building t
27280 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64  he list of mixed
27290 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20  -mode..
272a0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
272b0 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73  embly file names
272c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
272d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
272e0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
272f0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
27300 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78  qliteImplicitMix
27310 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  edFiles)]} then
27320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
27330 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
27340 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61  ame $mixedFileNa 27350 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 27360 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 27370 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 teAssembly$file
27380 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
27390 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
273a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
273b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
273c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
273d0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e  (deleteSqliteNon
273e0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
273f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
27400 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
27410 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
27420 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74  deleteSqlitePlat
27430 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c  formFiles)] && \
27440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
27450 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
27460 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 27470 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 27490 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 274a0 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20$mixedFileNames
274b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
274c0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
274d0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 274e0 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 me$platform..
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27500 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
27510 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
27520 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
27530 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
27540 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69  eleteSqliteArchi
27550 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
27560 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
27570 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
27580 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 27590 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 275a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 275b0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 275c0 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c leName$mixedFil
275d0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
275f0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
27600 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69  $fileName$archi
27610 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  tecture..
27620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
27650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27670 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
27680 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
27690 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d  teManagedFiles)]
276a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
276b0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
276c0 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage 276d0 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 dFileNames {.. 276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 276f0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 yDeleteAssembly 27700 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
27710 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
27720 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
27730 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
27740 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
27750 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66   # NOTE: Check f
27760 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65  or the "autoSele
27770 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  ct" runtime opti
27780 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c  on.  If present,
27790 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
277a0 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61      attempt to a
277b0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c  utomatically sel
277c0 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76  ect the first av
277d0 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ailable..
277e0 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64     #       build
277f0 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20   (or "release")
27800 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79  of SQLite and Sy
27810 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
27820 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
27830 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68      for use with
27840 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
27850 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
27860 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61           if {[ha
27870 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61  sRuntimeOption a
27880 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e  utoSelect]} then
27890 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
278a0 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51  if {![checkForSQ
278b0 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65  LiteBuilds $::te 278c0 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d st_channel true] 278d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 278e0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 278f0 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 SQLiteReleases$
27900 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74  ::test_channel t
27910 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rue..
27920 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
27930 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
27940 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
27950 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f  : Skip trying to
27960 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c   verify the buil
27970 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 69  d directory if i
27980 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20  nstructed;..
27990 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74        #       ot
279a0 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75  herwise, make su
279b0 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65  re it actually e
279c0 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68  xists or halt th
279d0 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20  e entire..
279e0 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74      #       test
279f0 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 69  ing process if i
27a00 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
27a10 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
27a20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
27a30 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
27a40 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 65  (verifyBuildDire
27a50 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d  ctory)]} then {.
27a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
27a70 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
27a80 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e  TE: At this poin
27a90 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  t, the build dir
27aa0 65 63 74 6f 72 69 65 73 20 4d 55 53 54 20 65 78  ectories MUST ex
27ab0 69 73 74 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ist for..
27ac0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
27ad0 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
27ae0 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20   to continue...
27af0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
27b00 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69            set di
27b10 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c  rectory [getBuil
27b20 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c 73 65  dDirectory false
27b30 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
27b40 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
27b50 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c  ts $directory] | 27b60 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 | \.. 27b70 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 ![file isdi 27b80 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f rectory$directo
27b90 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
27ba0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
27bc0 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74  TE: Just prior t
27bd0 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69  o actually halti
27be0 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70  ng the testing p
27bf0 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20  rocess,..
27c00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
27c10 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74  dd an error to t
27c20 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65  he test log file
27c30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
27c40 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
27c50 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 27c60 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 27c70 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 27c80 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 27c90 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 ould not verify 27ca0 6e 61 74 69 76 65 20 62 75 69 6c 64 20 64 69 72 native build dir 27cb0 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d 0a 20 20 ectory \"" \.. 27cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27cd0 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2c 20$directory "\",
27ce0 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74  all testing halt
27cf0 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ed\n"]....
27d00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
27d10 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
27d20 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69 70   Raising a scrip
27d30 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 69  t error from thi
27d40 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68  s point should h
27d50 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  alt..
27d60 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74     #       the t
27d70 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d  esting process..
27d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
27d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
27da0 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67  error [appendArg
27db0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
27dc0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
27dd0 74 20 76 65 72 69 66 79 20 6e 61 74 69 76 65 20  t verify native
27de0 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20  build directory
27df0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
27e00 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63 74           $direct 27e10 6f 72 79 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 ory "\", all tes 27e20 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20 ting halted"].. 27e30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 27e40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 27e50 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 directory [getBu 27e60 69 6c 64 44 69 72 65 63 74 6f 72 79 20 74 72 75 ildDirectory tru 27e70 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e].... 27e80 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 27e90 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 sts$directory]
27ea0 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
27eb0 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64        ![file isd
27ec0 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74  irectory $direct 27ed0 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. 27ee0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 27ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 27f00 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 OTE: Just prior 27f10 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 to actually halt 27f20 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 ing the testing 27f30 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 process,.. 27f40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 27f50 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 add an error to 27f60 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c the test log fil 27f70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 27f80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 27f90 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
27fa0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
27fb0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
27fc0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
27fd0 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79  could not verify
27fe0 20 6d 61 6e 61 67 65 64 20 62 75 69 6c 64 20 64   managed build d
27ff0 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d 0a  irectory \"" \..
28000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28010 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22    $directory "\" 28020 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 , all testing ha 28030 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 lted\n"].... 28040 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 28050 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 28060 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 E: Raising a scr 28070 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 ipt error from t 28080 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 his point should 28090 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 halt.. 280a0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 280b0 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 testing process 280c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 280d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 280e0 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 error [appendA 280f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 28100 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 "could 28110 6e 6f 74 20 76 65 72 69 66 79 20 6d 61 6e 61 67 not verify manag 28120 65 64 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f ed build directo 28130 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 ry \"" \.. 28140 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72$dir
28150 65 63 74 6f 72 79 20 22 5c 22 2c 20 61 6c 6c 20  ectory "\", all
28160 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d  testing halted"]
28170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28180 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
28190 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
281a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
281b0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f  kip trying to co
281c0 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  py any files if
281d0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
281e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
281f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
28200 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
28210 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68  qliteFiles)]} th
28220 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
28230 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
28240 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
28250 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d  iteConfigFiles)]
28260 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
28270 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 28280 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 28290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 282a0 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 "---- copying 282b0 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e \"configuration 282c0 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a \" files...\n".. 282d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 282e0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 282f0 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65$configFileName
28300 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
28310 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c       tryCopyBuil
28320 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20  dFile $fileName 28330 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 false.. 28340 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 28350 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 28360 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 28370 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 28380 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 SqliteExternalFi 28390 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 283a0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 283c0 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d NOTE: Copy the M 283d0 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 anaged Debugging 283e0 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 Assistants (MDA 283f0 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d ) configuration. 28400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 28410 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20 file for 28420 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 the Eagle shell 28430 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 to the build out 28440 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a put directory,.. 28450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 28460 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e while usin 28470 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61 g each of the na 28480 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f mes of the vario 28490 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a us legacy test.. 284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 284b0 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 executable 284c0 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 s. This will he 284d0 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 lp to make sure 284e0 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 that all the.. 284f0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 28500 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 legacy tests 28510 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c run with exactl 28520 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f y the same set o 28530 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 f Managed.. 28540 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 28550 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 Debugging Assis 28560 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 tants configured 28570 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 28580 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 28590 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
285a0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
285c0 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 4d 44 41  -- copying \"MDA
285d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22   configuration\"
285e0 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a   files...\n"....
285f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
28600 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $28610 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d mdaConfigFileNam 28620 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 28630 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e tryCopyBin 28640 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 aryFile EagleShe 28650 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 ll.exe.mda.confi 28660 67 20 74 72 75 65 20 22 22 20 24 66 69 6c 65 4e g true ""$fileN
28670 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..
28680 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
28690 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
286a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
286b0 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c  opy the external
286c0 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e   binaries, if an
286d0 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63 74  y, to the direct
286e0 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ory that..
286f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
28700 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67  contains the Eag
28710 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20  le shell.  This
28720 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65  is typically use
28730 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20  d to make..
28740 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
28750 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73   sure assemblies
28760 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
28770 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65  he ones being te
28780 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20  sted are..
28790 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
287a0 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67  available during
287b0 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f   the testing pro
287c0 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...
287d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
287e0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 287f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d est_channel "--- 28800 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65 78 74 65 - copying \"exte 28810 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c rnal\" files...\ 28820 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n".... 28830 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 28840 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 Name$externalFi
28850 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
28860 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
28870 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 24  pyExternalFile $28880 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 28890 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 288a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 288b0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 288c0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 288d0 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 46 opySqliteNativeF 288e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 288f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 28900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 28910 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 NOTE: If the te 28920 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6c st platform is l 28930 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c ikely the defaul 28940 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 t for this.. 28950 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 28960 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f 20 machine, also 28970 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65 20 try to copy the 28980 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f 20 native files to 28990 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 the.. 289a0 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 # binar 289b0 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 y location... 289c0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 289d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 289e0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 289f0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 no(copySqliteImp 28a00 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c 65 73 licitNativeFiles 28a10 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 28a20 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 44 65 [isDe 28a30 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f faultBuildPlatfo 28a40 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 rm]} then {.. 28a50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 28a60 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
28a70 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
28a80 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
28a90 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 74  copying implicit
28aa0 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65   \"native\" file
28ab0 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20  s...\n"....
28ac0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
28ad0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 28ae0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28b00 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 28b10 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 y$fileName fals
28b20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
28b30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
28b40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
28b50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
28b60 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
28b70 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69  pySqliteNonImpli
28b80 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
28b90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
28ba0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
28bb0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
28bc0 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c  qlitePlatformFil
28bd0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
28be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
28bf0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p 28c00 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 latform] > 0} th 28c10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 28c20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
28c30 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
28c40 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28c60 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67     "---- copying
28c70 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65   \"native\" file
28c80 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20 5c  s for platform \
28c90 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61              $pla 28cb0 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a tform \"...\n].. 28cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 28cd0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 28ce0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
28cf0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
28d00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
28d10 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 28d20 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70 6c leName false$pl
28d30 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
28d40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
28d50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
28d70 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
28d80 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
28d90 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
28da0 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
28db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28dc0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
28dd0 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e  $architecture] > 28de0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 28df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 28e00 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
28e10 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
28e20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
28e30 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
28e40 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76 65 5c  opying \"native\
28e50 22 20 66 69 6c 65 73 20 66 6f 72 20 61 72 63 68  " files for arch
28e60 69 74 65 63 74 75 72 65 20 5c 22 22 20 5c 0d 0a  itecture \"" \..
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28e80 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 28e90 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a ure \"...\n].... 28ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28eb0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 28ec0 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
28ed0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
28ee0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
28ef0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  pyAssembly $file 28f00 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 63 68 Name false$arch
28f10 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20  itecture..
28f20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
28f50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
28f70 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
28f80 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
28f90 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74  eMixedFiles)]} t
28fa0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
28fb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28fc0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
28fd0 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
28fe0 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  ntime option is
28ff0 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 6c 69 63  set, copy implic
29000 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..
29010 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d    #       mixed-
29020 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69  mode assembly fi
29030 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20 54 68  les as well.  Th
29040 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  e runtime option
29050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29060 23 20 20 20 20 20 20 20 63 68 65 63 6b 20 69 73  #       check is
29070 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20 62 75   handled when bu
29080 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73 74 20  ilding the list
29090 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a 20  of mixed-mode..
290a0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
290b0 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66 69       assembly fi
290c0 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20 20  le names...
290d0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
290e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
290f0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
29100 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69  (copySqliteImpli
29110 63 69 74 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d  citMixedFiles)]}
29120 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
29130 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $29140 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 29150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29160 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 "---- copy 29170 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c 22 6d ing implicit \"m 29180 69 78 65 64 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c ixed\" files...\ 29190 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n".... 291a0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 291b0 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c leName$mixedFil
291c0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
291d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
291e0 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 291f0 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 eName false.. 29200 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 29220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 29230 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 29240 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 29250 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c teNonImplicitFil 29260 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 29270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 29280 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 29290 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 ::no(copySqliteP 292a0 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 latformFiles)] & 292b0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 292c0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 292d0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
292e0 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  m] > 0} then {..
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29300 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 29310 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 29320 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 29330 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 29340 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d 69 78 -- copying \"mix 29350 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 70 ed\" files for p 29360 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20 latform \"" \.. 29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29380 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c$platform \
29390 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  "...\n]....
293a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
293b0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 293c0 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d ixedFileNames {. 293d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 293e0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 tryCopyAsse 293f0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 mbly$fileName f
29400 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  alse $platform.. 29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29420 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 29430 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 29440 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 29450 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 29460 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69 (copySqliteArchi 29470 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 29480 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 29490 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 294a0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
294b0 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
294c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
294d0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 294e0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 294f0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29510 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c "---- copying \ 29520 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 20 66 "mixed\" files f 29530 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 20 or architecture 29540 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 29550 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72$ar
29560 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e 2e 2e  chitecture \"...
29570 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \n]....
29580 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
29590 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64   fileName $mixed 295a0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 295c0 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 tryCopyAssembly 295d0 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65$fileName false
295e0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a   $architecture.. 295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29600 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 29610 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 29620 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 29630 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 29640 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 29650 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 29660 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 ySqliteManagedFi 29670 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 29680 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 29690 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
296a0 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67  el "---- copying
296b0 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 6c   \"managed\" fil
296c0 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20  es...\n"....
296d0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
296e0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61  h fileName $mana 296f0 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a gedFileNames {.. 29700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29710 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 29720 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d 0a$fileName true..
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29740 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29750 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
29760 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
29770 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
29780 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61  ip trying to loa
29790 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69  d any files if i
297a0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
297b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
297c0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
297d0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
297e0 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  liteFiles)]} the
297f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
29800 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
29810 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69  ts ::no(loadSqli
29820 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29  teImplicitFiles)
29830 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
29840 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
29850 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
29860 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d  Data.SQLite.dll.
29870 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
29890 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
298a0 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4c  ::no(loadSqliteL
298b0 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  inqFiles)]} then
298c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
298d0 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c    tryLoadAssembl
298e0 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
298f0 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20  Lite.Linq.dll..
29900 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29910 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
29920 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
29930 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 36  no(loadSqliteEf6
29940 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
29950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
29960 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
29970 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
29980 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20  e.EF6.dll..
29990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
299a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
299b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
299c0 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c  oadSqliteNonImpl
299d0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
299e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
299f0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
29a00 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
29a10 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65  litePlatformFile
29a20 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
29a30 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
29a40 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 29a50 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 29a60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 29a70 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 29a80 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 29a90 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 QLite.dll$platf
29aa0 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
29ab0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
29ac0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
29ad0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61   exists ::no(loa
29ae0 64 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74  dSqliteArchitect
29af0 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ureFiles)] && \.
29b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
29b10 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
29b20 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d  h $architecture] 29b30 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 29b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 29b50 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 yLoadAssembly Sy 29b60 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 29b70 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 .dll$architectu
29b80 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..
29b90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
29ba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
29bb0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
29bc0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
29bd0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69  leNameOnly $nati 29be0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 veFileNames {.. 29bf0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 29c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 29c10 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
29c20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
29c30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
29c40 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
29c50 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6e 61 74  rsion of \"" nat
29c60 69 76 65 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  ive/ $fileNameOn 29c70 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ly \.. 29c80 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 5c 22 22 "\"... \"" 29c90 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 29ca0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 29cb0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 29cc0 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e$fileNameOn
29cd0 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  ly]] \"\n]..
29ce0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
29cf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f   }....        fo
29d00 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e  reach fileNameOn
29d10 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  ly $mixedFileNam 29d20 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 29d30 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 29d40 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
29d50 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
29d60 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
29d70 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
29d80 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
29d90 5c 22 22 20 6d 69 78 65 64 2f 20 24 66 69 6c 65  \"" mixed/ $file 29da0 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 NameOnly \.. 29db0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e "\". 29dc0 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 .. \"" [file ver 29dd0 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 sion [getBinaryF 29de0 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. 29df0 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65$file
29e00 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d  NameOnly]] \"\n]
29e10 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
29e20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
29e30 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
29e40 4e 61 6d 65 4f 6e 6c 79 20 24 6d 61 6e 61 67 65  NameOnly $manage 29e50 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 dFileNames {.. 29e60 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 29e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 29e80 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
29e90 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
29ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29eb0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
29ec0 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d 61 6e 61  sion of \"" mana
29ed0 67 65 64 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  ged/ $fileNameOn 29ee0 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ly \.. 29ef0 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 5c 22 22 "\"... \"" 29f00 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 29f10 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 29f20 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 29f30 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e$fileNameOn
29f40 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  ly]] \"\n]..
29f50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
29f60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
29f70 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
29f80 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d   $platform] > 0} 29f90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 29fa0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 29fb0 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 ameOnly$nativeF
29fc0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
29fd0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
29fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
29ff0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2a000 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 2a010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a020 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 2a030 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 version of \"" 2a040 6e 61 74 69 76 65 2f 70 6c 61 74 66 6f 72 6d 2f native/platform/ 2a050 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a060 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20$platform
2a070 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  / $fileNameOnly 2a080 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 "\"... \"" [file 2a090 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a0a0 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 5b 67 version [g 2a0b0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 2a0c0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c$fileNameOnly \
2a0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2a0e0 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20      $platform]] 2a0f0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 2a100 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2a110 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 }.... f 2a120 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f oreach fileNameO 2a130 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 nly$mixedFileNa
2a140 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
2a150 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
2a160 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
2a170 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2a180 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a1a0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 2a1b0 69 6f 6e 20 6f 66 20 5c 22 22 20 6d 69 78 65 64 ion of \"" mixed 2a1c0 2f 70 6c 61 74 66 6f 72 6d 2f 20 5c 0d 0a 20 20 /platform/ \.. 2a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a1e0 24 70 6c 61 74 66 6f 72 6d 20 2f 20 24 66 69 6c$platform / $fil 2a1f0 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e eNameOnly "\"... 2a200 20 5c 22 22 20 5b 66 69 6c 65 20 5c 0d 0a 20 20 \"" [file \.. 2a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a220 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 version [getBina 2a230 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
2a240 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20  NameOnly \..
2a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p 2a260 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d latform]] \"\n]. 2a270 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2a280 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2a290 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2a2a0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 2a2b0 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 ngth$architectu
2a2c0 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  re] > 0} then {.
2a2d0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
2a2e0 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
2a2f0 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 2a300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2a310 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 2a320 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2a330 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
2a340 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
2a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2a360 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
2a370 20 6f 66 20 5c 22 22 20 6e 61 74 69 76 65 2f 61   of \"" native/a
2a380 72 63 68 69 74 65 63 74 75 72 65 2f 20 5c 0d 0a  rchitecture/ \..
2a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a3a0 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20    $architecture 2a3b0 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 /$fileNameOnly
2a3c0 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65  "\"... \"" [file
2a3d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2a3e0 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 5b 67        version [g
2a3f0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
2a400 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c   $fileNameOnly \ 2a410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a420 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72$architectur
2a430 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  e]] \"\n]..
2a440 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2a450 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2a460 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
2a470 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69  ameOnly $mixedFi 2a480 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 2a490 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 2a4b0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
2a4c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
2a4d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2a4e0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
2a4f0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d  version of \"" m
2a500 69 78 65 64 2f 61 72 63 68 69 74 65 63 74 75 72  ixed/architectur
2a510 65 2f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e/ \..
2a520 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65          $archite 2a530 63 74 75 72 65 20 2f 20 24 66 69 6c 65 4e 61 6d cture /$fileNam
2a540 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22  eOnly "\"... \""
2a550 20 5b 66 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20   [file \..
2a560 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
2a570 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
2a580 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 2a590 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 Only \.. 2a5a0 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69$archi
2a5b0 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d  tecture]] \"\n].
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2a5d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2a5e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2a5f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2a600 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69  OTE: Grab the li
2a610 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73  st of managed as
2a620 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 68 65  semblies for the
2a630 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
2a640 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2a650 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f 6e 20    and report on
2a660 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
2a670 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f  SQLite related o
2a680 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  nes...        #.
2a690 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
2a6a0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
2a6b0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
2a6c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
2a6d0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
2a6e0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
2a6f0 65 20 55 74 69 6c 69 74 79 20 47 65 74 41 73 73  e Utility GetAss
2a700 65 6d 62 6c 69 65 73 0d 0a 20 20 20 20 20 20 20  emblies..
2a710 20 20 20 7d 20 61 73 73 65 6d 62 6c 69 65 73 5d     } assemblies]
2a720 20 3d 3d 20 30 20 7c 7c 20 5b 63 61 74 63 68 20   == 0 || [catch
2a730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
2a740 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70  bject invoke App
2a750 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f  Domain.CurrentDo
2a760 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69  main GetAssembli
2a770 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  es..          }
2a780 61 73 73 65 6d 62 6c 69 65 73 5d 20 3d 3d 20 30  assemblies] == 0
2a790 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2a7a0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
2a7b0 65 61 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61  each assembly $a 2a7c0 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 ssemblies {.. 2a7d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 2a7e0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 string match \{S 2a7f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2a800 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 e*$assembly]} t
2a810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2a820 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2a830 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 2a840 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a860 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 "---- found load 2a870 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24 ed assembly: "$
2a880 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20  assembly \n]..
2a890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
2a8a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2a8b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
2a8c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2a8d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
2a8e0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2a8f0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 2a900 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 2a910 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 define constants 2a920 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61 for \"System.Da 2a930 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 ta.SQLite\"... " 2a940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 2a950 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 2a960 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 2a970 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 2a980 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 2a990 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 2a9a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 2a9b0 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 Lite3 DefineCons 2a9c0 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 tants.. 2a9d0 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e } defineConstan 2a9e0 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ts] == 0} then { 2a9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 2aa00 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
2aa10 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
2aa20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f  [formatList [lso
2aa30 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  rt \..
2aa40 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e        $defineCon 2aa50 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 stants] <none>] 2aa60 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 2aa70 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 2aa80 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2aa90 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f  st_channel unkno
2aaa0 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  wn\n..
2aab0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2aac0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
2aad0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
2aae0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2aaf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2ab00 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 "---- source v 2ab10 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 ersion of \"Syst 2ab20 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 2ab30 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 ll\"... ".... 2ab40 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 2ab50 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 2ab60 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 2ab70 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 2ab80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2ab90 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 2aba0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e SQLite.SQLiteCon 2abb0 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 nection Provider 2abc0 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 Version.. 2abd0 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d } version] == 2abe0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2abf0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 2ac00 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 ing length$vers
2ac10 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
2ac20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2ac30 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c   set version nul
2ac40 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
2ac50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
2ac60 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2ac70 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 2ac80 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20$version \n]..
2ac90 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
2aca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
2acb0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2acc0 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 nel unknown\n.. 2acd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2ace0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2acf0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 2ad00 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
2ad10 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
2ad20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2ad30 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74   source checkout
2ad40 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74   of \"System.Dat
2ad50 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e  a.SQLite.dll\"..
2ad60 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  . "....
2ad70 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
2ad80 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
2ad90 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
2ada0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
2adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
2adc0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2add0 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  .SQLiteConnectio
2ade0 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65  n ProviderSource
2adf0 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  Id..          }
2ae00 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
2ae10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2ae20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
2ae30 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64  length $sourceId 2ae40 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 2ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 2ae60 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d t sourceId null. 2ae70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2ae80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 2ae90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2aea0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73  l [appendArgs $s 2aeb0 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 ourceId \n].. 2aec0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 2aed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 2aee0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
2aef0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
2af00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
2af10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2af20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
2af30 45 3a 20 52 65 73 65 74 20 63 61 63 68 65 64 20  E: Reset cached
2af40 22 62 72 65 61 6b 20 69 6e 74 6f 20 64 65 62 75  "break into debu
2af50 67 67 65 72 22 20 73 65 74 74 69 6e 67 20 73 6f  gger" setting so
2af60 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 0d   that it can be.
2af70 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2af80 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65   used during the
2af90 20 74 65 73 74 20 66 69 6c 65 2c 20 69 66 20 6e   test file, if n
2afa0 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  eeded...
2afb0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
2afc0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
2afd0 6f 28 72 65 73 65 74 42 72 65 61 6b 49 6e 74 6f  o(resetBreakInto
2afe0 44 65 62 75 67 67 65 72 29 5d 20 26 26 20 5c 0d  Debugger)] && \.
2aff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 68 61  .            [ha
2b000 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
2b010 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
2b020 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
2b030 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
2b040 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
2b050 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
2b060 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
2b070 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
2b080 74 61 2e 53 51 4c 69 74 65 2e 48 65 6c 70 65 72  ta.SQLite.Helper
2b090 4d 65 74 68 6f 64 73 20 52 65 73 65 74 42 72 65  Methods ResetBre
2b0a0 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 0d 0a  akIntoDebugger..
2b0b0 20 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75            } resu
2b0c0 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
2b0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
2b0e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2b0f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 2b100 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2b110 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 52 65 "---- call Re 2b120 73 65 74 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 setBreakIntoDebu 2b130 67 67 65 72 28 29 2e 2e 2e 20 6f 6b 5c 6e 22 5d gger()... ok\n"] 2b140 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 2b150 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 2b160 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2b170 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2b180 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2b190 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
2b1a0 6c 20 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f  l ResetBreakInto
2b1b0 44 65 62 75 67 67 65 72 28 29 2e 2e 2e 20 65 72  Debugger()... er
2b1c0 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
2b1d0 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24            \n\t $2b1e0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 2b1f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2b200 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 2b210 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2b220 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 69 6c Check the avail 2b230 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 6e 64 able builds (and 2b240 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f 66 20 "releases") of 2b250 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20 20 SQLite and.. 2b260 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 # Syst 2b270 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d em.Data.SQLite.. 2b280 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2b290 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 2b2a0 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 teBuilds$::test
2b2b0 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20  _channel..
2b2c0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
2b2d0 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74  Releases $::test 2b2e0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 2b2f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2b300 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e NOTE: Now, we n 2b310 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 eed to know if t 2b320 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 2b330 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c 61 ibrary is availa 2b340 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ble.. # 2b350 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61 75 (i.e. becau 2b360 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f se the managed-o 2b370 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e nly System.Data. 2b380 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 20 SQLite assembly 2b390 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 can.. # 2b3a0 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 load withou 2b3b0 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 t it; however, i 2b3c0 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 t cannot do anyt 2b3d0 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74 68 hing useful with 2b3e0 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 out.. # 2b3f0 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77 65 it). If we 2b400 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20 6d are using the m 2b410 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 ixed-mode assemb 2b420 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61 64 ly and we alread 2b430 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 2b440 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62 6f found it (abo 2b450 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 ve), this should 2b460 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64 2e always succeed. 2b470 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2b480 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 2b490 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a 74 65 iteLibrary$::te
2b4a0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
2b4b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2b4c0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
2b4d0 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74  f the SQLite int
2b4e0 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 73  erop assembly is
2b4f0 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
2b500 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2b510 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e  checkForSQLiteIn
2b520 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68  terop $::test_ch 2b530 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 2b540 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2b550 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 53 51 TE: Check the SQ 2b560 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61 6e Lite database an 2b570 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 d temporary dire 2b580 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 ctories... 2b590 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 2b5a0 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 2b5b0 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 tories$::test_c
2b5c0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
2b5d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2b5e0 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
2b5f0 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 61 72  determine if var
2b600 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  ious compile-tim
2b610 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 64  e options needed
2b620 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20   for..        #
2b630 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 73 74        test const
2b640 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e 61 62  raints were enab
2b650 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61  led for the mana
2b660 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 54  ged assembly.  T
2b670 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20  here..        #
2b680 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 20 63        are some c
2b690 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2b6a0 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 61 6c  ons that must al
2b6b0 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 6e 61  so have been ena
2b6c0 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  bled..        #
2b6d0 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 69 6e        for the in
2b6e0 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69  terop assembly i
2b6f0 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 65 66  n order to be ef
2b700 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 74 68  fective.  For th
2b710 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ose..        #
2b720 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74       options, it
2b730 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 64   will be assumed
2b740 20 74 68 61 74 20 69 74 20 77 61 73 20 65 6e 61   that it was ena
2b750 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e 74  bled for the int
2b760 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 20  erop..        #
2b770 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69        assembly i
2b780 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64  f it was enabled
2b790 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64   for the managed
2b7a0 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
2b7b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66      #..        f
2b7c0 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e  oreach defineCon
2b7d0 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20  stant [list \..
2b7e0 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43 4b             CHECK
2b7f0 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e  _STATE COUNT_HAN
2b800 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 52 4f  DLE DEBUG INTERO
2b810 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f  P_CODEC INTEROP_
2b820 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 20  DEBUG \..
2b830 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54       INTEROP_EXT
2b840 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53  ENSION_FUNCTIONS
2b850 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58   INTEROP_FTS5_EX
2b860 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
2b870 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49         INTEROP_I
2b880 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 49 4e 54  NCLUDE_CEROD INT
2b890 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54  EROP_INCLUDE_EXT
2b8a0 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  RA INTEROP_INCLU
2b8b0 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20 20 20 20  DE_SEE \..
2b8c0 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e        INTEROP_IN
2b8d0 43 4c 55 44 45 5f 5a 49 50 56 46 53 20 49 4e 54  CLUDE_ZIPVFS INT
2b8e0 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e  EROP_JSON1_EXTEN
2b8f0 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
2b900 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41      INTEROP_LEGA
2b910 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50  CY_CLOSE INTEROP
2b920 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f 50 45 52  _LOG INTEROP_PER
2b930 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f  CENTILE_EXTENSIO
2b940 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  N \..
2b950 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f   INTEROP_REGEXP_
2b960 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f  EXTENSION INTERO
2b970 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53  P_SESSION_EXTENS
2b980 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ION \..
2b990 20 20 20 49 4e 54 45 52 4f 50 5f 53 48 41 31 5f     INTEROP_SHA1_
2b9a0 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f  EXTENSION INTERO
2b9b0 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e  P_TEST_EXTENSION
2b9c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2b9d0 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45  INTEROP_TOTYPE_E
2b9e0 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50  XTENSION INTEROP
2b9f0 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c  _VIRTUAL_TABLE \
2ba00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e 45  ..            NE
2ba10 54 5f 32 30 20 4e 45 54 5f 33 35 20 4e 45 54 5f  T_20 NET_35 NET_
2ba20 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35  40 NET_45 NET_45
2ba30 31 20 4e 45 54 5f 34 35 32 20 4e 45 54 5f 34 36  1 NET_452 NET_46
2ba40 20 4e 45 54 5f 34 36 31 20 5c 0d 0a 20 20 20 20   NET_461 \..
2ba50 20 20 20 20 20 20 20 20 4e 45 54 5f 34 36 32 20          NET_462
2ba60 4e 45 54 5f 34 37 20 4e 45 54 5f 34 37 31 20 4e  NET_47 NET_471 N
2ba70 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 50 4c  ET_COMPACT_20 PL
2ba80 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
2ba90 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 20  AMEWORK \..
2baa0 20 20 20 20 20 20 20 50 52 45 4c 4f 41 44 5f 4e         PRELOAD_N
2bab0 41 54 49 56 45 5f 4c 49 42 52 41 52 59 20 52 45  ATIVE_LIBRARY RE
2bac0 54 41 52 47 45 54 41 42 4c 45 20 53 51 4c 49 54  TARGETABLE SQLIT
2bad0 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d 0a 20 20  E_STANDARD \..
2bae0 20 20 20 20 20 20 20 20 20 20 54 48 52 4f 57 5f            THROW_
2baf0 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 52 41 43  ON_DISPOSED TRAC
2bb00 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  E TRACE_CONNECTI
2bb10 4f 4e 20 54 52 41 43 45 5f 44 45 54 45 43 54 49  ON TRACE_DETECTI
2bb20 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ON \..
2bb30 20 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 54    TRACE_HANDLE T
2bb40 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 41  RACE_PRELOAD TRA
2bb50 43 45 5f 53 48 41 52 45 44 20 54 52 41 43 45 5f  CE_SHARED TRACE_
2bb60 53 54 41 54 45 4d 45 4e 54 20 5c 0d 0a 20 20 20  STATEMENT \..
2bb70 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 57           TRACE_W
2bb80 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d  ARNING TRACK_MEM
2bb90 4f 52 59 5f 42 59 54 45 53 20 55 53 45 5f 45 4e  ORY_BYTES USE_EN
2bba0 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f 36  TITY_FRAMEWORK_6
2bbb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2bbc0 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20  USE_INTEROP_DLL
2bbd0 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57  USE_PREPARE_V2 W
2bbe0 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20  INDOWS] {..
2bbf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2bc00 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
2bc10 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  if the compile-t
2bc20 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69  ime option is li
2bc30 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74  sted in the list
2bc40 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23   of..          #
2bc50 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 63         "define c
2bc60 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74  onstants" kept t
2bc70 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d  rack of by the m
2bc80 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
2bc90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2bca0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
2bcb0 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  rSQLiteDefineCon
2bcc0 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68  stant $::test_ch 2bcd0 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e annel$defineCon
2bce0 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d  stant..        }
2bcf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
2bd00 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
2bd10 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
2bd20 69 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20 63  ine if various c
2bd30 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2bd40 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a  ons needed for..
2bd50 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2bd60 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
2bd70 20 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f   were enabled fo
2bd80 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73  r the interop as
2bd90 73 65 6d 62 6c 79 20 61 6e 64 2f 6f 72 0d 0a 20  sembly and/or..
2bda0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
2bdb0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  or the SQLite co
2bdc0 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...
2bdd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2bde0 66 6f 72 65 61 63 68 20 63 6f 6d 70 69 6c 65 4f  foreach compileO
2bdf0 70 74 69 6f 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20  ption [list \..
2be00 20 20 20 20 20 20 20 20 20 20 20 43 4f 44 45 43             CODEC
2be10 20 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54   EXTENSION_FUNCT
2be20 49 4f 4e 53 20 48 41 53 5f 43 4f 44 45 43 20 49  IONS HAS_CODEC I
2be30 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 49 4e 43  NCLUDE_CEROD INC
2be40 4c 55 44 45 5f 45 58 54 52 41 20 5c 0d 0a 20 20  LUDE_EXTRA \..
2be50 20 20 20 20 20 20 20 20 20 20 49 4e 43 4c 55 44            INCLUD
2be60 45 5f 53 45 45 20 49 4e 43 4c 55 44 45 5f 5a 49  E_SEE INCLUDE_ZI
2be70 50 56 46 53 20 4a 53 4f 4e 31 5f 45 58 54 45 4e  PVFS JSON1_EXTEN
2be80 53 49 4f 4e 20 4c 45 47 41 43 59 5f 43 4c 4f 53  SION LEGACY_CLOS
2be90 45 20 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20  E LOG \..
2bea0 20 20 20 20 20 50 45 52 43 45 4e 54 49 4c 45 5f       PERCENTILE_
2beb0 45 58 54 45 4e 53 49 4f 4e 20 52 45 47 45 58 50  EXTENSION REGEXP
2bec0 5f 45 58 54 45 4e 53 49 4f 4e 20 53 45 53 53 49  _EXTENSION SESSI
2bed0 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a  ON_EXTENSION \..
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 53 48 41 31              SHA1
2bef0 5f 45 58 54 45 4e 53 49 4f 4e 20 54 45 53 54 5f  _EXTENSION TEST_
2bf00 45 58 54 45 4e 53 49 4f 4e 20 54 4f 54 59 50 45  EXTENSION TOTYPE
2bf10 5f 45 58 54 45 4e 53 49 4f 4e 20 56 49 52 54 55  _EXTENSION VIRTU
2bf20 41 4c 5f 54 41 42 4c 45 5d 20 7b 0d 0a 20 20 20  AL_TABLE] {..
2bf30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2bf40 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
2bf50 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65  k if the compile
2bf60 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is
2bf70 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69  listed in the li
2bf80 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  st..          #
2bf90 20 20 20 20 20 20 6b 65 70 74 20 74 72 61 63 6b        kept track
2bfa0 20 6f 66 20 62 79 20 74 68 65 20 69 6e 74 65 72   of by the inter
2bfb0 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 2f  op assembly and/
2bfc0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20  or the SQLite..
2bfd0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
2bfe0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
2bff0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2c000 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
2c010 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69  QLiteCompileOpti
2c020 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  on $::test_chann 2c030 65 6c 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f el$compileOptio
2c040 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  n..        }....
2c050 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2c060 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
2c070 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44   if the System.D
2c080 61 74 61 2e 53 51 4c 69 74 65 20 70 72 6f 76 69  ata.SQLite provi
2c090 64 65 72 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  der was compiled
2c0a0 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 23   with..        #
2c0b0 20 20 20 20 20 20 20 73 75 70 70 6f 72 74 20 66         support f
2c0c0 6f 72 20 61 6e 79 20 65 6e 63 72 79 70 74 65 64  or any encrypted
2c0d0 20 64 61 74 61 62 61 73 65 73 2e 0d 0a 20 20 20   databases...
2c0e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2c0f0 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 44  if {[haveSQLiteD
2c100 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e  efineConstant IN
2c110 54 45 52 4f 50 5f 43 4f 44 45 43 5d 20 7c 7c 20  TEROP_CODEC] ||
2c120 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
2c130 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65  haveSQLiteDefine
2c140 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50  Constant INTEROP
2c150 5f 49 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74  _INCLUDE_SEE]} t
2c160 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2c170 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
2c180 4e 4f 54 45 3a 20 4e 6f 77 20 63 68 65 63 6b 20  NOTE: Now check
2c190 69 66 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61  if the interop a
2c1a0 73 73 65 6d 62 6c 79 20 77 61 73 20 61 6c 73 6f  ssembly was also
2c1b0 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a   compiled with..
2c1c0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2c1d0 20 20 73 75 70 70 6f 72 74 20 66 6f 72 20 65 6e    support for en
2c1e0 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65  crypted database
2c1f0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  s...          #.
2c200 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
2c210 68 61 76 65 53 51 4c 69 74 65 43 6f 6d 70 69 6c  haveSQLiteCompil
2c220 65 4f 70 74 69 6f 6e 20 43 4f 44 45 43 5d 20 7c  eOption CODEC] |
2c230 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  | \..
2c240 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 43 6f     [haveSQLiteCo
2c250 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 49 4e 43 4c  mpileOption INCL
2c260 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b  UDE_SEE]} then {
2c270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
2c280 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
2c290 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 63 68  OTE: Finally, ch
2c2a0 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74  eck if the SQLit
2c2b0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77  e core library w
2c2c0 61 73 20 63 6f 6d 70 69 6c 65 64 0d 0a 20 20 20  as compiled..
2c2d0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
2c2e0 20 77 69 74 68 20 73 75 70 70 6f 72 74 20 66 6f   with support fo
2c2f0 72 20 65 6e 63 72 79 70 74 65 64 20 64 61 74 61  r encrypted data
2c300 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  bases...
2c310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
2c320 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
2c330 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20  teCompileOption
2c340 48 41 53 5f 43 4f 44 45 43 5d 7d 20 74 68 65 6e  HAS_CODEC]} then
2c350 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2c360 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
2c370 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
2c380 61 64 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  add constraint f
2c390 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65  or use by the te
2c3a0 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
2c3b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2c3c0 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
2c3d0 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44  straint System.D
2c3e0 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79  ata.SQLite.Encry
2c3f0 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ption..
2c400 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2c410 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2c420 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2c430 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
2c440 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69   the current bui
2c450 6c 64 20 79 65 61 72 2e 20 20 42 61 73 69 63 61  ld year.  Basica
2c460 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61  lly, this indica
2c470 74 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  tes..        #
2c480 20 20 20 20 20 77 68 69 63 68 20 76 65 72 73 69       which versi
2c490 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e  on of MSBuild an
2c4a0 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64  d/or Visual Stud
2c4b0 69 6f 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a  io was used to..
2c4c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2c4d0 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65  compile the asse
2c4e0 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e  mbly binaries un
2c4f0 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20  der test...
2c500 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
2c510 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2c520 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 2c530 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin 2c540 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat 2c550 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 a.SQLite build y 2c560 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ear... ".... 2c570 20 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 set year [ge 2c580 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 tBuildYear].. 2c590 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 2c5a0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 nt [appendArgs b 2c5b0 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d uildYear.$year]
2c5c0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
2c5d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2c5e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
2c5f0 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20  year \"\n]....
2c600 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 2c610 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 2c620 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2c630 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 2c640 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 2c650 20 62 75 69 6c 64 20 6e 61 74 69 76 65 20 79 65 build native ye 2c660 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 ar... ".... 2c670 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 set year [get 2c680 42 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72 5d BuildNativeYear] 2c690 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 2c6a0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2c6b0 72 67 73 20 62 75 69 6c 64 4e 61 74 69 76 65 59 rgs buildNativeY 2c6c0 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 ear.$year]..
2c6d0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2c6e0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 2c6f0 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 ndArgs \"$year
2c700 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
2c710 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2c720 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75  TE: Check the cu
2c730 72 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54  rrent build .NET
2c740 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73   Framework.  Bas
2c750 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20  ically, this..
2c760 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
2c770 64 69 63 61 74 65 73 20 77 68 69 63 68 20 76 65  dicates which ve
2c780 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45  rsion of the .NE
2c790 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62  T Framework is b
2c7a0 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20  eing..        #
2c7b0 20 20 20 20 20 20 75 73 65 64 20 62 79 20 74 68        used by th
2c7c0 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72  e assembly binar
2c7d0 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d  ies under test..
2c7e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2c7f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 2c800 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 2c810 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 2c820 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst 2c830 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 em.Data.SQLite b 2c840 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 uild .NET Framew 2c850 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ork... ".... 2c860 20 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b 67 set netFx [g 2c870 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 etBuildNetFx].. 2c880 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 2c890 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2c8a0 20 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e buildFramework. 2c8b0 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20$netFx]..
2c8c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2c8d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2c8e0 72 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 rgs \"$netFx \"
2c8f0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
2c900 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2c910 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72  : Check the curr
2c920 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67  ent build config
2c930 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73  uration.  This s
2c940 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a  hould normally..
2c950 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2c960 62 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67  be either "Debug
2c970 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d  " or "Release"..
2c980 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2c990 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 2c9a0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 2c9b0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 2c9c0 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst 2c9d0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 em.Data.SQLite b 2c9e0 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 uild configurati 2c9f0 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 on... ".... 2ca00 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 set configura 2ca10 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f tion [getBuildCo 2ca20 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 nfiguration].. 2ca30 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra 2ca40 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2ca50 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 buildConfigurati 2ca60 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 on.$configurati
2ca70 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75  on]..        tpu
2ca80 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 2ca90 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 2caa0 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e "$configuration
2cab0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20   \"\n]....
2cac0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2cad0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 2cae0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che 2caf0 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System 2cb00 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 .Data.SQLite bui 2cb10 6c 64 20 65 78 74 72 61 2e 2e 2e 20 22 0d 0a 0d ld extra... "... 2cb20 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2cb30 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 2cb40 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 k the current bu 2cb50 69 6c 64 20 65 78 74 72 61 20 64 69 72 65 63 74 ild extra direct 2cb60 6f 72 79 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 ory. This will 2cb70 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 normally.. 2cb80 20 20 23 20 20 20 20 20 20 20 62 65 20 65 69 74 # be eit 2cb90 68 65 72 20 22 6e 65 74 73 74 61 6e 64 61 72 64 her "netstandard 2cba0 32 2e 30 22 20 6f 72 20 61 6e 20 65 6d 70 74 79 2.0" or an empty 2cbb0 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 2cbc0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 2cbd0 20 65 78 74 72 61 20 5b 67 65 74 42 75 69 6c 64 extra [getBuild 2cbe0 45 78 74 72 61 5d 0d 0a 0d 0a 20 20 20 20 20 20 Extra].... 2cbf0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 2cc00 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 ngth$extra] > 0
2cc10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2cc20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
2cc30 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75  t [appendArgs bu
2cc40 69 6c 64 45 78 74 72 61 2e 20 24 65 78 74 72 61  ildExtra. $extra 2cc50 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 ].. tpu 2cc60 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
2cc70 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
2cc80 22 20 24 65 78 74 72 61 20 5c 22 5c 6e 5d 0d 0a  " $extra \"\n].. 2cc90 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 2cca0 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC 2ccb0 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 45 onstraint buildE 2ccc0 78 74 72 61 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 xtra.none.. 2ccd0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2cce0 73 74 5f 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65  st_channel <none
2ccf0 3e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  >\n..        }..
2cd00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2cd10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79       # NOTE: Try
2cd20 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74   to setup an int
2cd30 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20  errupt callback
2cd40 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70 74  using the script
2cd50 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20   debugger..
2cd60 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
2cd70 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20  will cancel all
2cd80 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70  SQL queries in p
2cd90 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20  rogress for all
2cda0 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..
2cdb0 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
2cdc0 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74  tions known to t
2cdd0 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e  his interpreter.
2cde0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2cdf0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
2ce00 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69  exists ::no(sqli
2ce10 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62  teInterruptCallb
2ce20 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ack)]} then {..
2ce30 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44 62           setupDb
2ce40 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63  InterruptCallbac
2ce50 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  k $::test_channe 2ce60 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 l$::test_log..
2ce70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2ce80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2ce90 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
2cea0 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74   the native runt
2ceb0 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63  ime option, whic
2cec0 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20  h would mean we
2ced0 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  are..        #
2cee0 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d       using the m
2cef0 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
2cf00 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ly...        #..
2cf10 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2cf20 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a  RuntimeOption $: 2cf30 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 :test_channel na 2cf40 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tive.... 2cf50 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2cf60 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 2cf70 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c test suite shoul 2cf80 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62 d count the numb 2cf90 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e er of connection 2cfa0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 2cfb0 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20 "opened" and 2cfc0 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68 "closed" from th 2cfd0 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65 e pool when dete 2cfe0 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73 rmining if a tes 2cff0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 2d000 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 61 passed. Disa 2d010 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 76 bling this behav 2d020 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 ior is sometimes 2d030 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e necessary (e.g. 2d040 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2d050 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c during the rel 2d060 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f ease testing pro 2d070 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 68 cess) because th 2d080 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d ere are several. 2d090 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2d0a0 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c 79 tests that rely 2d0b0 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20 on the "opened 2d0c0 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 from pool" count 2d0d0 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a being greater.. 2d0e0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2d0f0 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73 than zero. Thes 2d100 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c e tests may fail 2d110 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d due to the non- 2d120 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20 deterministic.. 2d130 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 2d140 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43 ehavior of the C 2d150 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e LR GC, even when 2d160 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67 there is no bug 2d170 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20 in the code.. 2d180 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 2d190 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20 ing tested... 2d1a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2d1b0 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f checkForRuntimeO 2d1c0 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 ption$::test_ch
2d1d0 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e  annel noPoolCoun
2d1e0 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ts....        #.
2d1f0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
2d200 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65   Check if the te
2d210 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20  st suite should
2d220 75 73 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  use shared-cache
2d230 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   mode...
2d240 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
2d250 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  ForRuntimeOption
2d260 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2d270 20 73 68 61 72 65 64 43 61 63 68 65 0d 0a 0d 0a sharedCache.... 2d280 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2d290 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 # NOTE: Repor 2d2a0 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 t the resource u 2d2b0 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75 sage prior to ru 2d2c0 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e nning any tests. 2d2d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2d2e0 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 reportSQLit 2d2f0 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 eResources$::te
2d300 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
2d310 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2d320 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
2d330 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65  e list of native
2d340 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20 74 68 65   modules for the
2d350 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
2d360 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20   and..        #
2d370 20 20 20 20 20 20 72 65 70 6f 72 74 20 6f 6e 20        report on
2d380 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
2d390 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f  SQLite related o
2d3a0 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  nes...        #.
2d3b0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
2d3c0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
2d3d0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
2d3e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f            set mo
2d3f0 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e  dules [object in
2d400 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  voke \..
2d410 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61        System.Dia
2d420 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65 73 73  gnostics.Process
2d430 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65  .GetCurrentProce
2d440 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20  ss Modules]....
2d450 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
2d460 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 6d  foreach -alias m
2d470 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20 7b  odule $modules { 2d480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 2d490 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 2d4a0 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 OTE: The module 2d4b0 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 6d file name here m 2d4c0 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 ust be normalize 2d4d0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d... 2d4e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 #.. s 2d4f0 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 2d500 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f e normalize [$mo
2d510 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d  dule FileName]].
2d520 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
2d530 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 66   fileNameOnly [f
2d540 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 2d550 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 me].... 2d560 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 if {[lsearch 2d570 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d -exact -nocase - 2d580 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 - \.. 2d590 20 20 20 20 20 5b 67 65 74 4e 61 74 69 76 65 4c [getNativeL 2d5a0 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f ibraryFileNamesO 2d5b0 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e nly]$fileNameOn
2d5c0 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20  ly] != -1} then
2d5d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2d5e0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2d5f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2d600 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 2d610 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f "---- fo 2d620 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 und loaded SQLit 2d630 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 2d640 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 module: " \.. 2d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d660 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20$fileName \n]..
2d670 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2d680 65 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65  eif {[lsearch -e
2d690 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20  xact -nocase --
2d6a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2d6b0 20 20 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73     [getInteropAs
2d6c0 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f  semblyFileNamesO
2d6d0 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  nly] $fileNameOn 2d6e0 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 ly] != -1} then 2d6f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d700 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2d710 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2d720 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2d730 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f          "---- fo
2d740 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74  und loaded SQLit
2d750 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
2d760 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a  ly module: " \..
2d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d780 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d    $fileName \n]. 2d790 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2d7a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2d7b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2d7c0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 2d7d0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2d7e0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
2d7f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2d800 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  - compile-time o
2d810 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74  ptions for SQLit
2d820 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e  e core library..
2d830 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  . "....
2d840 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
2d850 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
2d860 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
2d870 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
2d890 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2d8a0 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 43  .SQLite3 SQLiteC
2d8b0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20  ompileOptions..
2d8c0 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d 70 69           } compi
2d8d0 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d  leOptions] == 0}
2d8e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2d8f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2d900 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 2d910 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 ndArgs [formatLi 2d920 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 st [lsort \.. 2d930 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f$co
2d940 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e  mpileOptions] <n
2d950 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  one>] \n]..
2d960 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
2d970 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
2d980 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2d990 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 unknown\n.. 2d9a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2d9b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 2d9c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 2d9d0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2d9e0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
2d9f0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
2da00 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2da10 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e  ns for SQLite in
2da20 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e  terop assembly..
2da30 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  . "....
2da40 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
2da50 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
2da60 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
2da70 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
2da90 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2daa0 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70  .SQLite3 Interop
2dab0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a  CompileOptions..
2dac0 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d 70            } comp
2dad0 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30  ileOptions] == 0
2dae0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2daf0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 2db00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 2db10 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c endArgs [formatL 2db20 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 ist [lsort \.. 2db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63$c
2db40 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c  ompileOptions] <
2db50 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20  none>] \n]..
2db60 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2db70 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
2db80 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2db90 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 l unknown\n.. 2dba0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2dbb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 2dbc0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2dbd0 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74 69 76 : Show the activ 2dbe0 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e e test constrain 2dbf0 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 2dc00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2dc10 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
2dc20 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20  ppendArgs "----
2dc30 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22 20 5c  constraints: " \
2dc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
2dc50 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
2dc60 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e 74 73   [getConstraints
2dc70 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a  ]] <none>] \n]..
2dc80 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2dc90 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 61 76       # NOTE: Sav
2dca0 65 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74  e the test const
2dcb0 72 61 69 6e 74 73 20 66 6f 72 20 75 73 65 20 62  raints for use b
2dcc0 79 20 74 68 72 65 61 64 73 20 63 72 65 61 74 65  y threads create
2dcd0 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20  d in this..
2dce0 20 20 20 23 20 20 20 20 20 20 20 61 70 70 6c 69     #       appli
2dcf0 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20  cation domain.
2dd00 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
2dd10 79 20 62 65 63 61 75 73 65 20 61 6c 6c 20 74 68  y because all th
2dd20 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20  e Eagle..
2dd30 20 23 20 20 20 20 20 20 20 22 74 65 73 74 20 63   #       "test c
2dd40 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 6d 61 74  ontext" informat
2dd50 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 72 65 61  ion is per-threa
2dd60 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
2dd70 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
2dd80 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
2dd90 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d 20 74 68  constraints]} th
2dda0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2ddb0 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74  set ::test_const
2ddc0 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f  raints $::eagle_ 2ddd0 74 65 73 74 73 28 43 6f 6e 73 74 72 61 69 6e 74 tests(Constraint 2dde0 73 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d s).. }... 2ddf0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2de00 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 # NOTE: Load 2de10 20 74 68 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 the "after-cons 2de20 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 traints" custom 2de30 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 2de40 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 per-host.. 2de50 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 2de60 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 2de70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2de80 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 2de90 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 2dea0 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
2deb0 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d  channel .after].
2dec0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2ded0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
2dee0 20 6e 65 63 65 73 73 61 72 79 2c 20 65 6e 61 62   necessary, enab
2def0 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  le shared-cache
2df00 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  mode now...
2df10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
2df20 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
2df30 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65 5d  ion sharedCache]
2df40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2df50 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65 64      enableShared
2df60 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63 68  Cache $::test_ch 2df70 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 annel true.. 2df80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2df90 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2dfa0 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 TE: Show when ou 2dfb0 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 r tests actually 2dfc0 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 began (now)... 2dfd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2dfe0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2dff0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2e000 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2e010 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e     "---- System.
2e020 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
2e030 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a  s began at " \..
2e040 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f              [clo
2e050 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b  ck format [clock
2e060 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a   seconds]] \n]..
2e070 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2e080 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53  ...    proc runS
2e090 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 50 72  QLiteTestFilesPr
2e0a0 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20  ologue {} {..
2e0b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
2e0c0 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67  TE: Skip running
2e0d0 20 6f 75 72 20 63 75 73 74 6f 6d 20 66 69 6c 65   our custom file
2e0e0 73 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68  s prologue if th
2e0f0 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62  e main one has b
2e100 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  een..      #
2e110 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20     skipped...
2e120 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
2e130 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2e140 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c  no(prologue.eagl
2e150 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
2e160 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b       uplevel 1 {
2e170 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2e180 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2e190 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61   Setup the varia
2e1a0 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20  bles that refer
2e1b0 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e  to the various n
2e1c0 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20  on-data files..
2e1d0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
2e1e0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
2e1f0 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66   tests in this f
2e200 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...
2e210 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
2e220 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b   entityFramework
2e230 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  DllFile \..
2e240 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
2e250 6c 64 46 69 6c 65 4e 61 6d 65 20 45 6e 74 69 74  ldFileName Entit
2e260 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 20 66  yFramework.dll f
2e270 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alse]....
2e280 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 72     set installer
2e290 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  ExeFile \..
2e2a0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
2e2b0 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61  ldFileName Insta
2e2c0 6c 6c 65 72 2e 65 78 65 20 66 61 6c 73 65 5d 0d  ller.exe false].
2e2d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
2e2e0 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44   sqliteDesignerD
2e2f0 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  llFile \..
2e300 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
2e310 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65  dFileName SQLite
2e320 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 20 66 61  .Designer.dll fa
2e330 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse]....
2e340 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61    set systemData
2e350 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d  SQLiteDllFile \.
2e360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2e370 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
2e380 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2e390 69 74 65 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a  ite.dll false]..
2e3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
2e3b0 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
2e3c0 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20  LinqDllFile \..
2e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
2e3e0 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53  tBuildFileName S
2e3f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2e400 65 2e 4c 69 6e 71 2e 64 6c 6c 20 66 61 6c 73 65  e.Linq.dll false
2e410 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ]....          s
2e420 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c  et systemDataSQL
2e430 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d  iteEf6DllFile \.
2e440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2e450 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
2e460 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2e470 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66 61 6c 73  ite.EF6.dll fals
2e480 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
2e490 73 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20  set testExeFile
2e4a0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
2e4b0 65 20 74 65 73 74 2e 65 78 65 20 66 61 6c 73 65  e test.exe false
2e4c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ]..          set
2e4d0 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65   testLinqExeFile
2e4e0 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
2e4f0 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 20  me testlinq.exe
2e500 66 61 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20  false]..
2e510 20 20 73 65 74 20 74 65 73 74 45 66 36 45 78 65    set testEf6Exe
2e520 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69  File [getBuildFi
2e530 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65  leName testef6.e
2e540 78 65 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20  xe false]....
2e550 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2e560 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75      # NOTE: Setu
2e570 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20  p the variables
2e580 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
2e590 65 20 76 61 72 69 6f 75 73 20 64 61 74 61 20 66  e various data f
2e5a0 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  iles..
2e5b0 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64  #       required
2e5c0 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69 6e   by the tests in
2e5d0 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 20   this file...
2e5e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2e5f0 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71      set testLinq
2e600 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  OutFile [file na
2e610 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
2e620 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
2e630 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
2e640 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65 73  estDataPath] tes
2e650 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20  tlinq.out]]....
2e660 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72           set nor
2e670 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b  thwindEfDbFile [
2e680 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
2e690 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2e6b0 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20  e dirname [file
2e6c0 64 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69  dirname [getSQLi
2e6d0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d  teTestDataPath]]
2e6e0 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
2e6f0 20 20 20 74 65 73 74 6c 69 6e 71 20 6e 6f 72 74     testlinq nort
2e700 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a  hwindEF.db]]....
2e710 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f            set no
2e720 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65  nWalDbFile [file
2e730 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
2e740 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
2e750 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
2e760 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
2e770 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20  nonWal.db]]....
2e780 20 20 20 20 20 20 20 20 20 73 65 74 20 77 61 6c           set wal
2e790 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  DbFile [file nat
2e7a0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
2e7b0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
2e7c0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
2e7d0 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e  stDataPath] wal.
2e7e0 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  db]]....
2e7f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
2e800 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f   NOTE: The vario
2e810 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73  us install/unins
2e820 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75  tall log files u
2e830 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d  sed to test the.
2e840 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
2e850 20 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20 63     design-time c
2e860 6f 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c  omponent install
2e870 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  er...          #
2e880 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
2e890 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
2e8a0 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  5LogFile [file n
2e8b0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
2e8c0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
2e8d0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
2e8e0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e  TestDataPath] In
2e8f0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
2e900 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  005.log]]....
2e910 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
2e920 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
2e930 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
2e940 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
2e950 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2e960 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
2e970 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c  ataPath] Install
2e980 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c  er_Test_Vs2008.l
2e990 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
2e9a0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c    set testInstal
2e9b0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b  lVs2010LogFile [
2e9c0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
2e9d0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
2e9e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
2e9f0 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
2ea00 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65  th] Installer_Te
2ea10 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d  st_Vs2010.log]].
2ea20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
2ea30 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
2ea40 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  12LogFile [file
2ea50 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
2ea60 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
2ea70 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
2ea80 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
2ea90 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
2eaa0 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2012.log]]....
2eab0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
2eac0 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  InstallVs2013Log
2ead0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
2eae0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
2eaf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2eb00 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
2eb10 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
2eb20 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 2e  ler_Test_Vs2013.
2eb30 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
2eb40 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
2eb50 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20  llVs2015LogFile
2eb60 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
2eb70 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
2eb90 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
2eba0 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
2ebb0 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d  est_Vs2015.log]]
2ebc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
2ebd0 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
2ebe0 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  017LogFile [file
2ebf0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
2ec00 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
2ec10 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
2ec20 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
2ec30 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
2ec40 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2017.log]]....
2ec50 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73           set tes
2ec60 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35  tUninstallVs2005
2ec70 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
2ec80 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
2ec90 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
2eca0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
2ecb0 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69  estDataPath] Uni
2ecc0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
2ecd0 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2005.log]]....
2ece0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
2ecf0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c  UninstallVs2008L
2ed00 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
2ed10 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
2ed20 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
2ed30 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
2ed40 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
2ed50 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
2ed60 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  008.log]]....
2ed70 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55         set testU
2ed80 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  ninstallVs2010Lo
2ed90 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
2eda0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
2edb0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
2edc0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
2edd0 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
2ede0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
2edf0 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  10.log]]....
2ee00 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e        set testUn
2ee10 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67  installVs2012Log
2ee20 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
2ee30 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
2ee40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2ee50 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
2ee60 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
2ee70 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
2ee80 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  2.log]]....
2ee90 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
2eea0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
2eeb0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
2eec0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
2eed0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2eee0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
2eef0 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61  ataPath] Uninsta
2ef00 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33  ller_Test_Vs2013
2ef10 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
2ef20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
2ef30 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69  stallVs2015LogFi
2ef40 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
2ef50 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
2ef60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2ef70 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
2ef80 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c  taPath] Uninstal
2ef90 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e  ler_Test_Vs2015.
2efa0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
2efb0 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73     set testUnins
2efc0 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c  tallVs2017LogFil
2efd0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
2efe0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
2eff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2f000 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
2f010 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
2f020 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 2e 6c  er_Test_Vs2017.l
2f030 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
2f040 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
2f050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2f080 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
2f090 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
2f0a0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 68 65 63  exists ::no(chec
2f0b0 6b 46 6f 72 53 71 6c 69 74 65 46 69 6c 65 73 29  kForSqliteFiles)
2f0c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2f0d0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2f0e0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2f0f0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2f100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2f110 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e 74   [file tail $ent 2f120 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 ityFrameworkDllF 2f130 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 2f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 ch 2f150 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
2f160 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79  _channel $entity 2f170 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 FrameworkDllFile 2f180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2f190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2f1a0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2f1b0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2f1c0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2f1d0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2f1e0 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 ail$installerEx
2f1f0 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  eFile]]]} then {
2f200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2f210 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 2f220 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74 st_channel$inst
2f230 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e 73  allerExeFile Ins
2f240 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20  taller.exe..
2f250 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2f260 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68           if {![h
2f270 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
2f280 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
2f290 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2f2a0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73     [file tail $s 2f2b0 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c qliteDesignerDll 2f2c0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2f2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 2f2e0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2f2f0 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74  t_channel $sqlit 2f300 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 eDesignerDllFile 2f310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2f320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2f330 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2f340 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2f350 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2f360 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2f370 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 ail$systemDataS
2f380 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d 7d  QLiteDllFile]]]}
2f390 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2f3a0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
2f3b0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 2f3c0 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c l$systemDataSQL
2f3d0 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20  iteDllFile..
2f3e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2f3f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68           if {![h
2f400 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
2f410 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
2f420 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2f430 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73     [file tail $s 2f440 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c ystemDataSQLiteL 2f450 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 inqDllFile]]]} t 2f460 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2f470 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2f480 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2f490 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  $systemDataSQLit 2f4a0 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20 eLinqDllFile.. 2f4b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 2f4c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 2f4d0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2f4e0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2f4f0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2f500 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2f510 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74$systemDataSQLit
2f520 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20  eEf6DllFile]]]}
2f530 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2f540 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
2f550 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 2f560 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
2f570 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20  teEf6DllFile..
2f580 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
2f590 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2f5a0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2f5b0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2f5c0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2f5d0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2f5e0 24 74 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d 7d  $testExeFile]]]} 2f5f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2f600 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 2f610 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
2f620 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 74  l $testExeFile t 2f630 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 est.exe.. 2f640 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2f650 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 2f660 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 2f670 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f690 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
2f6a0 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d 20  LinqExeFile]]]}
2f6b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2f6c0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
2f6d0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 2f6e0 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c$testLinqExeFil
2f6f0 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a  e testlinq.exe..
2f700 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f710 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
2f720 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
2f730 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
2f740 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
2f750 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
2f760 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c  l $testEf6ExeFil 2f770 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 2f780 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 chec 2f790 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2f7a0 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45  hannel $testEf6E 2f7b0 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65 xeFile testef6.e 2f7c0 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 xe.. 2f7d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2f7e0 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 2f7f0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 2f800 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 2f810 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 2f820 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 4f tail$testLinqO
2f830 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  utFile]]]} then
2f840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2f850 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2f860 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
2f870 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20  tLinqOutFile..
2f880 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
2f890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2f8a0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2f8b0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2f8c0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2f8d0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2f8e0 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69  $northwindEfDbFi 2f8f0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 2f910 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
2f920 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69  channel $northwi 2f930 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 20 ndEfDbFile.. 2f940 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2f950 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 if {![h 2f960 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 2f970 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 2f980 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2f990 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e [file tail$n
2f9a0 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20  onWalDbFile]]]}
2f9b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2f9c0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
2f9d0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 2f9e0 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a$nonWalDbFile..
2f9f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2fa00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
2fa10 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
2fa20 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
2fa30 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
2fa40 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
2fa50 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d  l $walDbFile]]]} 2fa60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2fa70 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 2fa80 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
2fa90 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20  l $walDbFile.. 2faa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 2fab0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 2fac0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2fad0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2fae0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2faf0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2fb00 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
2fb10 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  05LogFile]]]} th
2fb20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2fb30 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
2fb40 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
2fb50 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
2fb60 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  5LogFile..
2fb70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2fb80 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2fb90 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2fba0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2fbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2fbc0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 2fbd0 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f tInstallVs2008Lo 2fbe0 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b gFile]]]} then { 2fbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2fc00 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
2fc10 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 2fc20 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 InstallVs2008Log 2fc30 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 File.. 2fc40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 2fc50 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 2fc60 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2fc70 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 2fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 2fc90 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
2fca0 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
2fcb0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
2fcd0 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 2fce0 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 hannel$testInst
2fcf0 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65  allVs2010LogFile
2fd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2fd10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2fd20 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2fd30 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2fd40 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2fd50 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2fd60 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 2fd70 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2012LogFile]]] 2fd80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2fd90 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2fda0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
2fdb0 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  el $testInstallV 2fdc0 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 s2012LogFile.. 2fdd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 2fde0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 2fdf0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2fe00 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2fe10 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2fe20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2fe30 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
2fe40 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  13LogFile]]]} th
2fe50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2fe60 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
2fe70 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
2fe80 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
2fe90 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  3LogFile..
2fea0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2feb0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
2fec0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
2fed0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
2fee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2fef0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 2ff00 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 2ff10 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b gFile]]]} then { 2ff20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2ff30 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
2ff40 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 2ff50 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 InstallVs2015Log 2ff60 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 File.. 2ff70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 2ff80 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 2ff90 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2ffa0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 2ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 2ffc0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
2ffd0 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c  tallVs2017LogFil
2ffe0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
30000 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 30010 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 hannel$testInst
30020 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65  allVs2017LogFile
30030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30050 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
30060 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
30070 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
30080 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
30090 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 300a0 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d llVs2005LogFile] 300b0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 300c0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 300d0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
300e0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 300f0 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 30100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 30110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 30120 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 30130 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 30140 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 30150 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 30160 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
30170 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d  llVs2008LogFile]
30180 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
30190 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
301a0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 301b0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
301c0 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
301d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
301e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
301f0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
30200 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
30210 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
30220 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
30230 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 30240 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d llVs2010LogFile] 30250 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 30260 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 30270 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
30280 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 30290 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 302a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 302b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 302c0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 302d0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 302e0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 302f0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 30300 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
30310 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d  llVs2012LogFile]
30320 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
30330 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
30340 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 30350 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
30360 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
30370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30390 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
303a0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
303b0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
303c0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
303d0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 303e0 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d llVs2013LogFile] 303f0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 30400 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 30410 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
30420 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 30430 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 allVs2013LogFile 30440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 30450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 30460 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 30470 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 30480 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 30490 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 304a0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
304b0 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d  llVs2015LogFile]
304c0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
304d0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
304e0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 304f0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
30500 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
30510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30520 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30530 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
30540 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
30550 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
30560 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
30570 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 30580 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 5d llVs2017LogFile] 30590 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 305a0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 305b0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
305c0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 305d0 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 allVs2017LogFile 305e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 305f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 30600 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 30610 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 30620 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 proc runSQLiteTe 30630 73 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 stFilesEpilogue 30640 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 30650 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 30660 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 30670 73 74 6f 6d 20 66 69 6c 65 73 20 65 70 69 6c 6f stom files epilo 30680 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 gue if the main 30690 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 one has been.. 306a0 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 # skip 306b0 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ped... #.. 306c0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 306d0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c exists ::no(epil 306e0 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 ogue.eagle)]} th 306f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 en {.. up 30700 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 level 1 {.. 30710 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 30720 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 mplain \.. 30730 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e testUnin 30740 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 stallVs2017LogFi 30750 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c le testUninstall 30760 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5c 0d Vs2015LogFile \. 30770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 30780 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 30790 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 13LogFile testUn 307a0 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 installVs2012Log 307b0 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 307c0 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 testUninst 307d0 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 307e0 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 307f0 32 30 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 2008LogFile \.. 30800 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes 30810 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 tUninstallVs2005 30820 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 LogFile testInst 30830 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 allVs2017LogFile 30840 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 30850 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 testInstallVs2 30860 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 015LogFile testI 30870 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 30880 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 30890 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c testInstall 308a0 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 65 Vs2012LogFile te 308b0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c stInstallVs2010L 308c0 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 ogFile \.. 308d0 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 testInst 308e0 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 308f0 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 30900 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 20 05LogFile.... 30910 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 30920 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 complain \.. 30930 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77 northw 30940 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 74 indEfDbFile test 30950 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20 LinqOutFile \.. 30960 20 20 20 20 20 20 20 20 20 20 20 20 20 77 61 6c wal 30970 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 DbFile nonWalDbF 30980 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ile.... 30990 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 309a0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 309b0 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 69 testEf6ExeFi 309c0 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 le testLinqExeFi 309d0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 309e0 20 20 20 20 74 65 73 74 45 78 65 46 69 6c 65 20 testExeFile 309f0 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 30a00 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 Ef6DllFile \.. 30a10 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 syst 30a20 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 emDataSQLiteLinq 30a30 44 6c 6c 46 69 6c 65 20 73 79 73 74 65 6d 44 61 DllFile systemDa 30a40 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 taSQLiteDllFile 30a50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 30a60 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 sqliteDesignerD 30a70 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c 65 72 llFile installer 30a80 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 ExeFile \.. 30a90 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79 46 entityF 30aa0 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d rameworkDllFile. 30ab0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 30ac0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 30ad0 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 proc runSQLit 30ae0 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d eTestEpilogue {} 30af0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 30b00 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 30b10 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 running our cust 30b20 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 om epilogue if t 30b30 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 he main one has 30b40 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 been.. # 30b50 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 skipped... 30b60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 30b70 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 30b80 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 :no(epilogue.eag 30b90 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 le)]} then {.. 30ba0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 30bb0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 30bc0 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 30bd0 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 ually ended (now 30be0 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 30bf0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
30c00 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
30c10 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
30c20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
30c30 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
30c40 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20   tests ended at
30c50 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
30c60 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
30c70 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
30c80 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
30c90 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
30ca0 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 69 6c  : Load the "epil
30cb0 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 65 72  ogue" custom per
30cc0 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
30cd0 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 20 20  -host test..
30ce0 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74      #       sett
30cf0 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
30d00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
30d10 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
30d20 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
30d30 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 30d40 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65 5d 0d nnel .epilogue]. 30d50 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 30d60 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 # BUGFIX: 30d70 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 Before checking 30d80 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 the final resour 30d90 63 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 ces in use by SQ 30da0 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 Lite, make.. 30db0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75 # su 30dc0 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 re both of the P 30dd0 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 RAGMA related di 30de0 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 rectory names ar 30df0 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 e freed... 30e00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 30e10 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 30e20 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 tories$::test_c
30e30 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20  hannel true....
30e40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
30e50 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72    # NOTE: Also r
30e60 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72  eport the resour
30e70 63 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72  ce usage after r
30e80 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73  unning the tests
30e90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
30ea0 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69        reportSQLi
30eb0 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74  teResources $::t 30ec0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 30ed0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 30ee0 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 # NOTE: Report 30ef0 20 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 the critical ha 30f00 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65 ndle counts afte 30f10 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 r running the te 30f20 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 30f30 0a 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69 . getSQLi 30f40 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 teHandleCounts$
30f50 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
30f60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
30f70 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
30f80 6e 65 63 65 73 73 61 72 79 2c 20 64 69 73 61 62  necessary, disab
30f90 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  le shared-cache
30fa0 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  mode now...
30fb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
30fc0 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
30fd0 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65 5d  ion sharedCache]
30fe0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
30ff0 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65 64      enableShared
31000 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63 68  Cache \$::test_ch
31010 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20  annel false..
31020 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
31030 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23  .    }.....    #
31040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31080 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20  ##########..
31090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
310a0 23 23 23 23 23 23 23 23 23 23 23 23 23 20 45 4e  ############# EN
310b0 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23  D Eagle ONLY ###
310c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
310d0 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20  ###########..
310e0 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
310f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31120 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..
31130 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  }....  #..  # NO
31140 54 45 3a 20 53 61 76 65 20 74 68 65 20 6e 61 6d  TE: Save the nam
31150 65 20 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f  e of the directo
31160 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
31170 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20  is file...  #..
31180 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
31190 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  ts common_direct
311a0 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
311b0 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72    set common_dir
311c0 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
311d0 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70  name [info scrip
311e0 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  t]]..  }....  #.
311f0 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69  .  # NOTE: Provi
31200 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  de the System.Da
31210 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 20 70  ta.SQLite test p
31220 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e  ackage to the in
31230 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d  terpreter...  #.
31240 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69  .  package provi
31250 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  de System.Data.S
31260 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a  QLite.Test 1.0..
31270 7d 0d 0a                                         }..