System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 4c534206454157580e9ba9eb373d6785d2a7999e:

• File lib/System.Data.SQLite/common.eagle — part of check-in [550a609491] at 2018-02-26 21:31:22 on branch trunk — Make the (new) SetConfigurationOption tests more robust and get them passing again. (user: mistachkin size: 195912)

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 23 0d 0a 20 20 20 20  .....    #..
16a0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
16b0: 63 65 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75  cedure is only u
16c0: 73 65 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20  sed when adding
16d0: 73 68 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e  shimmed test con
16e0: 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23  straints...    #
16f0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
1700: 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d  ildClrVersion {}
1710: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   {..      if {[i
1720: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
1730: 74 5f 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e  t_clr] && [strin
1740: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 1750: 5f 63 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 _clr] > 0} then 1760: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1770: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 1780: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 1790: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 test version for 17a0: 20 74 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68 the CLR. If th 17b0: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 is variable.. 17c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 17d0: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66 not set, the def 17e0: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 ault value will 17f0: 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 be based on whet 1800: 68 65 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20 her or not.. 1810: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 1820: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 e has been compi 1830: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 led against the 1840: 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 CLR v2.0 or CLR 1850: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 v4.0... # 1860: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 1870: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20$::test_clr..
1880: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1890: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18a0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
18b0: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  f Eagle has been
18c0: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
18d0: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20  t the CLR v4.0.
18e0: 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20   If so,..
18f0: 20 23 20 20 20 20 20 20 20 6a 75 73 74 20 75 73   #       just us
1900: 65 20 74 68 61 74 20 43 4c 52 20 76 65 72 73 69  e that CLR versi
1910: 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20  on.  Otherwise,
1920: 75 73 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20  use the version
1930: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20  for the..
1940: 20 23 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e   #       CLR v2.
1950: 30 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d  0.  If another m
1960: 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62  ajor [incompatib
1970: 6c 65 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  le] version of t
1980: 68 65 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20  he CLR..
1990: 23 20 20 20 20 20 20 20 69 73 20 72 65 6c 65 61  #       is relea
19a0: 73 65 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20  sed, this check
19b0: 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20  will have to be
19c0: 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65  changed.  The de
19d0: 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23  fault..        #
19e0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76         version v
19f0: 61 6c 75 65 20 66 6f 72 20 61 20 70 61 72 74 69  alue for a parti
1a00: 63 75 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f  cular CLR versio
1a10: 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64  n may be overrid
1a20: 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  den..        #
1a30: 20 20 20 20 20 62 79 20 73 65 74 74 69 6e 67 20       by setting
1a40: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
1a50: 62 6c 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24  ble "test_clr_v$1a60: 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d X", where "$X" m
1a70: 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ay..        #
1a80: 20 20 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20      [currently]
1a90: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
1aa0: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
1ab0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
1ac0: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
1ad0: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
1ae0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1af0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1b00: 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d  s ::test_clr_v4]
1b10: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1b20: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1b30: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f  gth $::test_clr_ 1b40: 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d v4] > 0} then {. 1b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 1b60: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1b70: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1b80: 69 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69 ified test versi 1b90: 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 on for the CLR v 1ba0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 4.0... 1bb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1bc0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
1bd0: 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20  clr_v4..
1be0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1bf0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1c00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55         # NOTE: U
1c10: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74  se the default t
1c20: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  est version for
1c30: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
1c40: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1c50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1c60: 20 34 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f   4.0.30319; # TO
1c70: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
1c80: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
1c90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ca0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1cb0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
1cc0: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63   exists ::test_c
1cd0: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
1ce0: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
1cf0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1d00: 74 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 t_clr_v2] > 0} t 1d10: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1d30: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 1d40: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 1d50: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 version for the 1d60: 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 CLR v2.0... 1d70: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1d80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1d90: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20  :test_clr_v2..
1da0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1dd0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
1de0: 61 75 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f  ault test versio
1df0: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  n for the CLR v2
1e00: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...
1e10: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1e20: 72 65 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37  return 2.0.50727
1e30: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22  ; # TODO: Good "
1e40: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c  fallback" defaul
1e50: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  t?..          }.
1e60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1e70: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1e80: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
1e90: 59 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20  Years {} {..
1ea0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1eb0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69  E: See if the li
1ec0: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73  st of test years
1ed0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
1ee0: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72  dden by the user
1ef0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1f00: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
1f10: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
1f20: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1f30: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1f40: 65 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c  est_years] && [l
1f50: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79  length $::test_y 1f60: 65 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ears] > 0} then 1f70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1f80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 1f90: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 1fa0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 list of test yea 1fb0: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rs... #.. 1fc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
1fd0: 3a 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20  ::test_years..
1fe0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1ff0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2000: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
2010: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66   default list of
2020: 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65   test years (i.e
2030: 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20  . all)...
2040: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
2050: 72 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30  rn [list 2005 20
2060: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31  08 2010 2012 201
2070: 33 20 32 30 31 35 20 32 30 31 37 5d 0d 0a 20 20  3 2015 2017]..
2080: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
2090: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
20a0: 6c 64 4e 65 74 46 78 20 7b 7d 20 7b 0d 0a 20 20  ldNetFx {} {..
20b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
20c0: 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20  OTE: See if the
20d0: 74 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77  test .NET Framew
20e0: 6f 72 6b 20 73 65 74 74 69 6e 67 20 68 61 73 20  ork setting has
20f0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20  been overridden
2100: 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  by..      #
2110: 20 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e    the user (e.g.
2120: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   on the command
2130: 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d  line)...      #.
2140: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
2150: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e   exists ::test_n
2160: 65 74 5f 66 78 5d 20 26 26 20 5c 0d 0a 20 20 20  et_fx] && \..
2170: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2180: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 65  ength $::test_ne 2190: 74 5f 66 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 t_fx] > 0} then 21a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 21b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 21c0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 21d0: 74 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 test .NET Framew 21e0: 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ork... #. 21f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 2200: 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 0d 0a$::test_net_fx..
2210: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2220: 20 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72          set year
2230: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d   [getBuildYear].
2240: 0a 20 20 20 20 20 20 20 20 73 65 74 20 79 65 61  .        set yea
2250: 72 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64  rVarName [append
2260: 41 72 67 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f  Args ::test_net_
2270: 66 78 5f 20 24 79 65 61 72 5d 0d 0a 0d 0a 20 20  fx_ $year].... 2280: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 2290: 65 78 69 73 74 73 20 24 79 65 61 72 56 61 72 4e exists$yearVarN
22a0: 61 6d 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ame] && \..
22b0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
22c0: 65 6e 67 74 68 20 5b 73 65 74 20 24 79 65 61 72  ength [set $year 22d0: 56 61 72 4e 61 6d 65 5d 5d 20 3e 20 30 7d 20 74 VarName]] > 0} t 22e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 22f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 2300: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 2310: 65 63 69 66 69 65 64 20 74 65 73 74 20 2e 4e 45 ecified test .NE 2320: 54 20 46 72 61 6d 65 77 6f 72 6b 2c 20 62 61 73 T Framework, bas 2330: 65 64 20 6f 6e 20 74 68 65 20 62 75 69 6c 64 0d ed on the build. 2340: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 2350: 20 20 20 79 65 61 72 2e 0d 0a 20 20 20 20 20 20 year... 2360: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2370: 20 72 65 74 75 72 6e 20 5b 73 65 74 20 24 79 65 return [set$ye
2380: 61 72 56 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20  arVarName]..
2390: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
23a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c       # NOTE: Fal
23c0: 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 22 77 65  lback to the "we
23d0: 6c 6c 20 6b 6e 6f 77 6e 22 20 2e 4e 45 54 20 46  ll known" .NET F
23e0: 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e  ramework version
23f0: 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20   that..
2400: 20 23 20 20 20 20 20 20 20 69 73 20 6d 6f 73 74   #       is most
2410: 20 63 6c 6f 73 65 6c 79 20 61 73 73 6f 63 69 61   closely associa
2420: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
2430: 63 75 6c 61 72 20 76 65 72 73 69 6f 6e 20 6f 66  cular version of
2440: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
2450: 20 20 20 20 56 69 73 75 61 6c 20 53 74 75 64 69      Visual Studi
2460: 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  o...          #.
2470: 0a 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63  .          switc
2480: 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 79 65 61  h -exact -- $yea 2490: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 r {.. 24a0: 20 32 30 30 35 20 7b 0d 0a 20 20 20 20 20 20 20 2005 {.. 24b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 return ne 24c0: 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 tFx20.. 24d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 24e0: 20 20 32 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 2008 {.. 24f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 2500: 65 74 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 etFx35.. 2510: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2520: 20 20 20 32 30 31 30 20 7b 0d 0a 20 20 20 20 20 2010 {.. 2530: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 2540: 6e 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 netFx40.. 2550: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2560: 20 20 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 20 2012 {.. 2570: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 2580: 20 6e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 netFx45.. 2590: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 25a0: 20 20 20 20 20 32 30 31 33 20 7b 0d 0a 20 20 20 2013 {.. 25b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 25c0: 6e 20 6e 65 74 46 78 34 35 31 3b 20 23 20 54 4f n netFx451; # TO 25d0: 44 4f 3a 20 4f 72 20 22 6e 65 74 46 78 34 35 32 DO: Or "netFx452 25e0: 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "?.. 25f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 }.. 2 2600: 30 31 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 015 {.. 2610: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 return netF 2620: 78 34 36 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 20 x46; # TODO: Or 2630: 22 6e 65 74 46 78 34 36 31 22 20 2f 20 22 6e 65 "netFx461" / "ne 2640: 74 46 78 34 36 32 22 3f 0d 0a 20 20 20 20 20 20 tFx462"?.. 2650: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2660: 20 20 20 20 20 32 30 31 37 20 7b 0d 0a 20 20 20 2017 {.. 2670: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 2680: 6e 20 6e 65 74 46 78 34 37 3b 20 23 20 54 4f 44 n netFx47; # TOD 2690: 4f 3a 20 4f 72 20 22 6e 65 74 46 78 34 37 31 22 O: Or "netFx471" 26a0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ?.. } 26b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 65 .. de 26c0: 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 fault {.. 26d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 return ne 26e0: 74 46 78 33 35 3b 20 23 20 54 4f 44 4f 3a 20 47 tFx35; # TODO: G 26f0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 ood "fallback" d 2700: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 efault?.. 2710: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2720: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 2730: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 2740: 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 ... #.. # 2750: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 2760: 64 75 72 65 20 73 68 6f 75 6c 64 20 72 65 74 75 dure should retu 2770: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 rn non-zero if t 2780: 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 74 65 he configured te 2790: 73 74 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 st.. # 27a0: 70 6c 61 74 66 6f 72 6d 20 69 73 20 6d 6f 73 74 platform is most 27b0: 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 likely the defa 27c0: 75 6c 74 20 66 6f 72 20 74 68 69 73 20 6d 61 63 ult for this mac 27d0: 68 69 6e 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 hine... #.. 27e0: 20 20 70 72 6f 63 20 69 73 44 65 66 61 75 6c 74 proc isDefault 27f0: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 BuildPlatform { 2800: 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d {verbose true} } 2810: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 2820: 20 20 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 # NOTE: Runni 2830: 6e 67 20 6f 6e 20 57 6f 57 36 34 20 69 73 20 6e ng on WoW64 is n 2840: 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 ever the default 2850: 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 platform... 2860: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 2870: 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d isRunningWoW64]} 2880: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2890: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
28a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
28b0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 28c0: 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 28d0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 "---- de 28e0: 74 65 63 74 65 64 20 6e 6f 6e 2d 64 65 66 61 75 tected non-defau 28f0: 6c 74 20 70 6c 61 74 66 6f 72 6d 20 28 57 6f 57 lt platform (WoW 2900: 36 34 29 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 64)\n".. 2910: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.... ret 2920: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 urn false.. 2930: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 2940: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 2950: 73 20 68 61 73 20 61 20 67 6f 6f 64 20 63 68 61 s has a good cha 2960: 6e 63 65 20 6f 66 20 62 65 69 6e 67 20 74 68 65 nce of being the 2970: 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 default platfor 2980: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 2990: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
29a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
29b0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 29c0: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 64 65 74 hannel "---- det 29d0: 65 63 74 65 64 20 64 65 66 61 75 6c 74 20 70 6c ected default pl 29e0: 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20 20 20 20 20 atform\n".. 29f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 2a00: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d 0d 0a rn true.. }.. 2a10: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 2a20: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 6e uildPlatform { n 2a30: 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 ative } {.. 2a40: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 2a50: 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 s ::test_platfor 2a60: 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 m] && \.. 2a70: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 2a80: 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f h$::test_platfo
2a90: 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
2aa0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2ab0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
2ac0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65  the specified te
2ad0: 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 49 66  st platform.  If
2ae0: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
2af0: 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 20 20  s not set,..
2b00: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2b10: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
2b20: 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ll be based on t
2b30: 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69  he machine archi
2b40: 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  tecture...
2b50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
2b60: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  urn [expr {$nati 2b70: 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70 6c 61 ve ?$::test_pla
2b80: 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20  tform : ""}]..
2b90: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
2ba0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
2bb0: 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 5c 0d  t_machine] && \.
2bc0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
2bd0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 2be0: 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30 7d 20 t_machine] > 0} 2bf0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2c00: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2c10: 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 E: For native bu 2c20: 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 ilds, return the 2c30: 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 platform name c 2c40: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d orresponding to. 2c50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2c60: 20 74 68 65 20 74 65 73 74 20 6d 61 63 68 69 6e the test machin 2c70: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 e architecture; 2c80: 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 otherwise, retur 2c90: 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 n an empty.. 2ca0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69 # stri 2cb0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ng... #.. 2cc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 2cd0: 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 expr {.. 2ce0: 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63$native ? [mac
2cf0: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24  hineToPlatform $2d00: 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 ::test_machine] 2d10: 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d : "".. }] 2d20: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 2d30: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 2d40: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma 2d50: 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d chine)]} then {. 2d60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2d70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 # NOTE: For 2d80: 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 native builds, r 2d90: 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f eturn the platfo 2da0: 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f rm name correspo 2db0: 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 nding to.. 2dc0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6d 61 # the ma 2dd0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 chine architectu 2de0: 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 re; otherwise, r 2df0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2e00: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 2e10: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 2e20: 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 n [expr {.. 2e30: 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b$native ? [
2e40: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
2e50: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor 2e60: 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20 22 22 m(machine)] : "" 2e70: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 .. }].. 2e80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 2e90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2ea0: 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 # NOTE: No mach 2eb0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 ine architecture 2ec0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 is available, r 2ed0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2ee0: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 2ef0: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d # It is im 2f00: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 portant to retur 2f10: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 2f20: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 g here because t 2f30: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 2f40: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 result of th 2f50: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 is procedure may 2f60: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 be used with [f 2f70: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 ile join]... 2f80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2f90: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 2fa0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 2fb0: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f proc getBuildCo 2fc0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d 20 7b nfiguration {} { 2fd0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2fe0: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 # NOTE: See if 2ff0: 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61 74 69 the "configurati 3000: 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61 73 20 on" setting has 3010: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 been overridden 3020: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 by the.. # 3030: 20 20 20 20 20 20 75 73 65 72 20 28 65 2e 67 2e user (e.g. 3040: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 on the command 3050: 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68 65 6c line). This hel 3060: 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61 63 74 ps control exact 3070: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 3080: 20 20 77 68 69 63 68 20 73 65 74 20 6f 66 20 62 which set of b 3090: 69 6e 61 72 69 65 73 20 77 65 20 61 72 65 20 74 inaries we are t 30a0: 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74 68 6f esting (i.e. tho 30b0: 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68 65 0d se built in the. 30c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 . # " 30d0: 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 Debug" or "Relea 30e0: 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 se" build config 30f0: 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f 20 6f urations). To o 3100: 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a 20 20 verride this.. 3110: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 # valu 3120: 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e e via the comman 3130: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 d line, enter a 3140: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 command similar 3150: 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20 20 20 to one of.. 3160: 20 23 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c # the fol 3170: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f lowing (all on o 3180: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 3190: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 31a0: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 31b0: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 31c0: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 31d0: 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22 0d 0a uration Debug".. 31e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 31f0: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 3200: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 3210: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 3220: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 3230: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 3240: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 3250: 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73 65 22 uration Release" 3260: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3270: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 -file .\path\t 3280: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 o\all.eagle.. 3290: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 #.. # 32a0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 EagleShell.e 32b0: 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c xe -file .\path\ 32c0: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d 70 72 to\all.eagle -pr 32d0: 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 eTest.. # 32e0: 20 20 20 20 20 20 20 22 75 6e 73 65 74 20 2d 6e "unset -n 32f0: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 63 ocomplain test_c 3300: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d 0a 20 onfiguration".. 3310: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 3320: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 3330: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 3340: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ion] && \.. 3350: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 3360: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 gth$::test_conf
3370: 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 7d 20  iguration] > 0}
3380: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
3390: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
33a0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69  E: Use the speci
33b0: 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 69 67  fied test config
33c0: 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 65  uration.  The de
33d0: 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 65 64  fault value used
33e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
33f0: 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 69 61    for this varia
3400: 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c 6c 79  ble is typically
3410: 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73   "Release", as s
3420: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a  et by the test..
3430: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3440: 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20  suite itself...
3450: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3460: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74    return $::test 3470: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a _configuration.. 3480: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 3490: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 34a0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 # NOTE: Norma 34b0: 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 lly, we will nev 34c0: 65 72 20 68 69 74 20 74 68 69 73 20 63 61 73 65 er hit this case 34d0: 20 62 65 63 61 75 73 65 20 74 68 65 20 76 61 6c because the val 34e0: 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 ue of the.. 34f0: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 3500: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 configuration va 3510: 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 riable is always 3520: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 3530: 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 suite.. 3540: 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 # itself; 3550: 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 however, it can 3560: 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 be overridden us 3570: 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f ing the unset co 3580: 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 mmand.. # 3590: 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 from the 35a0: 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 -preTest option 35b0: 74 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 74 to the test suit 35c0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 35d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
35e0: 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28  :eagle_platform(
35f0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a  configuration)..
3600: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3610: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
3620: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
3630: 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ns {} {..      #
3640: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
3650: 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74 20  See if the list
3660: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
3670: 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 6e 20  ations has been
3680: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20  overridden by..
3690: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
36a0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
36b0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
36c0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
36d0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
36e0: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
36f0: 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c 0d 0a  urations] && \..
3700: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67            [lleng
3710: 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  th $::test_confi 3720: 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30 7d 20 gurations] > 0} 3730: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3740: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3750: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 3760: 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 fied list of tes 3770: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 t configurations 3780: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 3790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
37a0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
37b0: 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ons..      } els
37c0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
37d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
37e0: 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default
37f0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e  list of test con
3800: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20  figurations...
3810: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3820: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 44 65   return [list De
3830: 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a 20 20  bug Release]..
3840: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
3850: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
3860: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 20  ldBaseDirectory
3870: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
3880: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67       # NOTE: Fig
3890: 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 73 65  ure out the base
38a0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65   directory where
38b0: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 73 20   all the builds
38c0: 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20  should be..
38d0: 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 65 64   #       located
38e0: 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20  .  This will be
38f0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68  the directory th
3900: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the
3910: 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 23 20  actual..      #
3920: 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 74 70        build outp
3930: 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 65 2e  ut directory (e.
3940: 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 62 69  g. parent of "bi
3950: 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  n")...      #..
3960: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
3970: 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61  xists ::build_ba
3980: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  se_directory] &&
3990: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
39a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 39b0: 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 build_base_direc 39c0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 39d0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 39e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 39f0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 3a00: 65 20 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 e build base dir 3a10: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 3a20: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 3a30: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 3a40: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 refore, use it v 3a50: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 3a60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 3a70: 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 urn$::build_bas
3a80: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  e_directory..
3a90: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
3aa0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d  fo exists ::comm
3ab0: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  on_directory] &&
3ac0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
3ad0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 3ae0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 3af0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 3b00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3b10: 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 # NOTE: Next, 3b20: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 fallback to the 3b30: 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69 72 65 grandparent dire 3b40: 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e 65 ctory of the one 3b50: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3b60: 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 containing thi 3b70: 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22 63 6f s file (i.e. "co 3b80: 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 69 66 mmon.eagle"), if 3b90: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... 3ba0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3bb0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 return [file dir 3bc0: 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 name [file dirna 3bd0: 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 me$::common_dir
3be0: 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 20 20  ectory]]..
3bf0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
3c00: 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d 20 26  exists ::path] &
3c10: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
3c20: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 3c30: 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68 65 6e :path] > 0} then 3c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 3c50: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 3c60: 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63 6b inally, fallback 3c70: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 to the parent d 3c80: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 irectory of the 3c90: 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20 20 20 EagleTest.. 3ca0: 20 20 20 23 20 20 20 20 20 20 20 70 61 74 68 2e # path. 3cb0: 20 20 54 68 65 20 45 61 67 6c 65 54 65 73 74 20 The EagleTest 3cc0: 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e 74 65 package guarante 3cd0: 65 73 20 74 68 61 74 20 74 68 69 73 20 76 61 72 es that this var 3ce0: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 iable.. # 3cf0: 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 73 will be s 3d00: 65 74 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 et to the direct 3d10: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t 3d20: 68 65 20 66 69 72 73 74 20 66 69 6c 65 20 74 6f he first file to 3d30: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3d40: 20 20 65 78 65 63 75 74 65 20 74 68 65 20 5b 72 execute the [r 3d50: 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20 unTestPrologue] 3d60: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 script library p 3d70: 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 rocedure... 3d80: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 3d90: 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 turn [file dirna 3da0: 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 me$::path]..
3db0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
3dc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
3dd0: 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 68 20  # NOTE: No path
3de0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  is available, re
3df0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
3e00: 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f 69 6e  ring.  This poin
3e10: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
3e20: 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65     should not be
3e30: 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 20 20   reached...
3e40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3e50: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d  turn ""..      }
3e60: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3e70: 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 54 65  proc getSQLiteTe
3e80: 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 7b 0d  stDataPath {} {.
3e90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3ea0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
3eb0: 75 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ut the directory
3ec0: 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 74   where all the t
3ed0: 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 20 73  est data files s
3ee0: 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 20 20  hould..      #
3ef0: 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 64 2e       be located.
3f00: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
3f10: 20 74 68 65 20 22 64 61 74 61 22 20 64 69 72 65   the "data" dire
3f20: 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 74 68  ctory beneath th
3f30: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
3f40: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
3f50: 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 61 6c  ining the actual
3f60: 20 74 65 73 74 20 73 63 72 69 70 74 73 2e 0d 0a   test scripts...
3f70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
3f80: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  eturn [file join
3f90: 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d 0d 0a   $::path data].. 3fa0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 3fb0: 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 oc isRunningWoW6 3fc0: 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 4 {} {.. #. 3fd0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 3fe0: 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75 73 65 or now, just use 3ff0: 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 74 65 the existing te 4000: 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f st constraint fo 4010: 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20 20 20 r detecting.. 4020: 20 20 20 23 20 20 20 20 20 20 20 61 20 57 6f 57 # a WoW 4030: 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 64 process... 4040: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 4050: 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 rn [haveConstrai 4060: 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20 20 7d nt wow64].. } 4070: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 4080: 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c MixedModeAssembl 4090: 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 y { fileName {va 40a0: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 rName ""} } {.. 40b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 40c0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d 61 6b NOTE: First, mak 40d0: 65 20 73 75 72 65 20 74 68 65 20 74 65 73 74 20 e sure the test 40e0: 73 75 69 74 65 20 69 6e 66 72 61 73 74 72 75 63 suite infrastruc 40f0: 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 ture is allowed 4100: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 4110: 20 20 75 73 65 20 74 68 65 20 5b 65 78 65 63 5d use the [exec] 4120: 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 command... 4130: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 4140: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 4150: 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69 6e 66 (exec)] && ![inf 4160: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 4170: 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e 20 7b rFlags)]} then { 4180: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4190: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 41a0: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 the location of 41b0: 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72 65 73 CorFlags is pres 41c0: 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76 69 72 ent in the envir 41d0: 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 onment,.. 41e0: 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 3b # use it; 41f0: 20 6f 74 68 65 72 77 69 73 65 20 61 73 73 75 6d otherwise assum 4200: 65 20 69 74 20 69 73 20 69 6e 20 74 68 65 20 50 e it is in the P 4210: 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ATH... #. 4220: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 72 . set cor 4230: 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d 0a 20 Flags [expr {.. 4240: 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 [info e 4250: 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f 72 46 xists ::env(CorF 4260: 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 lags)] ?$::env(
4270: 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 6f 72  CorFlags) : "Cor
4280: 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 20 20  Flags"..
4290: 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  }]....        #.
42a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
42b0: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63   Attempt to exec
42c0: 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f 6e 20  ute CorFlags on
42d0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
42e0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
42f0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
4300: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
4310: 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c 61 67  exec -- $corFlag 4320: 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 s [file nativena 4330: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 me$fileName]..
4340: 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d 20 3d         } exec] =
4350: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
4360: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4370: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72      # NOTE: If r
4380: 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20  equested by our
4390: 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 74 20  caller, attempt
43a0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
43b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
43c0: 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72      platform for
43d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
43e0: 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20  ile as well...
43f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4400: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
4410: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 4420: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 4430: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 4440: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 4450: 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c 61 74 : Store the plat 4460: 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61 6d 65 form in the name 4470: 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68 d variable in th 4480: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 e.. # 4490: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f context o 44a0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 f our caller... 44b0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 44c0: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 upvar 44d0: 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61 74 66 1$varName platf
44e0: 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  orm....
44f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
4500: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
4510: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
4520: 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68   PE line from th
4530: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20  e captured..
4540: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4550: 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 69 73  output.  If this
4560: 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 32 22   value is "PE32"
4570: 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 68 65   or "PE32+", the
4580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
4590: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66        assembly f
45a0: 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 6f 72  ile is 32-bit or
45b0: 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 63 74   64-bit, respect
45c0: 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  ively;..
45d0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65      #       othe
45e0: 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 65 20  rwise, its type
45f0: 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20  is unknown...
4600: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
4610: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74          set patt
4620: 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 20 20  ern {^PE
4630: 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b 29 5c  : (PE32|PE32\+)\
4640: 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s+$}.... 4650: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 if {[regexp 4660: 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 -line --$patter
4670: 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 70 65  n $exec dummy pe 4680: 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 32]} then {.. 4690: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 46a0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 48 41 # HA 46b0: 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74 63 68 CK: This [switch 46c0: 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 33 ] assumes that 3 46d0: 32 2d 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 2-bit executable 46e0: 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 s are.. 46f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 # alw 4700: 61 79 73 20 78 38 36 20 61 6e 64 20 74 68 61 74 ays x86 and that 4710: 20 36 34 2d 62 69 74 20 65 78 65 63 75 74 61 62 64-bit executab 4720: 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73 0d 0a les are always.. 4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 4740: 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20 20 20 x64... 4750: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 4760: 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 switc 4770: 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70 65 33 h -exact --$pe3
4780: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2 {..
4790: 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 20 20       PE32 {..
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
47b0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 6e 33  et platform Win3
47c0: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  2..
47d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
47e0: 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d 0a 20        PE32+ {..
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4800: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 78 36   set platform x6
4810: 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  4..
4820: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
4830: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d        default {.
4840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
4850: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
4860: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..
4870: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
4880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
4890: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
48b0: 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20  platform ""..
48c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
48d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
48e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
48f0: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
4900: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
4910: 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 72 6f   ILONLY line fro
4920: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a  m the captured..
4930: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
4940: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68    output.  If th
4950: 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  is value is zero
4960: 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  , the specified
4970: 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 20 20  file must..
4980: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
4990: 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  a mixed-mode ass
49a0: 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 73 65  embly; otherwise
49b0: 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  , it contains on
49c0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ly..          #
49d0: 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 63 6f        managed co
49e0: 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 20 20  mponents...
49f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4a00: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e    set pattern {^
4a10: 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 7c 31  ILONLY    : (0|1
4a20: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20  )\s+$}.... 4a30: 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 if {![regexp 4a40: 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 -line --$patte
4a50: 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 69  rn $exec dummy i 4a60: 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a lOnly]} then {.. 4a70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 4a80: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 rn false.. 4a90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 4aa0: 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d if {!$ilOnly}
4ab0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4ac0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
4ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
4ae0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
4af0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
4b00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
4b10: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 63 61  he test suite ca
4b20: 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 5d 20  nnot use [exec]
4b30: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  or execution of
4b40: 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20  CorFlags..
4b50: 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 2c 20  #       failed,
4b60: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d 0a 20  return false...
4b70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
4b80: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
4b90: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
4ba0: 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46  etNativeLibraryF
4bb0: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20  ileNamesOnly {}
4bc0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
4bd0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c    # NOTE: First,
4be0: 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 6c 69   check if the li
4bf0: 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c 69 62  st of native lib
4c00: 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 73 20  rary file names
4c10: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20  has been..
4c20: 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79  #       manually
4c30: 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20   overridden...
4c40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
4c50: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
4c60: 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 5f 66  native_library_f
4c70: 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 5c 0d  ile_names] && \.
4c80: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e  .          [llen
4c90: 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f 6c 69  gth $::native_li 4ca0: 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 brary_file_names 4cb0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 4cc0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4cd0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 69 # NOTE: The li 4ce0: 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c 69 62 st of native lib 4cf0: 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 rary file names 4d00: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 4d10: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 den;.. # 4d20: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 4d30: 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d use it verbatim 4d40: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 4d50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
4d60: 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 5f 66  native_library_f
4d70: 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20  ile_names..
4d80: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 57 69   } elseif {[isWi
4d90: 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ndows]} then {..
4da0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4db0: 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72     # NOTE: Other
4dc0: 77 69 73 65 2c 20 6f 6e 20 57 69 6e 64 6f 77 73  wise, on Windows
4dd0: 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 68 65  , always use the
4de0: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 6e 61   default file na
4df0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  me..        #
4e00: 20 20 20 20 22 73 71 6c 69 74 65 33 2e 64 6c 6c      "sqlite3.dll
4e10: 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
4e20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
4e30: 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d  ist sqlite3.dll]
4e40: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
4e50: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4e60: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68       # NOTE: Oth
4e70: 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 62  erwise, return b
4e80: 6f 74 68 20 74 68 65 20 67 65 6e 65 72 69 63 20  oth the generic
4e90: 50 4f 53 49 58 20 66 69 6c 65 20 6e 61 6d 65 20  POSIX file name
4ea0: 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20  and the..
4eb0: 20 23 20 20 20 20 20 20 20 4d 61 63 20 4f 53 20   #       Mac OS
4ec0: 58 20 66 69 6c 65 20 6e 61 6d 65 2c 20 73 69 6e  X file name, sin
4ed0: 63 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 75 72  ce we do not cur
4ee0: 72 65 6e 74 6c 79 20 68 61 76 65 20 61 6e 20 65  rently have an e
4ef0: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  asy..        #
4f00: 20 20 20 20 20 77 61 79 20 74 6f 20 64 65 74 65       way to dete
4f10: 63 74 20 77 68 69 63 68 20 6f 66 20 74 68 6f 73  ct which of thos
4f20: 65 20 70 6c 61 74 66 6f 72 6d 73 20 77 65 20 61  e platforms we a
4f30: 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a  re running on...
4f40: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4f50: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list
4f60: 6c 69 62 73 71 6c 69 74 65 33 2e 64 79 6c 69 62  libsqlite3.dylib
4f70: 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f 5d 0d   libsqlite3.so].
4f80: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4f90: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
4fa0: 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46  InteropAssemblyF
4fb0: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20  ileNamesOnly {}
4fc0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
4fd0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c    # NOTE: First,
4fe0: 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 6c 69   check if the li
4ff0: 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 61 73  st of interop as
5000: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65  sembly file name
5010: 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  s has been..
5020: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c    #       manual
5030: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a  ly overridden...
5040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
5050: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
5060: 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 6d 62  ::interop_assemb
5070: 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26  ly_file_names] &
5080: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
5090: 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e 74 65 72  llength $::inter 50a0: 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 op_assembly_file 50b0: 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 _names] > 0} the 50c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 50d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 50e0: 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 The list of inte 50f0: 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c rop assembly fil 5100: 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65 65 6e e names has been 5110: 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 overridden;.. 5120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 5130: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 erefore, use it 5140: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 verbatim... 5150: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 5160: 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72 6f 70 5f turn$::interop_
5170: 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61  assembly_file_na
5180: 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  mes..      } els
5190: 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d  eif {[isWindows]
51a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
51b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
51c0: 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20  OTE: Otherwise,
51d0: 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c 77 61  on Windows, alwa
51e0: 79 73 20 75 73 65 20 74 68 65 20 64 65 66 61 75  ys use the defau
51f0: 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a 20 20  lt file name..
5200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 53        #       "S
5210: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c  QLite.Interop.dl
5220: 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l"...        #..
5230: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
5240: 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 6e 74 65  list SQLite.Inte
5250: 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 20  rop.dll]..
5260: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
5270: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
5280: 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20  OTE: Otherwise,
5290: 72 65 74 75 72 6e 20 62 6f 74 68 20 74 68 65 20  return both the
52a0: 67 65 6e 65 72 69 63 20 50 4f 53 49 58 20 66 69  generic POSIX fi
52b0: 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 0d  le name and the.
52c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
52d0: 20 4d 61 63 20 4f 53 20 58 20 66 69 6c 65 20 6e   Mac OS X file n
52e0: 61 6d 65 2c 20 73 69 6e 63 65 20 77 65 20 64 6f  ame, since we do
52f0: 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 68   not currently h
5300: 61 76 65 20 61 6e 20 65 61 73 79 0d 0a 20 20 20  ave an easy..
5310: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 61 79       #       way
5320: 20 74 6f 20 64 65 74 65 63 74 20 77 68 69 63 68   to detect which
5330: 20 6f 66 20 74 68 6f 73 65 20 70 6c 61 74 66 6f   of those platfo
5340: 72 6d 73 20 77 65 20 61 72 65 20 72 75 6e 6e 69  rms we are runni
5350: 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ng on...
5360: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
5370: 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c 69 74  n [list libSQLit
5380: 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 62 20  e.Interop.dylib
5390: 6c 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  libSQLite.Intero
53a0: 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  p.so]..      }..
53b0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
53c0: 6f 63 20 67 65 74 43 6f 72 65 45 78 74 65 6e 73  oc getCoreExtens
53d0: 69 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  ionBinaryFileNam
53e0: 65 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 22 7d  e { {default ""}
53f0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
5400: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 6f 72  fileName [getCor
5410: 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d  eBinaryFileName]
5420: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66  ....      if {[f
5430: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 5440: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 5450: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 return$f
5460: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d  ileName..      }
5470: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
5480: 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 7d   $default.. } 5490: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 54a0: 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 7b BuildAvailable { 54b0: 20 6e 61 74 69 76 65 20 64 69 72 65 63 74 6f 72 native director 54c0: 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d y {varName ""} } 54d0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 54e0: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 54f0: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali 5500: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 fied file name f 5510: 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 or the primary a 5520: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 ssembly.. # 5530: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e containin 5540: 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 g the System.Dat 5550: 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 a.SQLite managed 5560: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 74 components. It 5570: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 5580: 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 should be noted 5590: 74 68 61 74 20 74 68 69 73 20 61 73 73 65 6d 62 that this assemb 55a0: 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c 73 6f ly file may also 55b0: 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 contain the.. 55c0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 # nati 55d0: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 ve components, i 55e0: 66 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 f a native build 55f0: 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 is in use... 5600: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 5610: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n 5620: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 5630: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 join$directory
5640: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73  \..          Sys
5650: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
5660: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  dll]]....      i
5670: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
5680: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 5690: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 56a0: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 urn false.. 56b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 56c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 56d0: 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 empt to automati 56e0: 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69 66 20 cally detect if 56f0: 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 the primary asse 5700: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 mbly.. # 5710: 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 contains any 5720: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e native componen 5730: 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79 ts, if necessary 5740: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 5750: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 5760: 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20 3d 3d ngth$native] ==
5770: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
5780: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
5790: 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d  length $varName] 57a0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 57b0: 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 upvar 1 57c0: 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d$varName $varNam 57d0: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 57e0: 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 set nati 57f0: 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65 41 ve [isMixedModeA 5800: 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
5810: 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20  e $varName].. 5820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 5830: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 5840: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 f the primary as 5850: 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 sembly also cont 5860: 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20 ains the native 5870: 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 components,.. 5880: 20 20 20 23 20 20 20 20 20 20 20 77 65 20 68 61 # we ha 5890: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 ve everything we 58a0: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d need... #. 58b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 . if {$nati
58c0: 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ve} then {..
58d0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
58e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
58f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
5900: 45 3a 20 49 66 20 74 68 65 20 6d 61 63 68 69 6e  E: If the machin
5910: 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 76 61 69  e name is unavai
5920: 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20  lable, there is
5930: 6e 6f 74 68 69 67 6e 20 65 6c 73 65 20 77 65 0d  nothign else we.
5940: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
5950: 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 20 23 0d  an do...      #.
5960: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66  .      if {![inf
5970: 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70  o exists ::tcl_p
5980: 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29  latform(machine)
5990: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
59a0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
59b0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
59c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
59d0: 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 20 61  E: What is the a
59e0: 72 63 68 69 74 65 63 74 75 72 65 20 66 6f 72 20  rchitecture for
59f0: 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20  this machine?..
5a00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
5a10: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b  t architecture [
5a20: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
5a30: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor 5a40: 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75 65 5d m(machine) true] 5a50: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 5a60: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 20 # NOTE: What 5a70: 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 is the platform 5a80: 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 for this machine 5a90: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ?.. #.. 5aa0: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b set platform [ 5ab0: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 machineToPlatfor 5ac0: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 m$::tcl_platfor
5ad0: 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20  m(machine)]....
5ae0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
5af0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
5b00: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20  fully qualified
5b10: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  file name for th
5b20: 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
5b30: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ly..      #
5b40: 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65    containing the
5b50: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
5b60: 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f  ite native compo
5b70: 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 73 0d  nents.  If this.
5b80: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
5b90: 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 73  ile exists, we s
5ba0: 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 79  hould have every
5bb0: 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a  thing we need...
5bc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66        #..      f
5bd0: 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
5be0: 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41  nly [getInteropA
5bf0: 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73  ssemblyFileNames
5c00: 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  Only] {..
5c10: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
5c20: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
5c30: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63  file join $direc 5c40: 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 tory \.. 5c50: 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72$architectur
5c60: 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  e $fileNameOnly] 5c70: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 5c80: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
5c90: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
5cb0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
5cc0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   }....        se
5cd0: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5ce0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5cf0: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5d00: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 5d10: 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65$platform $file 5d20: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 NameOnly]].... 5d30: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 5d40: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
5d50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
5d60: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
5d70: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
5d80: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
5d90: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
5da0: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
5db0: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 5dc0: 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e$fileN
5dd0: 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20  ameOnly]]....
5de0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
5df0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 5e00: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 5e10: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. 5e20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 5e30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 5e40: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 5e50: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu 5e60: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d alified file nam 5e70: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 e for the SQLite 5e80: 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 core.. # 5e90: 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 49 library. I 5ea0: 66 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 73 f this file exis 5eb0: 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 ts, we should ha 5ec0: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 ve everything we 5ed0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 5ee0: 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a need... #.. 5ef0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 5f00: 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e leNameOnly [getN 5f10: 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 ativeLibraryFile 5f20: 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 NamesOnly] {.. 5f30: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 5f40: 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e me [file nativen 5f50: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 ame [file join$
5f60: 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20  directory \..
5f70: 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74           $archit 5f80: 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 ecture$fileName
5f90: 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  Only]]....
5fa0: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
5fb0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 5fc0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 5fd0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. 5fe0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5ff0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 6000: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 6010: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
6020: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
6030: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20        $platform 6040: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d$fileNameOnly]].
6050: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
6060: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 6070: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 6080: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 6090: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d true.. } 60a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 60b0: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n 60c0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 60d0: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 join$directory
60e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $60f0: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a fileNameOnly]].. 6100: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 .. if {[f 6110: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
6120: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
6130: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
6140: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  true..        }.
6150: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
6160: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
6170: 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6e  E: One or more n
6180: 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73  ative components
6190: 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 74 65   needed by Syste
61a0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20  m.Data.SQLite..
61b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65       #       are
61c0: 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20 20   missing...
61d0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
61e0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
61f0: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 65 6c  ..    proc isRel
6200: 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 7b 20  easeAvailable {
6210: 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61  directory {varNa
6220: 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  me ""} } {..
6230: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
6240: 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e  ngth $varName] > 6250: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 6260: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
6270: 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20  Name $varName.. 6280: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 6290: 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 41 return [isBuildA 62a0: 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64 69 72 vailable ""$dir
62b0: 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d  ectory $varName] 62c0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 62d0: 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 proc joinBuildDi 62e0: 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 rectory { native 62f0: 20 70 61 74 68 20 79 65 61 72 20 70 6c 61 74 66 path year platf 6300: 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f orm configuratio 6310: 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a n } {.. #.. 6320: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 6330: 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74 68 65 gure out and the 6340: 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66 75 6c n return the ful 6350: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 ly qualified pat 6360: 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64 0d 0a h to the build.. 6370: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 6380: 72 65 63 74 6f 72 79 20 62 61 73 65 64 20 6f 6e rectory based on 6390: 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d 65 6e all the argumen 63a0: 74 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f ts provided by o 63b0: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 ur caller... 63c0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
63d0: 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a  native} then {..
63e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
63f0: 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20  file join $path 6400: 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61 74 66 bin$year $platf 6410: 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 orm$configurati
6420: 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  on]..      } els
6430: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
6440: 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  urn [file join $6450: 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 path bin$year $6460: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 69 configuration bi 6470: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 6480: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 6490: 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 64a0: 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 y { managedOnly 64b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 64c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 # NOTE: See 64d0: 69 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 if the "native" 64e0: 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 runtime option h 64f0: 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 as been set. If 6500: 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 so, use the.. 6510: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 6520: 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 ctory for the mi 6530: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 6540: 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 y (a.k.a. the na 6550: 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 tive interop.. 6560: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 6570: 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c mbly). To enabl 6580: 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 e this option vi 6590: 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 a the command li 65a0: 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 ne, enter a.. 65b0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 # comma 65c0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e nd similar to on 65d0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 e of the followi 65e0: 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c ng (all on one l 65f0: 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a ine):.. #.. 6600: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 6610: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e gleShell.exe -in 6620: 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d itialize -runtim 6630: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a eOption native.. 6640: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 6650: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 6660: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 6670: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 6680: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 To enable this 6690: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 option via the 66a0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 command line pri 66b0: 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 or to the "beta 66c0: 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 16".. # 66d0: 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 release of Ea 66e0: 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 gle, the followi 66f0: 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 ng command must 6700: 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d be used instead. 6710: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 . # ( 6720: 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 also all on one 6730: 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d line):.. #. 6740: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 6750: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 agleShell.exe -i 6760: 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 nitialize -postI 6770: 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 nitialize.. 6780: 20 23 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 # "obje 6790: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 67a0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 67b0: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e AddRuntimeOption 67c0: 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 native".. 67d0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 67e0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 67f0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 6800: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 6810: 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 ists ::build_dir 6820: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 ectory] && \.. 6830: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 6840: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f length$::build_
6850: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
6860: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
6870: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
6880: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
6890: 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  of the build dir
68a0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
68b0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
68c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
68d0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76  refore, use it v
68e0: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...
68f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
6900: 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72  urn $::build_dir 6910: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 6920: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 6930: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6940: 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 E: If the "nativ 6950: 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f e" runtime optio 6960: 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20 6d 69 n is set, the mi 6970: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 6980: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 6990: 20 20 20 69 73 20 62 65 69 6e 67 20 74 65 73 74 is being test 69a0: 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 ed. In that cas 69b0: 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 e, the path to t 69c0: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 69d0: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ry.. # 69e0: 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e will contain 69f0: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 6a00: 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 62 me and all the b 6a10: 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 inaries under te 6a20: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 6a30: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 70 72 should be pr 6a40: 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 69 esent in that di 6a50: 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74 68 65 rectory. If the 6a60: 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d "native" runtim 6a70: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 6a80: 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 option is not 6a90: 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c 64 20 set, the build 6aa0: 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62 directory will b 6ab0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 e considered to 6ac0: 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 be.. # 6ad0: 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 "platform-ne 6ae0: 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74 68 65 utral", with the 6af0: 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69 notable excepti 6b00: 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69 76 65 on of any native 6b10: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6b20: 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e 67 2e assembly (e.g. 6b30: 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 "SQLite.Interop 6b40: 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20 74 68 .dll") copied th 6b50: 65 72 65 20 64 75 72 69 6e 67 20 74 68 65 0d 0a ere during the.. 6b60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6b70: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 69 74 build process it 6b80: 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20 62 75 self. If the bu 6b90: 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f 6d 65 ild process some 6ba0: 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 how does not.. 6bb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 6bc0: 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 61 73 py the native as 6bd0: 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69 73 20 sembly for this 6be0: 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f platform, most o 6bf0: 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20 20 20 f the tests.. 6c00: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 # in 6c10: 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c 20 73 the suite will s 6c20: 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70 65 64 imply be skipped 6c30: 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 . Generally spe 6c40: 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20 20 aking, there.. 6c50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 # ar 6c60: 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20 62 75 e two ways to bu 6c70: 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69 65 73 ild the binaries 6c80: 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 when preparing 6c90: 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20 20 20 to run the.. 6ca0: 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 6cb0: 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20 20 20 suite:.. 6cc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 #.. # 6cd0: 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74 68 65 1. Build the 6ce0: 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61 67 65 separate manage 6cf0: 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61 73 73 d and native ass 6d00: 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20 73 6f emblies using so 6d10: 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 me.. # 6d20: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 commands 6d30: 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 similar to:.. 6d40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6d50: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 # build 6d60: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 .bat${Configura
6d70: 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79  tion}ManagedOnly
6d80: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20   ${Platform}.. 6d90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 6da0: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e build.bat${Con
6db0: 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 76  figuration}Nativ
6dc0: 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d  eOnly ${Platform 6dd0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 }.. #.. 6de0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 6df0: 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 Where${Configu
6e00: 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65  ration} is eithe
6e10: 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65  r "Debug" or "Re
6e20: 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20  lease" and..
6e30: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24      #          $6e40: 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 {Platform} is ei 6e50: 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 ther "Win32" or 6e60: 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 "x64"... 6e70: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 #.. # 6e80: 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68 65 20 2. Build the 6e90: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 6ea0: 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d bly using a comm 6eb0: 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d and similar to:. 6ec0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6ed0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 6ee0: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
6ef0: 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 74  guration} ${Plat 6f00: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 form}.. # 6f10: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6f20: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e Where${Con
6f30: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65  figuration} is e
6f40: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
6f50: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a   "Release" and..
6f60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6f70: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69     ${Platform} i 6f80: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 s either "Win32" 6f90: 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66 20 74 or "x64". If t 6fa0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a his command is.. 6fb0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6fc0: 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f 75 73 used, various 6fd0: 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71 75 tests that requ 6fe0: 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 ire supplementar 6ff0: 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 y managed.. 7000: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61 73 # as 7010: 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20 4c semblies (e.g. L 7020: 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b 69 70 INQ) may be skip 7030: 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f 73 65 ped unless those 7040: 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20 20 20 binaries.. 7050: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61 72 # ar 7060: 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 63 e subsequently c 7070: 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65 20 63 opied into the c 7080: 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f 72 79 orrect directory 7090: 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20 20 (i.e. by.. 70a0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 22 74 # "t 70b0: 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a est_all.bat")... 70c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 70d0: 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74 65 20 # Note 70e0: 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 that all of the 70f0: 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20 61 build commands a 7100: 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61 75 6c bove will defaul 7110: 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20 20 t to using.. 7120: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 7130: 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f latest version o 7140: 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69 6c 61 f MSBuild availa 7150: 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74 65 73 ble and the "tes 7160: 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20 20 20 t_year" may.. 7170: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 # nee 7180: 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74 65 64 d to be adjusted 7190: 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f 20 accordingly to 71a0: 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74 68 65 actually run the 71b0: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 71c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 52 65 # Re 71d0: 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d 65 fer to the comme 71e0: 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69 6c 64 nts in [getBuild 71f0: 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20 69 Year] for more i 7200: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 nformation on.. 7210: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 68 # h 7220: 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73 20 76 ow to set this v 7230: 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 ariable... 7240: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 7250: 20 6e 61 74 69 76 65 20 5b 65 78 70 72 20 7b 21 native [expr {! 7260: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 26 26 20$managedOnly &&
7270: 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f  [hasRuntimeOptio
7280: 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d 0a 0d 0a 20  n native]}]....
7290: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a         return [j
72a0: 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72  oinBuildDirector
72b0: 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75  y $native [getBu 72c0: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 ildBaseDirectory 72d0: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 72e0: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 [getBuildYear] 72f0: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 [getBuildPlatfor 7300: 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42 m$native] [getB
7310: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
7320: 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  n]]..      }..
7330: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
7340: 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69   getReleaseVersi
7350: 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  on {} {..      #
7360: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
7370: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 72  Figure out the r
7380: 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66  elease version f
7390: 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20  or use with the
73a0: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d  build directory.
73b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
73c0: 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  hen checking for
73d0: 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61   available relea
73e0: 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ses...      #..
73f0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
7400: 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f  xists ::release_
7410: 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20  version] && \..
7420: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
7430: 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61   length $::relea 7440: 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d se_version] > 0} 7450: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 7460: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7470: 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20 TE: The release 7480: 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e version has been 7490: 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65 overridden; the 74a0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a refore, use it.. 74b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 74c0: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 verbatim... 74d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 74e0: 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f turn$::release_
74f0: 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d  version..      }
7500: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
7510: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
7520: 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76  TE: No release v
7530: 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  ersion is availa
7540: 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ble, return an e
7550: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20  mpty string...
7560: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 49 74        #       It
7570: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
7580: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
7590: 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 65 63   string here bec
75a0: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20  ause the..
75b0: 20 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74    #       result
75c0: 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75   of this procedu
75d0: 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 20 77  re may be used w
75e0: 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e  ith [file join].
75f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
7600: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
7610: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
7620: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
7630: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66  uildFileName { f
7640: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f  ileName managedO
7650: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  nly {platform ""
7660: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
7670: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
7680: 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66  turns the specif
7690: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  ied file name as
76a0: 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61   if it were loca
76b0: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
76c0: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
76d0: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61  directory, disca
76e0: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74  rding any direct
76f0: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ory information
7700: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23  present..      #
7710: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69         in the fi
7720: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69  le name as provi
7730: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
7740: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  r...      #..
7750: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66     set result [f
7760: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c  ..          [fil
7780: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64  e join [getBuild
7790: 44 69 72 65 63 74 6f 72 79 20 24 6d 61 6e 61 67  Directory $manag 77a0: 65 64 4f 6e 6c 79 5d 20 24 70 6c 61 74 66 6f 72 edOnly]$platfor
77b0: 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  m \..          [
77c0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 77d0: 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ame]]].... 77e0: 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b 3a #.. # HACK: 77f0: 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e When running on 7800: 20 57 6f 57 36 34 2c 20 61 73 73 75 6d 65 20 74 WoW64, assume t 7810: 68 65 20 74 65 73 74 20 65 78 65 63 75 74 61 62 he test executab 7820: 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e 74 0d les are present. 7830: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 . # w 7840: 69 74 68 20 74 68 65 20 22 33 32 22 20 73 75 66 ith the "32" suf 7850: 66 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 fix on them... 7860: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 7870: 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 {[isRunningWoW64 7880: 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 74 65 6e ] && [file exten 7890: 73 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20 65 71 sion$result] eq
78a0: 20 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 7b 0d   ".exe"} then {.
78b0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 65 73  .        set res
78c0: 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ult [appendArgs
78d0: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24  [file rootname $78e0: 72 65 73 75 6c 74 5d 20 33 32 2e 65 78 65 5d 0d result] 32.exe]. 78f0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 7900: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
7910: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
7920: 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c  proc getExternal
7930: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
7940: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
7950: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
7960: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68  edure returns th
7970: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72  e directory wher
7980: 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62  e the external b
7990: 69 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  inary..      #
79a0: 20 20 20 20 20 66 69 6c 65 73 20 61 72 65 20 6c       files are l
79b0: 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 23  ocated...      #
79c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
79d0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
79e0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66  [file dirname [f
79f0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66  ile dirname [inf
7a00: 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 20  o binary]]]]..
7a10: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
7a20: 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74   getBinaryDirect
7a30: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
7a40: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
7a50: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
7a60: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
7a70: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
7a80: 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  test application
7a90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7aa0: 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65  itself (i.e. the
7ab0: 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73   Eagle shell) is
7ac0: 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20   located.  This
7ad0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d  will be used as.
7ae0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
7af0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66  he destination f
7b00: 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 53 79  or the copied Sy
7b10: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
7b20: 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20   native and..
7b30: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67     #       manag
7b40: 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69  ed assemblies (i
7b50: 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 69 73  .e. because this
7b60: 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   is one of the f
7b70: 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20  ew places..
7b80: 20 23 20 20 20 20 20 20 20 77 68 65 72 65 20 74   #       where t
7b90: 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75  he CLR will actu
7ba0: 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f  ally find and lo
7bb0: 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79  ad them properly
7bc0: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
7bd0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
7be0: 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72  sts ::binary_dir
7bf0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
7c00: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
7c10: 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79  length $::binary 7c20: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 7c30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 7c40: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7c50: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 7c60: 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 of the binary d 7c70: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 7c80: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 7c90: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 7ca0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 7cb0: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 7cc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 7cd0: 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f eturn$::binary_
7ce0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
7cf0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
7d00: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20     return [info
7d10: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d  binary]..      }
7d20: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
7d30: 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c  proc getExternal
7d40: 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e  FileName { fileN
7d50: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ame } {..      #
7d60: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
7d70: 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63  Returns the spec
7d80: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20  ified file name
7d90: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f  as if it were lo
7da0: 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20  cated in the..
7db0: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65      #       dire
7dc0: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
7dd0: 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69   the external bi
7de0: 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 23  naries...      #
7df0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
7e00: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
7e10: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 45  [file join [getE
7e20: 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 79  xternalDirectory
7e30: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20  ] $fileName]].. 7e40: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 7e50: 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e c getBinaryFileN 7e60: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b ame { fileName { 7e70: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b platform ""} } { 7e80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7e90: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 # NOTE: Returns 7ea0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 the specified f 7eb0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 ile name as if i 7ec0: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 t were located i 7ed0: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 7ee0: 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 65 binary dire 7ef0: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e ctory, discardin 7f00: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 g any directory 7f10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 information pres 7f20: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 7f30: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e in the file n 7f40: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 ame as provided 7f50: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 7f60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 7f70: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 eturn [file nati 7f80: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 7f90: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b [file join [ 7fa0: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f getBinaryDirecto 7fb0: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 66 ry]$platform [f
7fc0: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 7fd0: 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d me]]].. }.... 7fe0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 72 . proc getCor 7ff0: 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 eBinaryFileName 8000: 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 { {platform ""} 8010: 7b 73 74 61 6e 64 61 72 64 20 22 22 7d 20 7d 20 {standard ""} } 8020: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 8030: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 8040: 73 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 s the full path 8050: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 63 6f 6e for the file con 8060: 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 69 taining the SQLi 8070: 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 te core.. # 8080: 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 6c 69 native li 8090: 62 72 61 72 79 20 63 6f 64 65 20 66 6f 72 20 74 brary code for t 80a0: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 20 20 46 his platform. F 80b0: 69 72 73 74 2c 20 63 68 65 63 6b 20 61 6e 64 20 irst, check and 80c0: 73 65 65 20 69 66 0d 0a 20 20 20 20 20 20 23 20 see if.. # 80d0: 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 the SQLite 80e0: 20 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 core native lib 80f0: 72 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 rary has already 8100: 20 62 65 65 6e 20 6c 6f 61 64 65 64 2e 20 20 4e been loaded. N 8110: 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 ext,.. # 8120: 20 20 20 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 fallback to 8130: 77 68 61 74 20 74 68 65 20 66 75 6c 6c 20 70 61 what the full pa 8140: 74 68 20 73 68 6f 75 6c 64 20 62 65 2c 20 62 61 th should be, ba 8150: 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 74 sed on whether t 8160: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 8170: 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 mixed-mode ass 8180: 65 6d 62 6c 79 20 69 73 20 62 65 69 6e 67 20 75 embly is being u 8190: 73 65 64 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 sed and the name 81a0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 0d of the current. 81b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 . # p 81c0: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 81d0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 #.. if {[ca 81e0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f tch {.. o 81f0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 8200: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 8210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 .. Sy 8220: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 8230: 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 8240: 68 6f 64 73 20 5f 53 51 4c 69 74 65 4e 61 74 69 hods _SQLiteNati 8250: 76 65 4d 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 veModuleFileName 8260: 0d 0a 20 20 20 20 20 20 7d 20 66 69 6c 65 4e 61 .. } fileNa 8270: 6d 65 5d 20 3d 3d 20 30 20 26 26 20 5b 73 74 72 me] == 0 && [str 8280: 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 ing length$file
8290: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
82a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
82b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
82c0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61  e SQLite core na
82d0: 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 61 73  tive library has
82e0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f   already been lo
82f0: 61 64 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20  aded via..
8300: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6e 61    #       the na
8310: 74 69 76 65 20 6c 69 62 72 61 72 79 20 70 72 65  tive library pre
8320: 2d 6c 6f 61 64 65 72 2e 20 20 52 65 74 75 72 6e  -loader.  Return
8330: 20 74 68 61 74 20 66 69 6c 65 20 6e 61 6d 65 20   that file name
8340: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
8350: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
8360: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 8370: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 8380: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 8390: 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e the "native" run 83a0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 time option has 83b0: 62 65 65 6e 20 73 65 74 2c 20 61 6c 77 61 79 73 been set, always 83c0: 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20 20 20 return the.. 83d0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 # file 83e0: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 6d 69 78 name for the mix 83f0: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 8400: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 8410: 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d if {[hasRuntim 8420: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d eOption native]} 8430: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8440: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8450: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d TE: Return the m 8460: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 ixed-mode assemb 8470: 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 ly file name... 8480: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8490: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e return [file n 84a0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 ativename \.. 84b0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j 84c0: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 oin [getBinaryDi 84d0: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f rectory]$platfo
84e0: 72 6d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  rm System.Data.S
84f0: 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20  QLite.dll]]..
8500: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
8510: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
8520: 72 65 20 77 65 20 61 74 74 65 6d 70 74 69 6e 67  re we attempting
8530: 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   to automaticall
8540: 79 20 64 65 74 65 63 74 20 77 68 65 74 68 65 72  y detect whether
8550: 20 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20   or not the..
8560: 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 65 72     #       inter
8570: 6f 70 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75  op assembly shou
8580: 6c 64 20 62 65 20 75 73 65 64 3f 0d 0a 20 20 20  ld be used?..
8590: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
85a0: 61 75 74 6f 6d 61 74 69 63 20 5b 65 78 70 72 20  automatic [expr
85b0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
85c0: 24 73 74 61 6e 64 61 72 64 5d 20 3d 3d 20 30 7d  $standard] == 0} 85d0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 85e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 85f0: 74 2c 20 69 6e 20 65 69 74 68 65 72 20 22 61 75 t, in either "au 8600: 74 6f 6d 61 74 69 63 22 20 6f 72 20 22 6e 6f 6e tomatic" or "non 8610: 2d 73 74 61 6e 64 61 72 64 22 20 6d 6f 64 65 73 -standard" modes 8620: 2c 20 61 74 74 65 6d 70 74 0d 0a 20 20 20 20 20 , attempt.. 8630: 20 23 20 20 20 20 20 20 20 74 6f 20 66 69 6e 64 # to find 8640: 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 the native-only 8650: 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 8660: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. 8670: 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61 74 69 if {$automati
8680: 63 20 7c 7c 20 21 24 73 74 61 6e 64 61 72 64 7d  c || !$standard} 8690: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 86a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 86b0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d 86c0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 74 etermine the nat 86d0: 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 ive-only interop 86e0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 0d 0a assembly file.. 86f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 8700: 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20 70 6c name for this pl 8710: 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65 6e 20 atform and then 8720: 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20 20 20 return it... 8730: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 #.. f 8740: 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f oreach fileNameO 8750: 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 nly [getInteropA 8760: 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 ssemblyFileNames 8770: 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 Only] {.. 8780: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 8790: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 87a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 87b0: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 [file join [ge 87c0: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 tBinaryDirectory 87d0: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c ]$platform $fil 87e0: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 87f0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 if {[fi 8800: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
8810: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
8820: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8830: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 8840: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 8850: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 8860: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 8870: 4e 4f 54 45 3a 20 54 68 65 6e 2c 20 69 6e 20 65 NOTE: Then, in e 8880: 69 74 68 65 72 20 22 61 75 74 6f 6d 61 74 69 63 ither "automatic 8890: 22 20 6f 72 20 22 73 74 61 6e 64 61 72 64 22 20 " or "standard" 88a0: 6d 6f 64 65 73 2c 20 61 74 74 65 6d 70 74 20 74 modes, attempt t 88b0: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 o.. # 88c0: 20 66 69 6e 64 20 74 68 65 20 73 74 61 6e 64 61 find the standa 88d0: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 rd SQLite librar 88e0: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. 88f0: 20 20 20 69 66 20 7b 24 61 75 74 6f 6d 61 74 69 if {$automati
8900: 63 20 7c 7c 20 24 73 74 61 6e 64 61 72 64 7d 20  c || $standard} 8910: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8920: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8930: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de 8940: 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 74 69 termine the nati 8950: 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 ve-only standard 8960: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0d SQLite library. 8970: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8980: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 file name for t 8990: 68 69 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 his platform and 89a0: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e then return it. 89b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 89c0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 89d0: 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 eNameOnly [getNa 89e0: 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e tiveLibraryFileN 89f0: 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 amesOnly] {.. 8a00: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 8a10: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 8a20: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 name \.. 8a30: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join 8a40: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 [getBinaryDirec 8a50: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 tory]$platform
8a60: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d  $fileNameOnly]]. 8a70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 8a80: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
8a90: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
8aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8ab0: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  turn $fileName.. 8ac0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 8ad0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 8ae0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 8af0: 20 20 23 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 # NOTE: Was th 8b00: 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 e managed assemb 8b10: 6c 79 20 63 6f 6d 70 69 6c 65 64 20 65 78 70 65 ly compiled expe 8b20: 63 74 69 6e 67 20 74 6f 20 64 65 61 6c 20 77 69 cting to deal wi 8b30: 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 th the.. # 8b40: 20 20 20 20 20 20 73 74 61 6e 64 61 72 64 20 63 standard c 8b50: 6f 72 65 20 6c 69 62 72 61 72 79 3f 0d 0a 20 20 ore library?.. 8b60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 8b70: 7b 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 {[haveSQLiteDefi 8b80: 6e 65 43 6f 6e 73 74 61 6e 74 20 53 51 4c 49 54 neConstant SQLIT 8b90: 45 5f 53 54 41 4e 44 41 52 44 5d 7d 20 74 68 65 E_STANDARD]} the 8ba0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 8bb0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 8bc0: 46 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 Fallback to retu 8bd0: 72 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 rning the native 8be0: 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 -only standard S 8bf0: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0d 0a 20 QLite library.. 8c00: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 # f 8c10: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 ile name for the 8c20: 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 platform... 8c30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 8c40: 65 74 20 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 et fileNamesOnly 8c50: 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 [getNativeLibra 8c60: 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d ryFileNamesOnly] 8c70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 8c80: 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 [llength$fileNa
8c90: 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d 20 74  mesOnly] == 0} t
8ca0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
8cb0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
8cc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
8cd0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
8ce0: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
8cf0: 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
8d00: 20 20 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72     [getBinaryDir
8d10: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 8d20: 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c 65 4e m [lindex$fileN
8d30: 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a 20  amesOnly 0]]]..
8d40: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
8d50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8d60: 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61    # NOTE: Fallba
8d70: 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e 67 20  ck to returning
8d80: 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20  the native-only
8d90: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
8da0: 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23   file..        #
8db0: 20 20 20 20 20 20 20 6e 61 6d 65 20 66 6f 72 20         name for
8dc0: 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20  the platform...
8dd0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8de0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73 4f    set fileNamesO
8df0: 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41  nly [getInteropA
8e00: 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73  ssemblyFileNames
8e10: 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Only]....
8e20: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66   if {[llength $f 8e30: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d ileNamesOnly] == 8e40: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 8e50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 8e60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 8e70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 8e80: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 8e90: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 8ea0: 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 8eb0: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c ryDirectory]$pl
8ec0: 61 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24  atform [lindex $8ed0: 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d fileNamesOnly 0] 8ee0: 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 ]].. }.. 8ef0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 8f00: 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f getCommonDirecto 8f10: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ry {} {.. # 8f20: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 8f30: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 This procedure r 8f40: 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 eturns the direc 8f50: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 tory where the t 8f60: 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20 20 20 est scripts.. 8f70: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c # shoul 8f80: 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 d be located. B 8f90: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 y default, this 8fa0: 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74 68 65 just returns the 8fb0: 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 Eagle.. # 8fc0: 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 binary dir 8fd0: 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 ectory... # 8fe0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 8ff0: 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f o exists ::commo 9000: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 n_directory] && 9010: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 9020: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 ring length$::c
9030: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
9040: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
9050: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9060: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
9070: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d  ation of the com
9080: 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 68 61  mon directory ha
9090: 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20  s been set;..
90a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
90b0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d  refore, use it..
90c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
90d0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 63 6f      return $::co 90e0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 0d 0a mmon_directory.. 90f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 9100: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 76 [info exists ::v 9110: 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d endor_directory] 9120: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 9130: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 9140: 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74$::vendor_direct
9150: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
9160: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9170: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
9180: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
9190: 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 6f 72   vendor director
91a0: 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d  y has been set;.
91b0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
91c0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
91d0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
91e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $91f0: 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f ::vendor_directo 9200: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 9210: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 9220: 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20 ::tcl_library] 9230: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 9240: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
9250: 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20 3e  ::tcl_library] >
9260: 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20   0 && \..
9270: 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63     [file isdirec
9280: 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 62 72  tory $::tcl_libr 9290: 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ary]} then {.. 92a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 92b0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 # NOTE: The var 92c0: 69 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 6c iable with the l 92d0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 ocation of the s 92e0: 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 69 73 cript library is 92f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 9300: 20 20 73 65 74 20 61 6e 64 20 61 70 70 65 61 72 set and appear 9310: 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 64 s to be a real d 9320: 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e 20 6e irectory (i.e. n 9330: 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20 20 20 ot embedded.. 9340: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 74 # wit 9350: 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74 68 65 hin a file); the 9360: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. 9370: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9380: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 63 return$::tc
9390: 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20  l_library..
93a0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
93b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
93c0: 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74  NOTE: Fallback t
93d0: 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  o the directory
93e0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65  containing the e
93f0: 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 20 20  xecutable...
9400: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
9410: 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61  eturn [info bina
9420: 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ry]..      }..
9430: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
9440: 20 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65   getDatabaseDire
9450: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20  ctory {} {..
9460: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9470: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
9480: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69  e returns the di
9490: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68  rectory where th
94a0: 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73  e test databases
94b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
94c0: 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65  should be locate
94d0: 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20  d.  By default,
94e0: 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 20 74  this just uses t
94f0: 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20  he temporary..
9500: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65      #       dire
9510: 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 64  ctory configured
9520: 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 65 6d   for this system
9530: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
9540: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
9550: 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f 64 69  ts ::database_di
9560: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
9570: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
9580: 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 61 62   length $::datab 9590: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e ase_directory] > 95a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 95b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 95c0: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 NOTE: The locat 95d0: 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62 ion of the datab 95e0: 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61 ase directory ha 95f0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 s been overridde 9600: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 n;.. # 9610: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 therefore, u 9620: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 se it... 9630: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 9640: 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 n$::database_di
9650: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
9660: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
9670: 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f  xists ::scratch_
9680: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d  directory] && \.
9690: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
96a0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72  ng length $::scr 96b0: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 96c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 96d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 96e0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 96f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 tion of the scra 9700: 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 tch directory ha 9710: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 s been overridde 9720: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 n;.. # 9730: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 therefore, u 9740: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 se it... 9750: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 9760: 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 n$::scratch_dir
9770: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
9780: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
9790: 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f  return [getTempo
97a0: 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20  raryPath]..
97b0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
97c0: 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 6f 72    proc getTempor
97d0: 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d 20  aryDirectory {}
97e0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
97f0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70    # NOTE: This p
9800: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73  rocedure returns
9810: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77   the directory w
9820: 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61  here the tempora
9830: 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20  ry files..
9840: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
9850: 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64  e located.  By d
9860: 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73  efault, this jus
9870: 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 6f  t uses the tempo
9880: 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20  rary..      #
9890: 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f      directory co
98a0: 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 69  nfigured for thi
98b0: 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20  s system...
98c0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
98d0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 6d  nfo exists ::tem
98e0: 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79  porary_directory
98f0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
9900: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
9910: 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69   $::temporary_di 9920: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 9930: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 9940: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 9950: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 9960: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 the temporary d 9970: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 9980: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 9990: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 99a0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 99b0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 99c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
99d0: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74  temporary_direct
99e0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
99f0: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
9a00: 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65  s ::scratch_dire
9a10: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20  ctory] && \..
9a20: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
9a30: 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68  ength $::scratch 9a40: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 9a50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9a60: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9a70: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 9a80: 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20 of the scratch 9a90: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 9aa0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a en overridden;.. 9ab0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 9ac0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 9ad0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 9ae0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
9af0: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f  :scratch_directo
9b00: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
9b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
9b20: 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79  rn [getTemporary
9b30: 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  Path]..      }..
9b40: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
9b50: 6f 63 20 67 65 74 45 78 65 63 75 74 65 4f 6e 53  oc getExecuteOnS
9b60: 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  etup {} {..
9b70: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
9b80: 73 20 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73  s ::execute_on_s
9b90: 65 74 75 70 5d 20 26 26 20 5c 0d 0a 20 20 20 20  etup] && \..
9ba0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
9bb0: 6e 67 74 68 20 24 3a 3a 65 78 65 63 75 74 65 5f  ngth $::execute_ 9bc0: 6f 6e 5f 73 65 74 75 70 5d 20 3e 20 30 7d 20 74 on_setup] > 0} t 9bd0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 9be0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 9bf0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 63 6f 6e : Return the con 9c00: 66 69 67 75 72 65 64 20 53 51 4c 20 74 6f 20 65 figured SQL to e 9c10: 78 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 xecute during th 9c20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 e connection.. 9c30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 9c40: 74 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 tup procedure (i 9c50: 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 .e. for every te 9c60: 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e st database conn 9c70: 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 ection)... 9c80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 9c90: 75 72 6e 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f urn$::execute_o
9ca0: 6e 5f 73 65 74 75 70 0d 0a 20 20 20 20 20 20 7d  n_setup..      }
9cb0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
9cc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
9cd0: 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20  TE: By default,
9ce0: 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 20  there is no SQL
9cf0: 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69 6e  to execute durin
9d00: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
9d10: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
9d20: 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75 72    setup procedur
9d30: 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72  e (i.e. for ever
9d40: 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20  y test database
9d50: 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20  connection)...
9d60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9d70: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
9d80: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
9d90: 20 20 20 70 72 6f 63 20 67 65 74 53 74 72 69 6e     proc getStrin
9da0: 67 4d 61 70 46 6f 72 54 63 6c 45 73 63 61 70 65  gMapForTclEscape
9db0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74   {} {..      ret
9dc0: 75 72 6e 20 5b 6c 69 73 74 20 5c 5c 20 5c 5c 5c  urn [list \\ \\\
9dd0: 5c 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d 20 5c 5c 5c  \ $\\\[$ \\\
9de0: 5d 20 5c 24 20 5c 5c 5c 24 5d 0d 0a 20 20 20 20  ] \$\\\$]..
9df0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
9e00: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50  etTestOverridesP
9e10: 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61  reamble { {extra
9e20: 56 61 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b  VarNames ""} } {
9e30: 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 72 4e  ..      set varN
9e40: 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  ames [list]....
9e50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
9e60: 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62  NOTE: If availab
9e70: 6c 65 2c 20 73 74 61 72 74 20 77 69 74 68 20 74  le, start with t
9e80: 68 65 20 6d 61 73 74 65 72 20 6c 69 73 74 20 6f  he master list o
9e90: 66 20 74 65 73 74 20 6f 76 65 72 72 69 64 65 0d  f test override.
9ea0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
9eb0: 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20  ariables...
9ec0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
9ed0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
9ee0: 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 26 26 20  t_overrides] &&
9ef0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c  \..          [ll
9f00: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76  ength $::test_ov 9f10: 65 72 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 errides] > 0} th 9f20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 en {.. ev 9f30: 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 al lappend varNa 9f40: 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 mes$::test_over
9f50: 72 69 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a  rides..      }..
9f60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9f70: 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75   # NOTE: If requ
9f80: 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c  ested by our cal
9f90: 6c 65 72 2c 20 61 64 64 20 61 6e 79 20 61 64 64  ler, add any add
9fa0: 69 74 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65  itional variable
9fb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
9fc0: 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f  names to copy no
9fd0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
9fe0: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength
9ff0: 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 5d 20  $extraVarNames] a000: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. a010: 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e eval lappen a020: 64 20 76 61 72 4e 61 6d 65 73 20 24 65 78 74 72 d varNames$extr
a030: 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20  aVarNames..
a040: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
a050: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
a060: 6c 64 20 74 68 65 20 73 63 72 69 70 74 20 66 72  ld the script fr
a070: 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 74  agment to be ret
a080: 75 72 6e 65 64 20 62 79 20 70 72 6f 63 65 73 73  urned by process
a090: 69 6e 67 20 65 61 63 68 0d 0a 20 20 20 20 20 20  ing each..
a0a0: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65  #       variable
a0b0: 20 6e 61 6d 65 20 61 6e 64 20 61 64 64 69 6e 67   name and adding
a0c0: 20 74 68 65 20 6e 65 63 65 63 65 73 73 61 72 79   the nececessary
a0d0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
a0e0: 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20  s for..      #
a0f0: 20 20 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a       each one...
a100: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
a110: 65 74 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a  et result ""....
a120: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 61        foreach va
a130: 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20  rName $varNames a140: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. a150: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu a160: 69 6c 64 20 74 68 65 20 71 75 61 6c 69 66 69 65 ild the qualifie a170: 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c d global variabl a180: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 e name... a190: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set a1a0: 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 fullVarName [app a1b0: 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 61 72 4e endArgs ::$varN
a1c0: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame]....
a1d0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
a1e0: 45 3a 20 44 6f 65 73 20 74 68 65 20 76 61 72 69  E: Does the vari
a1f0: 61 62 6c 65 20 65 78 69 73 74 20 69 6e 20 74 68  able exist in th
a200: 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  is interpreter c
a210: 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20 20 20 20  ontext?..
a220: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
a230: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 66 75  [info exists $fu a240: 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e llVarName]} then a250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. a260: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT a270: 45 3a 20 41 70 70 65 6e 64 20 61 20 73 63 72 69 E: Append a scri a280: 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 pt fragment to t a290: 68 65 20 72 65 73 75 6c 74 20 74 68 61 74 20 77 he result that w a2a0: 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 ill correctly.. a2b0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # a2c0: 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 copy any contai a2d0: 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f ned value to ano a2e0: 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 65 72 ther interpreter a2f0: 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 context... a300: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. a310: 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 append result a320: 5c 6e 20 22 73 65 74 20 22 20 24 66 75 6c 6c 56 \n "set "$fullV
a330: 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73 74  arName " \{" [st
a340: 72 69 6e 67 20 6d 61 70 20 5c 0d 0a 20 20 20 20  ring map \..
a350: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 74            [getSt
a360: 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 63  ringMapForTclEsc
a370: 61 70 65 5d 20 5b 73 65 74 20 24 66 75 6c 6c 56  ape] [set $fullV a380: 61 72 4e 61 6d 65 5d 5d 20 5c 7d 0d 0a 20 20 20 arName]] \}.. a390: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. a3a0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. a3b0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 # NOTE: If the a3c0: 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 result contains a3d0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72 one or more scr a3e0: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 ipt fragments, a a3f0: 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23 ppend a.. # a400: 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d newline.. a410: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. a420: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng a430: 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d th$result] > 0}
a440: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a450: 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c   append result \
a460: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
a470: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu a480: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 lt.. }..... a490: 20 20 70 72 6f 63 20 6d 6f 76 65 53 79 73 74 65 proc moveSyste a4a0: 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f mDataSQLiteDllCo a4b0: 6e 66 69 67 20 7b 20 7b 72 65 73 74 6f 72 65 20 nfig { {restore a4c0: 66 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73 65 20 false} {verbose a4d0: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. a4e0: 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b set directory [ a4f0: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f getBinaryDirecto a500: 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 ry].... if a510: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length a520: 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30$directory] == 0
a530: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a540: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20    if {$verbose} a550: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a560: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
a570: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
a580: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
a590: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
a5a0: 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 79 73 74  ed moving \"Syst
a5b0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
a5c0: 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20 5c  ll.config\", " \
a5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a5e0: 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 65 63  "no binary direc
a5f0: 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  tory\n"]..
a600: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
a610: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  eturn..      }..
a620: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
a630: 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e 6f  Name(1) [file no
a640: 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20  rmalize \..
a650: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
a660: 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 74 65  $directory Syste a670: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl a680: 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 l.config]].... a690: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName a6a0: 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67 73 20 (2) [appendArgs a6b0: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e 6d 6f$fileName(1) .mo
a6c0: 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ved]....      if
a6d0: 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 65 6e   {$restore} then a6e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { a6f0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
a700: 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 65 6e  leName(2)]} then
a710: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   {..          fi
a720: 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e  le rename $fileN a730: 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61 6d 65 ame(2)$fileName
a740: 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  (1)....
a750: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74   if {$verbose} t a760: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a770: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
a780: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
a790: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
a7a0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f          "---- mo
a7b0: 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ved \"" $fileNam a7c0: 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 e(2) "\" to \"" a7d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. a7e0: 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20$fileName(1)
a7f0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
a800: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
a810: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
a820: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th a830: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a840: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
a850: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
a860: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
a870: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69         "---- ski
a880: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20  pped moving \""
a890: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 0d 0a  $fileName(2) \.. a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 a8b0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not a8c0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. a8d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. a8e0: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else a8f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { a900: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
a910: 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 65 6e  leName(1)]} then
a920: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   {..          fi
a930: 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e  le rename $fileN a940: 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61 6d 65 ame(1)$fileName
a950: 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  (2)....
a960: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74   if {$verbose} t a970: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a980: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
a990: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
a9a0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
a9b0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f          "---- mo
a9c0: 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ved \"" $fileNam a9d0: 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 e(1) "\" to \"" a9e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. a9f0: 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20$fileName(2)
aa00: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
aa10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
aa20: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
aa30: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th aa40: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. aa50: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
aa60: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
aa70: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
aa80: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69         "---- ski
aa90: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20  pped moving \""
aaa0: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 0d 0a  $fileName(1) \.. aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 aac0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not aad0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. aae0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. aaf0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. ab00: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc ab10: 77 72 69 74 65 53 79 73 74 65 6d 44 61 74 61 53 writeSystemDataS ab20: 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67 20 7b QLiteDllConfig { ab30: 20 64 61 74 61 20 7b 76 65 72 62 6f 73 65 20 74 data {verbose t ab40: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 rue} } {.. ab50: 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 set directory [g ab60: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 etBinaryDirector ab70: 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b y].... if { ab80: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
ab90: 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d  directory] == 0}
aba0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
abb0: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74   if {$verbose} t abc0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. abd0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
abe0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
abf0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
ac00: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
ac10: 64 20 6d 6f 76 69 6e 67 20 5c 22 53 79 73 74 65  d moving \"Syste
ac20: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
ac30: 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d  l.config\", " \.
ac40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
ac50: 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 65 63 74  no binary direct
ac60: 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ory\n"]..
ac70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
ac80: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  turn..      }...
ac90: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
aca0: 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c  ame [file normal
acb0: 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ize \..
acc0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir acd0: 65 63 74 6f 72 79 20 53 79 73 74 65 6d 2e 44 61 ectory System.Da ace0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f ta.SQLite.dll.co acf0: 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 nfig]].... ad00: 77 72 69 74 65 46 69 6c 65 20 24 66 69 6c 65 4e writeFile$fileN
ad10: 61 6d 65 20 24 64 61 74 61 0d 0a 0d 0a 20 20 20  ame $data.... ad20: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
ad30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ad40: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c ad50: 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. ad60: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 77 72 6f 74 "---- wrot ad70: 65 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e e \"System.Data. ad80: 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 SQLite.dll.confi ad90: 67 5c 22 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d g\"\n".. }. ada0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return adb0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 7d$fileName..    }
adc0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f  .....    proc mo
add0: 76 65 45 61 67 6c 65 53 68 65 6c 6c 4d 64 61 43  veEagleShellMdaC
ade0: 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74 6f 72 65  onfig { {restore
adf0: 20 66 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73 65   false} {verbose
ae00: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
ae10: 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory
ae20: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74  [getBinaryDirect
ae30: 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ory]....      if
ae40: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
ae50: 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20   $directory] == ae60: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. ae70: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
ae80: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ae90: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test aea0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append aeb0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. aec0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip aed0: 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 45 61 67 ped moving \"Eag aee0: 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e leShell.exe.mda. aef0: 63 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 config\", " \.. af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f "no af10: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 binary director af20: 79 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d y\n"].. } af30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 .... retu af40: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rn.. }.... af50: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam af60: 65 28 31 29 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 e(1) [file norma af70: 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 lize \.. af80: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 [file join$di
af90: 72 65 63 74 6f 72 79 20 45 61 67 6c 65 53 68 65  rectory EagleShe
afa0: 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  ll.exe.mda.confi
afb0: 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74  g]]....      set
afc0: 20 66 69 6c 65 4e 61 6d 65 28 32 29 20 5b 61 70   fileName(2) [ap
afd0: 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61  pendArgs $fileNa afe0: 6d 65 28 31 29 20 2e 6d 6f 76 65 64 5d 0d 0a 0d me(1) .moved]... aff0: 0a 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 74 . if {$rest
b000: 6f 72 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ore} then {..
b010: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
b020: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28  xists $fileName( b030: 32 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 2)]} then {.. b040: 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 file rena b050: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 me$fileName(2)
b060: 24 66 69 6c 65 4e 61 6d 65 28 31 29 0d 0a 0d 0a  $fileName(1).... b070: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 if {$v
b080: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
b090: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
b0a0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe b0b0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. b0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b0d0: 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 "---- moved \"" b0e0: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 22 5c$fileName(2) "\
b0f0: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
b100: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil b110: 65 4e 61 6d 65 28 31 29 20 5c 22 5c 6e 5d 0d 0a eName(1) \"\n].. b120: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. b130: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. b140: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 if {$ve
b150: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
b160: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
b170: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel b180: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. b190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b1a0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f "---- skipped mo b1b0: 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 ving \""$fileNa
b1c0: 6d 65 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20  me(2) \..
b1d0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
b1e0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
b1f0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
b200: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
b210: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
b220: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
b230: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28  xists $fileName( b240: 31 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 1)]} then {.. b250: 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 file rena b260: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 me$fileName(1)
b270: 24 66 69 6c 65 4e 61 6d 65 28 32 29 0d 0a 0d 0a  $fileName(2).... b280: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 if {$v
b290: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
b2b0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe b2c0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. b2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b2e0: 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 "---- moved \"" b2f0: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 22 5c$fileName(1) "\
b300: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
b310: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil b320: 65 4e 61 6d 65 28 32 29 20 5c 22 5c 6e 5d 0d 0a eName(2) \"\n].. b330: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. b340: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. b350: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 if {$ve
b360: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
b370: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
b380: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel b390: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b3b0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f "---- skipped mo b3c0: 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 ving \""$fileNa
b3d0: 6d 65 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 20  me(1) \..
b3e0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
b3f0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
b400: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
b410: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
b420: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
b430: 20 20 20 20 70 72 6f 63 20 77 72 69 74 65 45 61      proc writeEa
b440: 67 6c 65 53 68 65 6c 6c 4d 64 61 43 6f 6e 66 69  gleShellMdaConfi
b450: 67 20 7b 20 64 61 74 61 20 7b 76 65 72 62 6f 73  g { data {verbos
b460: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
b470: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
b480: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
b490: 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  tory]....      i
b4a0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
b4b0: 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d  h $directory] == b4c0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. b4d0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
b4e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b4f0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes b500: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen b510: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. b520: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski b530: 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 45 61 pped moving \"Ea b540: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 gleShell.exe.mda b550: 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a .config\", " \.. b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e "n b570: 6f 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f o binary directo b580: 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 ry\n"].. b590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.... ret b5a0: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... b5b0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa b5c0: 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 me [file normali b5d0: 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ze \.. b5e0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 [file join$dire
b5f0: 63 74 6f 72 79 20 45 61 67 6c 65 53 68 65 6c 6c  ctory EagleShell
b600: 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d  .exe.mda.config]
b610: 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 72 69 74 65  ]....      write
b620: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  File $fileName$
b630: 64 61 74 61 0d 0a 0d 0a 20 20 20 20 20 20 69 66  data....      if
b640: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then b650: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput b660: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
b670: 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
b680: 20 22 2d 2d 2d 2d 20 77 72 6f 74 65 20 5c 22 45   "---- wrote \"E
b690: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64  agleShell.exe.md
b6a0: 61 2e 63 6f 6e 66 69 67 5c 22 5c 6e 22 0d 0a 20  a.config\"\n"..
b6b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
b6c0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65  return $fileName b6d0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... b6e0: 70 72 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 proc getAppDomai b6f0: 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 nPreamble { {pre b700: 66 69 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 fix ""} {suffix b710: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # b720: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: b730: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 This procedure r b740: 65 74 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 eturns a test se b750: 74 75 70 20 73 63 72 69 70 74 20 66 72 61 67 6d tup script fragm b760: 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 ent suitable for b770: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # b780: 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e evaluation by an b790: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 interpreter cre b7a0: 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 ated in an isola b7b0: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d ted application. b7c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d b7d0: 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 omain. The scri b7e0: 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e pt fragment bein b7f0: 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 g returned will b800: 62 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 be surrounded by b810: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # b820: 74 68 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 the prefix and s b830: 75 66 66 69 78 20 22 73 63 72 69 70 74 20 66 72 uffix "script fr b840: 61 67 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 agments" specifi b850: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller b860: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ,.. # b870: 20 69 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e if any. The en b880: 74 69 72 65 20 73 63 72 69 70 74 20 62 65 69 6e tire script bein b890: 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 g returned will b8a0: 62 65 20 73 75 62 73 74 69 74 75 74 65 64 20 76 be substituted v b8b0: 69 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ia.. # b8c0: 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 [subst], in th b8d0: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our b8e0: 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 caller, before b8f0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d being returned.. b900: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54 . # T b910: 68 69 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 his step is nece b920: 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f ssary so that so b930: 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 me limited conte b940: 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d xt information,. b950: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 . # p b960: 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 rimarily related b970: 20 74 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 to the testing b980: 64 69 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e directories, can b990: 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d be transferred. b9a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t b9b0: 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 o the interprete b9c0: 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 r in the isolate b9d0: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f d application do b9e0: 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d main, making it. b9f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a ba00: 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 ble to successfu ba10: 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 lly run tests th ba20: 61 74 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f at require one o ba30: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 r more of the.. ba40: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c # fil ba50: 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 es in one of the ba60: 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f testing directo ba70: 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 ries. Callers s ba80: 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 hould keep in.. ba90: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e # min baa0: 64 20 74 68 61 74 20 74 68 65 20 74 65 73 74 20 d that the test bab0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment bac0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 being returned c bad0: 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 annot rely on.. bae0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 # any baf0: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 script library bb00: 70 72 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 procedures that bb10: 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 are not provided bb20: 20 62 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 by the Eagle.. bb30: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 # lib bb40: 72 61 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e rary package (i. bb50: 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 e. "init.eagle") bb60: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 , including thos bb70: 65 20 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 e provided by.. bb80: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the bb90: 20 45 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b Eagle test pack bba0: 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 age, unless the bbb0: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 file containing bbc0: 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a them is loaded.. bbd0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 # ma bbe0: 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 nually via some bbf0: 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 other mechanism bc00: 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 (e.g. by includi bc10: 6e 67 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a ng appropriate.. bc20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 # [p bc30: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 ackage require] bc40: 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d or [source] comm bc50: 61 6e 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 ands in the pref bc60: 69 78 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 ix or suffix.. bc70: 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69 # scri bc80: 70 74 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 pt fragments). bc90: 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 Also, all variab bca0: 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e le references an bcb0: 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 d all nested.. bcc0: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d # comm bcd0: 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 ands (i.e. those bce0: 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b in square brack bcf0: 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 ets) contained i bd00: 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 n the final.. bd10: 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 # scrip bd20: 74 20 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 t fragment will bd30: 65 6e 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 end up being eva bd40: 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f luated in the co bd50: 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 ntext of the.. bd60: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call bd70: 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 ing interpreter bd80: 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 and not the targ bd90: 65 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 et interpreter c bda0: 72 65 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 reated in the.. bdb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 6f # iso bdc0: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f lated applicatio bdd0: 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 n domain unless bde0: 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 the dollar signs bdf0: 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a and/or square.. be00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 72 # br be10: 61 63 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 ackets are speci be20: 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 ally quoted with be30: 20 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 backslashes... be40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re be50: 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 turn [uplevel 1 be60: 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 [list subst [app be70: 65 6e 64 41 72 67 73 20 24 70 72 65 66 69 78 20 endArgs$prefix
be80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
be90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
bea0: 65 20 5c 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d  e $object$ com
beb0: 6d 61 6e 64 20 6d 61 79 20 62 65 20 6d 69 73 73  mand may be miss
bec0: 69 6e 67 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c  ing in some Eagl
bed0: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20  e core..
bee0: 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20  #       library
bef0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 20  configurations.
bf00: 20 43 6c 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69   Cloning and usi
bf10: 6e 67 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  ng the procedure
bf20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
bf30: 20 20 5c 5b 63 68 61 6e 67 65 4e 61 74 69 76 65    $changeNative bf40: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 RuntimeOption$
bf50: 6d 61 79 20 68 65 6c 70 20 74 6f 20 6d 69 74 69  may help to miti
bf60: 67 61 74 65 20 74 68 69 73 2e 0d 0a 20 20 20 20  gate this...
bf70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 70      #..        p
bf80: 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65  roc changeNative
bf90: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d  RuntimeOption \.
bfa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 5b 69  .            {[i
bfb0: 6e 66 6f 20 61 72 67 73 20 63 68 61 6e 67 65 4e  nfo args changeN
bfc0: 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69  ativeRuntimeOpti
bfd0: 6f 6e 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20  on]} \..
bfe0: 20 20 20 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20      {[info body
bff0: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74  changeNativeRunt
c000: 69 6d 65 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20  imeOption]}....
c010: 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
c020: 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 67 65            change
c030: 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74  NativeRuntimeOpt
c040: 69 6f 6e 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f  ion [hasRuntimeO
c050: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20  ption native]..
c060: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
c070: 7d 20 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69  } [getTestOverri
c080: 64 65 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73  desPreamble [lis
c090: 74 20 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e  t path test_chan
c0a0: 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d  nel]] $suffix]]] c0b0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... c0c0: 70 72 6f 63 20 74 72 79 43 6f 70 79 45 78 74 65 proc tryCopyExte c0d0: 72 6e 61 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 rnalFile {.. c0e0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName c0f0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { c100: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 newFileName ""} c110: 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d {verbose true} } c120: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f {.. set so c130: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 urceFileName [ge c140: 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d tExternalFileNam c150: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a e$fileName]....
c160: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
c170: 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46   exists $sourceF c180: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { c190: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 .. if {$v
c1a0: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
c1b0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c1c0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel c1d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- c1f0: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 -- skipped copyi c200: 6e 67 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 ng external file c210: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
c220: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
c230: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f        "\", it do
c240: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d  es not exist\n"]
c250: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
c260: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20         return..
c270: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
c280: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
c290: 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d  th $newFileName] c2a0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. c2b0: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target c2c0: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e FileName [getBin c2d0: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 aryFileName$new
c2e0: 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  FileName $platfo c2f0: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 rm].. } els c300: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 e {.. set c310: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 targetFileName c320: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa c330: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl c340: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d atform].. } c350: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 .... set ta c360: 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 rgetDirectory [f c370: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 ile dirname$tar
c380: 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  getFileName]....
c390: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
c3a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
c3b0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74  ![file exists $t c3c0: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d argetDirectory]} c3d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c3e0: 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 file mkdir$t
c3f0: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a  argetDirectory..
c400: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
c410: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d       file copy -
c420: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c  force $sourceFil c430: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c eName$targetFil
c440: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20  eName..      }]
c450: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
c460: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t c470: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app c480: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. c490: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 "---- cop c4a0: 69 65 64 20 65 78 74 65 72 6e 61 6c 20 66 69 6c ied external fil c4b0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
c4c0: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74  ceFileName "\" t
c4d0: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  o \"" \..
c4e0: 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65       $targetFile c4f0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. c500: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. c510: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
c520: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
c530: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
c540: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65       "---- faile
c550: 64 20 74 6f 20 63 6f 70 79 20 65 78 74 65 72 6e  d to copy extern
c560: 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  al file from \""
c570: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName c580: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c590: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 "\" to \""$targ
c5a0: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
c5b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
c5c0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
c5d0: 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20  yCopyBinaryFile
c5e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
c5f0: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f  ileName managedO
c600: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  nly {platform ""
c610: 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22  } {newFileName "
c620: 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "}..
c630: 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d  {verbose true} }
c640: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f   {..      set so
c650: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65  urceFileName [ge
c660: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
c670: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
c680: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
c690: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
c6a0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d  $sourceFileName] c6b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c6c0: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
c6d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c6e0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ c6f0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA c700: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. c710: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp c720: 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 72 ed copying binar c730: 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 y file \""$sour
c740: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  ceFileName \..
c750: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
c760: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
c770: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
c780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
c790: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
c7a0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
c7b0: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c  g length $newFil c7c0: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then c7d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set c7e0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b targetFileName [ c7f0: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName c800: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c810: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 6d 61$newFileName $ma c820: 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 nagedOnly$platf
c830: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  orm]..      } el
c840: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
c850: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65  t targetFileName
c860: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
c870: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
c880: 20 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e    $fileName$man
c890: 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f  agedOnly $platfo c8a0: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rm].. }.... c8b0: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target c8c0: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 Directory [file c8d0: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 dirname$targetF
c8e0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....
c8f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
c900: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69          if {![fi
c910: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65  le exists $targe c920: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 tDirectory]} the c930: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f c940: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 ile mkdir$targe
c950: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  tDirectory..
c960: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
c970: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63   file copy -forc
c980: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  e $sourceFileNam c990: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d e$targetFileNam
c9a0: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30  e..      }] == 0
c9b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
c9c0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ c9d0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA c9e0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. c9f0: 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 "---- copied ca00: 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d binary file from ca10: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
ca20: 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20  Name "\" to \""
ca30: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $ca40: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ ca50: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c "\n].. } el ca60: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp ca70: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
ca80: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
ca90: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
caa0: 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63  ---- failed to c
cab0: 6f 70 79 20 62 69 6e 61 72 79 20 66 69 6c 65 20  opy binary file
cac0: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source cad0: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 FileName \.. cae0: 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c "\" to \ caf0: 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 ""$targetFileNa
cb00: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
cb10: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
cb20: 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 75 69   proc tryCopyBui
cb30: 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20  ldFile {..
cb40: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d        fileName m
cb50: 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74  anagedOnly {plat
cb60: 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c  form ""} {newFil
cb70: 65 4e 61 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20  eName ""}..
cb80: 20 20 20 20 20 20 20 7b 76 65 72 62 6f 73 65 20         {verbose
cb90: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
cba0: 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e   set sourceFileN
cbb0: 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ame [getBuildFil
cbc0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20  eName $fileName cbd0: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c$managedOnly $pl cbe0: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... cbf0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis cc00: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
cc10: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
cc20: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos cc30: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. cc40: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
cc50: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
cc60: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
cc70: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
cc80: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75  ipped copying bu
cc90: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f  ild file \"" $so cca0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a urceFileName \.. ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ ccc0: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e ccd0: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. cce0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 }.... r ccf0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. cd00: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str cd10: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 ing length$newF
cd20: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
cd30: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
cd40: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65  t targetFileName
cd50: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
cd60: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  ame $newFileName cd70: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
cd80: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
cd90: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46       set targetF
cda0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
cdb0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file cdc0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
cdd0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
cde0: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65    set targetDire
cdf0: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e  ctory [file dirn
ce00: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN ce10: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if ce20: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. ce30: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e ce40: 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 xists$targetDir
ce50: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
ce60: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
ce70: 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72  mkdir $targetDir ce80: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. ce90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 6c }.... fil cea0: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 e copy -force$s
ceb0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74  ourceFileName $t cec0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 argetFileName.. ced0: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th cee0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp cef0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
cf00: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
cf10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
cf20: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c  ---- copied buil
cf30: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  d file from \""
cf40: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName cf50: 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 "\" to \"" \.. cf60: 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65$targe
cf70: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
cf80: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
cf90: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $cfa0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ cfb0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. cfc0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- cfd0: 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 failed to copy b cfe0: 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c uild file from \ cff0: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
d000: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
d010: 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61    "\" to \"" $ta d020: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c rgetFileName \"\ d030: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. d040: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc d050: 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 tryDeleteBinaryF d060: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b ile { fileName { d070: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 platform ""} {ve d080: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. d090: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN d0a0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi d0b0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
d0c0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20   $platform].... d0d0: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file d0e0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
d0f0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
d100: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} d110: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. d120: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
d130: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
d140: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
d150: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70        "---- skip
d160: 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e  ped deleting bin
d170: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69  ary file \"" $fi d180: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. d190: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 "\", it d1a0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n d1b0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d "].. }... d1c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. d1d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... d1e0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi d1f0: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e le delete$fileN
d200: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
d210: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
d220: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe d230: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. d240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- d250: 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e 61 72 -- deleted binar d260: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 y file \""$file
d270: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
d280: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
d290: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes d2a0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen d2b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. d2c0: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 "---- faile d2d0: 64 20 74 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 d to delete bina d2e0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ry file \""$fil
d2f0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
d300: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
d310: 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65      proc tryDele
d320: 74 65 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20  teBuildFile {..
d330: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
d340: 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20  ame managedOnly
d350: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76  {platform ""} {v
d360: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b  erbose true} } {
d370: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
d380: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
d390: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName d3a0: 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70$managedOnly $p d3b0: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... d3c0: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi d3d0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
d3e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d3f0: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th d400: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. d410: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
d420: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
d430: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
d440: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64     "---- skipped
d450: 20 64 65 6c 65 74 69 6e 67 20 62 75 69 6c 64 20   deleting build
d460: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa d470: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. d480: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 "\", it does d490: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a not exist\n"].. d4a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... d4b0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 return.. d4c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if d4d0: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d d4e0: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
d4f0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
d500: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: d510: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a d520: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. d530: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d d540: 65 6c 65 74 65 64 20 62 75 69 6c 64 20 66 69 6c eleted build fil d550: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
d560: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
d570: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
d580: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha d590: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs d5a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d5b0: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to d5c0: 64 65 6c 65 74 65 20 62 75 69 6c 64 20 66 69 6c delete build fil d5d0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
d5e0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  \"\n]..      }..
d5f0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
d600: 6f 63 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62  oc tryCopyAssemb
d610: 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ly {..
d620: 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67    fileName manag
d630: 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d  edOnly {platform
d640: 20 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20   ""} {pdb true}
d650: 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d  {verbose true} }
d660: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70   {..      tryCop
d670: 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65  yBuildFile $file d680: 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c Name$managedOnl
d690: 79 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24  y $platform ""$
d6a0: 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20  verbose....
d6b0: 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20   if {$pdb} then d6c0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 43 6f {.. tryCo d6d0: 70 79 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 pyBuildFile [app d6e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. d6f0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f [file roo d700: 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d tname$fileName]
d710: 20 2e 70 64 62 5d 20 24 6d 61 6e 61 67 65 64 4f   .pdb] $managedO d720: 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 nly$platform ""
d730: 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20   $verbose.. d740: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... d750: 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 proc tryDelete d760: 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 Assembly {.. d770: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName d780: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { d790: 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f pdb true} {verbo d7a0: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 se true} } {.. d7b0: 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e tryDeleteBin d7c0: 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d aryFile$fileNam
d7d0: 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72  e $platform$ver
d7e0: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66  bose....      if
d7f0: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a   {$pdb} then {.. d800: 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet d810: 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 eBinaryFile [app d820: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. d830: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f [file roo d840: 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d tname$fileName]
d850: 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d   .pdb] $platform d860: 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20$verbose..
d870: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
d880: 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73    proc tryLoadAs
d890: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d  sembly { fileNam
d8a0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
d8b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
d8c0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
d8d0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file d8e0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
d8f0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
d900: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  tch {..        s
d910: 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a  et assembly [obj
d920: 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79  ect load -loadty
d930: 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24  pe File -alias $d940: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. d950: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { d960: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. d970: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 # NOTE: Now d980: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess d990: 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 ary test constra d9a0: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d int... #. d9b0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons d9c0: 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f traint [file roo d9d0: 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c tname [file tail d9e0: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a$fileName]]....
d9f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
da00: 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20     # NOTE: Grab
da10: 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  the image runtim
da20: 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74  e version from t
da30: 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61  he assembly beca
da40: 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  use..        #
da50: 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 65 73       several tes
da60: 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61  ts rely on it ha
da70: 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76  ving a certain v
da80: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  alue...        #
da90: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
daa0: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
dab0: 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  rgs [file tail $dac0: 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 fileName] _ \.. dad0: 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 73 73 [$ass
dae0: 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69  embly ImageRunti
daf0: 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20  meVersion]]....
db00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
db10: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
db20: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f   the full path o
db30: 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c  f the loaded fil
db40: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
db50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66         return $f db60: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } db70: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return db80: 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "".. }..... db90: 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65 proc isSQLite dba0: 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 Ready {} {.. dbb0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT dbc0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur dbd0: 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f e must return no dbe0: 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 n-zero only if t dbf0: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 he SQLite native dc00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # dc10: 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 20 library and the dc20: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi dc30: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d te managed assem dc40: 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a bly are loaded.. dc50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an dc60: 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 d ready for use dc70: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit dc80: 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 e. Currently, t dc90: 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 his procedure.. dca0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho dcb0: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e uld be called on dcc0: 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b 74 72 ly after the [tr dcd0: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 yLoadAssembly] p dce0: 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20 rocedure has.. dcf0: 20 20 20 20 23 20 20 20 20 20 20 20 62 65 65 6e # been dd00: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 called to probe dd10: 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e for the System. dd20: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 Data.SQLite mana dd30: 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 ged assembly.. dd40: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and dd50: 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c the [checkForSQL dd60: 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68 ite] procedure h dd70: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 as been called t dd80: 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 o probe for.. dd90: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S dda0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 QLite native lib ddb0: 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c rary; otherwise, ddc0: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure ddd0: 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 will simply.. dde0: 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 # alway ddf0: 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a s return zero... de00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r de10: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 eturn [expr {.. de20: 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons de30: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 traint System.Da de40: 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 ta.SQLite] && [h de50: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 aveConstraint SQ de60: 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d Lite].. }]. de70: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p de80: 72 6f 63 20 6d 61 74 63 68 50 6c 61 74 66 6f 72 roc matchPlatfor de90: 6d 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b m { platform } { dea0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. deb0: 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 # NOTE: An empt dec0: 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 y string for the ded0: 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 platform means dee0: 74 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 that the build i def0: 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 s not.. # df00: 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d [primarily] df10: 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b a native build; df20: 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 therefore, it a df30: 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a lways matches... df40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i df50: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt df60: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 h$platform] ==
df70: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
df80: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
df90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
dfa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
dfb0: 3a 20 49 66 20 74 68 65 20 6d 61 63 68 69 6e 65  : If the machine
dfc0: 20 6e 61 6d 65 20 69 73 20 75 6e 61 76 61 69 6c   name is unavail
dfd0: 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20 6e  able, there is n
dfe0: 6f 74 68 69 67 6e 20 65 6c 73 65 20 77 65 0d 0a  othign else we..
dff0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
e000: 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  n do...      #..
e010: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
e020: 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c   exists ::tcl_pl
e030: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d  atform(machine)]
e040: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e050: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
e060: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
e070: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
e080: 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69  : Does the speci
e090: 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61  fied platform ma
e0a0: 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75  tch up to the cu
e0b0: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a  rrent process?..
e0c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
e0d0: 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20  f {$platform eq e0e0: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f [machineToPlatfo e0f0: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f rm$::tcl_platfo
e100: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68  rm(machine)]} th
e110: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
e120: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
e130: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
e140: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
e150: 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66   specified platf
e160: 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  orm does not mat
e170: 63 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70  ch up with the p
e180: 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23  latform..      #
e190: 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63         for the c
e1a0: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
e1b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
e1c0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
e1d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
e1e0: 20 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63   haveSQLiteObjec
e1f0: 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20  tCommand {} {..
e200: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
e210: 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 5b 6f 62  NOTE: Is the [ob
e220: 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 75  ject] command cu
e230: 72 72 65 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c  rrently availabl
e240: 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e?..      #..
e250: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
e260: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20  {[llength [info
e270: 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d  commands object]
e280: 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a  ] > 0}]..    }..
e290: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
e2a0: 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74  kForSQLiteObject
e2b0: 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65  Command { channe
e2c0: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
e2d0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- e2e0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 5c - checking for \ e2f0: 22 6f 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e "object\" comman e300: 64 20 75 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a d usage... ".... e310: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info e320: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c exists ::no(sql e330: 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand e340: 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. e350: 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 [haveSQLiteOb e360: 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th e370: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp e380: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 uts$channel yes
e390: 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  \n..      } else
e3a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
e3b0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55         # NOTE: U
e3c0: 6e 6c 65 73 73 20 77 65 20 61 72 65 20 66 6f 72  nless we are for
e3d0: 62 69 64 64 65 6e 20 66 72 6f 6d 20 64 6f 69 6e  bidden from doin
e3e0: 67 20 73 6f 2c 20 61 64 64 20 73 6f 6d 65 20 63  g so, add some c
e3f0: 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20  onstraints..
e400: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74      #       that
e410: 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74   will allow most
e420: 20 6f 66 20 74 68 65 20 74 65 73 74 20 73 75 69   of the test sui
e430: 74 65 20 74 6f 20 72 75 6e 20 28 69 2e 65 2e 20  te to run (i.e.
e440: 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23  those..        #
e450: 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61         tests tha
e460: 74 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c  t do not directl
e470: 79 20 72 65 6c 79 20 75 70 6f 6e 20 74 68 65 20  y rely upon the
e480: 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64  [object] command
e490: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
e4a0: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
e4b0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68  o exists ::no(sh
e4c0: 69 6d 53 51 4c 69 74 65 41 73 73 65 6d 62 6c 79  imSQLiteAssembly
e4d0: 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74  Constraints)]} t
e4e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
e4f0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53   addConstraint S
e500: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20  QLite..
e510: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53   addConstraint S
e520: 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 20 20  QLiteInterop..
e530: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
e540: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74  raint System.Dat
e550: 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20  a.SQLite..
e560: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
e570: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
e580: 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d  Lite.Encryption.
e590: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f  .          addCo
e5a0: 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e  nstraint System.
e5b0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
e5c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64  ....          ad
e5d0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
e5e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e5f0: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
e600: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f  Data.SQLite.dll_
e610: 76 20 5b 67 65 74 42 75 69 6c 64 43 6c 72 56 65  v [getBuildClrVe
e620: 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 20  rsion]]..
e630: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
e640: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
e650: 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 44  ::no(shimSQLiteD
e660: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 43 6f 6e  efineConstantCon
e670: 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e  straints)]} then
e680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f   {..          fo
e690: 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73  reach defineCons
e6a0: 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  tant [list \..
e6b0: 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45              INTE
e6c0: 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55  ROP_EXTENSION_FU
e6d0: 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f  NCTIONS INTEROP_
e6e0: 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c  FTS5_EXTENSION \
e6f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e700: 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
e710: 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f  TENSION INTEROP_
e720: 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
e730: 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
e740: 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45        INTEROP_RE
e750: 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49  GEXP_EXTENSION I
e760: 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45  NTEROP_TEST_EXTE
e770: 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
e780: 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53         INTEROP_S
e790: 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e  ESSION_EXTENSION
e7a0: 20 49 4e 54 45 52 4f 50 5f 53 48 41 31 5f 45 58   INTEROP_SHA1_EX
e7b0: 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
e7c0: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
e7d0: 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f  _TOTYPE_EXTENSIO
e7e0: 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  N INTEROP_VIRTUA
e7f0: 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20  L_TABLE \..
e800: 20 20 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54           USE_INT
e810: 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20  EROP_DLL] {..
e820: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73           addCons
e830: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
e840: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
e850: 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
e860: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72  DefineConstantPr
e870: 65 66 69 78 5d 20 24 64 65 66 69 6e 65 43 6f 6e  efix] $defineCon e880: 73 74 61 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 stant].. e890: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. e8a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ e8b0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no e8c0: 28 73 68 69 6d 53 51 4c 69 74 65 56 69 73 75 61 (shimSQLiteVisua e8d0: 6c 53 74 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e lStudioConstrain e8e0: 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ts)]} then {.. e8f0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst e900: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg e910: 73 20 76 69 73 75 61 6c 53 74 75 64 69 6f 20 5b s visualStudio [ e920: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a getBuildYear]].. e930: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... e940: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
e950: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20  nel no\n..
e960: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
e970: 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69   proc changeNati
e980: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  veRuntimeOption
e990: 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20  { native } {..
e9a0: 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
e9b0: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20   [info commands
e9c0: 64 65 62 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c  debug]] > 0 && \
e9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65  ..          [lle
e9e0: 6e 67 74 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f  ngth [info subco
e9f0: 6d 6d 61 6e 64 73 20 64 65 62 75 67 20 72 75 6e  mmands debug run
ea00: 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30  timeoption]] > 0
ea10: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20   && [catch {..
ea20: 20 20 20 20 20 20 64 65 62 75 67 20 72 75 6e 74        debug runt
ea30: 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20  imeoption [expr
ea40: 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22  {$native ? "add" ea50: 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61 : "remove"}] na ea60: 74 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d tive.. }] = ea70: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. ea80: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true ea90: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... eaa0: 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi eab0: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] eac0: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. ead0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv eae0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e oke Interpreter. eaf0: 47 65 74 41 63 74 69 76 65 20 5b 65 78 70 72 20 GetActive [expr eb00: 7b 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 {$native ? \..
eb10: 20 20 20 20 20 20 20 20 20 20 22 41 64 64 52 75            "AddRu
eb20: 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22  ntimeOption" : "
eb30: 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74  RemoveRuntimeOpt
eb40: 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20  ion"}] native..
eb50: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
eb60: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
eb70: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
eb80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
eb90: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d  rn false..    }.
eba0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
ebb0: 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64  ckForSQLiteBuild
ebc0: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c  s { channel {sel
ebd0: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ect false} } {..
ebe0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
ebf0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
ec00: 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20   every possible
ec10: 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f  valid combinatio
ec20: 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  n of values used
ec30: 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20   when..      #
ec40: 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75       locating ou
ec50: 74 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70  t the build outp
ec60: 75 74 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68  ut directory, sh
ec70: 6f 77 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c  owing each avail
ec80: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20  able..      #
ec90: 20 20 20 20 62 75 69 6c 64 20 76 61 72 69 61 74      build variat
eca0: 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61  ion along the wa
ecb0: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
ecc0: 20 20 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76     foreach nativ
ecd0: 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72  e [list false tr
ece0: 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66  ue] {..        f
ecf0: 6f 72 65 61 63 68 20 79 65 61 72 20 5b 67 65 74  oreach year [get
ed00: 42 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20  BuildYears] {..
ed10: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
ed20: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b   configuration [
ed30: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
ed40: 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20  ations] {..
ed50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
ed60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
ed70: 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 66 66  gure out the eff
ed80: 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61  ective build pla
ed90: 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d  tform.  This is.
eda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
edb0: 20 20 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68       based on wh
edc0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b  ether or not a [
edd0: 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76  primarily] nativ
ede0: 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20  e build..
edf0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is
ee00: 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72  being used.  For
ee10: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e   [primarily] non
ee20: 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d  -native builds,.
ee30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
ee40: 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62       this will b
ee50: 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  e an empty strin
ee60: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...
ee70: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  #..            s
ee80: 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74  et platform [get
ee90: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e  BuildPlatform $n eea0: 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 ative].... eeb0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
eec0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
eed0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
eee0: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
eef0: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ng for System.Da
ef00: 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20  ta.SQLite build
ef10: 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20  \"" [expr \..
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e               {$n ef30: 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f ative ? "native/ ef40: 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b " : ""}] [expr { ef50: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c [string length \ ef60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ef70: 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30$platform] > 0
ef80: 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24   ? [appendArgs $ef90: 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 platform /] : "" efa0: 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 }]$year \..
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 63              / $c efc0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 onfiguration "\" efd0: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 ... "].... efe0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. eff0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui f000: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 ld the fully qua f010: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 lified directory f020: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 where the neces f030: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 sary.. f040: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e # compon f050: 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e ents for System. f060: 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 Data.SQLite shou f070: 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 ld be found... f080: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. f090: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 set dir f0a0: 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c ectory [joinBuil f0b0: 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 dDirectory$nati
f0c0: 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ve \..
f0d0: 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42        [getBuildB
f0e0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79  aseDirectory] $y f0f0: 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 ear$platform $c f100: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d onfiguration]... f110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. f120: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO f130: 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73 TE: Do the neces f140: 73 61 72 79 20 66 69 6c 65 73 20 65 78 69 73 74 sary files exist f150: 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f ? Currently, no f160: 20 6f 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20 other steps.. f170: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # f180: 20 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 are taken to v f190: 65 72 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 erify this build f1a0: 20 69 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61 is actually via f1b0: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ble... f1c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. f1d0: 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 if {[isBuildAva f1e0: 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24 ilable$native $f1f0: 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e directory]} then f200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. f210: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. f220: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 # NOTE: When f230: 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 in "select" mode f240: 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 , automatically f250: 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 select the first f260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f270: 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c # availabl f280: 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 e build of Syste f290: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e m.Data.SQLite an f2a0: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 d then return.. f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # f2c0: 20 20 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 immediately f2d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... f2e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. f2f0: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 if {$select &&
f300: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20   [matchPlatform
f310: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e  $platform]} then f320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. f330: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. f340: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d # NOTE: M f350: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 anually override f360: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64 all the build d f370: 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69 irectory selecti f380: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. f390: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 61 # rela f3a0: 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e 67 ted test setting f3b0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f s in order to fo f3c0: 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a rce this build.. f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f3e0: 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 74 65 # of Syste f3f0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f m.Data.SQLite to f400: 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 be used... f410: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. f420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if f430: 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 {![changeNative f440: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e RuntimeOption$n
f450: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ative]} then {..
f460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f470: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel f480: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f4a0: 20 20 20 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65 "no, faile f4b0: 64 20 74 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e d to " [expr {$n
f4c0: 61 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20  ative ? "add" :
f4d0: 22 72 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20  "remove"}] \..
f4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f4f0: 20 20 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69      " the \"nati
f500: 76 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ve\" runtime opt
f510: 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20  ion\n"]....
f520: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
f530: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  urn false..
f540: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f560: 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20  set ::test_year
f570: 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20  $year.. f580: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 set ::tes f590: 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 t_platform$plat
f5a0: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..
f5b0: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74        set ::test
f5c0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24  _configuration $f5d0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d configuration... f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . f5f0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
f600: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f620: 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65     "yes, selecte
f630: 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74  d (" [expr {$nat f640: 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 ive ? "native/" f650: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 : ""}] \.. f660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 [e f670: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e xpr {[string len f680: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
f690: 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73   0 ? [appendArgs
f6a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f6b0: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor f6c0: 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 m /] : ""}]$yea
f6d0: 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69  r / $configurati f6e0: 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 on ")\n"].... f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret f700: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. f710: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { f720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f730: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
f740: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20   yes\n..
f750: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
f760: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
f780: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n f790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. f7a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. f7b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } f7c0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return f7d0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c false.. }... f7e0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b .. proc check f7f0: 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 ForSQLiteRelease f800: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c s { channel {sel f810: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ect false} } {.. f820: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # f830: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for f840: 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f past releases o f850: 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 f System.Data.SQ f860: 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 Lite in the dire f870: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 ctory.. # f880: 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 contained i f890: 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 n the "System.Da f8a0: 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 ta.SQLite" envir f8b0: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c onment variable, f8c0: 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 if.. # f8d0: 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 present... f8e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { f8f0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 [info exists ::e f900: 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nv(System.Data.S f910: 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 QLite)] && \.. f920: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string f930: 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 length$::env(Sy
f940: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
f950: 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  )] > 0} then {..
f960: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f970: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
f980: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69   the fully quali
f990: 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77  fied directory w
f9a0: 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61  here the necessa
f9b0: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ry..        #
f9c0: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66      components f
f9d0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
f9e0: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20  QLite should be
f9f0: 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20  found...
fa00: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64  #..        set d
fa10: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e  irectory [file n
fa20: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
fa30: 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
fa40: 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65      $::env(Syste fa50: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b m.Data.SQLite) [ fa60: 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f getReleaseVersio fa70: 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 n]]].... fa80: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
fa90: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
faa0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
fab0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73  checking for Sys
fac0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
fad0: 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20  release \"" \..
fae0: 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65             $dire faf0: 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d ctory "\"... "]. fb00: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ fb10: 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 isReleaseAvailab fb20: 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c le$directory pl
fb30: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
fb40: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
fb50: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p fb60: 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 latform] == 0} t fb70: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. fb80: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform fb90: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. fba0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... fbb0: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 if {$select &&
fbc0: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20   [matchPlatform
fbd0: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e  $platform]} then fbe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. fbf0: 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 set ::build_dire fc00: 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 ctory$directory
fc10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
fc20: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ fc30: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c appendArgs "yes, fc40: 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c selected ("$pl
fc50: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d  atform ")\n"]...
fc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
fc70: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
fc80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
fc90: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
fca0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append fcb0: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c Args "yes ("$pl
fcc0: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20  atform ")\n"]..
fcd0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
fce0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
fcf0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c fd00: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 hannel no\n.... fd10: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 if {![f fd20: 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65 ile exists$dire
fd30: 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20  ctory] || \..
fd40: 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c             ![fil
fd50: 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 64  e isdirectory $d fd60: 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 irectory]} then fd70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t fd80: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
fd90: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
fdb0: 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  -- environment v
fdc0: 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d  ariable \"System
fdd0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69  .Data.SQLite\" i
fde0: 73 20 61 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20  s an " \..
fdf0: 20 20 20 20 20 20 20 20 20 20 22 69 6e 76 61 6c            "inval
fe00: 69 64 20 64 69 72 65 63 74 6f 72 79 2c 20 73 6b  id directory, sk
fe10: 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72  ipping check for
fe20: 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d   releases...\n"]
fe30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
fe40: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
fe50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
fe60: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70         foreach p
fe70: 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72  ath [lsort -decr
fe80: 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73  easing [file lis
fe90: 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d  t $directory *]] fea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. feb0: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 if {[file exists fec0: 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 6c 65$path] && [file
fed0: 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 70 61   isdirectory $pa fee0: 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 th]} then {.. fef0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs ff00: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
ff10: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
ff20: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
ff30: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
ff40: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
ff50: 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a   release \"" \..
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ff70: 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22    $path "\"... " ff80: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... ff90: 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 if {[isReleas ffa0: 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 74 68 eAvailable$path
ffb0: 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e   platform]} then
ffc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
ffd0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
ffe0: 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform fff0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10010 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 set platform u 10020 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. 10030 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 10040 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 10050 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 {$select && [mat
10060 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74  chPlatform $plat 10070 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 form]} then {.. 10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10090 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 set ::build_dir 100a0 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a ectory$path....
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
100c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 100d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 [appendArgs "ye 100e0 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 s, selected ("$
100f0 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d  platform ")\n"].
10100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
10110 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
10120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10130 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
10150 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 10160 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 pendArgs "yes (" 10170 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22$platform ")\n"
10180 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
10190 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
101a0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
101c0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ 101d0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. 101e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 101f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 10200 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 10210 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 10220 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10230 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
10240 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
10250 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  -- environment v
10260 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d  ariable \"System
10270 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69  .Data.SQLite\" i
10280 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20  s not " \..
10290 20 20 20 20 20 20 20 22 73 65 74 2c 20 73 6b 69         "set, ski
102a0 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20  pping check for
102b0 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d  releases...\n"].
102c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
102d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
102e0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
102f0 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
10300 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61 6e 6e  eLibrary { chann
10310 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  el } {..      tp
10320 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 10330 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for 10340 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 10350 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ary... ".... 10360 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 10370 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 10380 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 10390 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 103a0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 103b0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 103c0 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 3 SQLiteVersion. 103d0 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e . } version 103e0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 103f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10400 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 10410 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 if the returned 10420 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c version was nul 10430 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 l. If so, make 10440 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 it easy.. 10450 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 # to spot 10460 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10470 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 10480 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f g length$versio
10490 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  n] == 0} then {.
104a0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76  .          set v
104b0 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20  ersion null..
104c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
104d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
104e0 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
104f0 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c  query the Fossil
10500 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69   source identifi
10510 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  er for the SQLit
10520 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
10530 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e     core library.
10540 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10550 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
10560 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
10570 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
10580 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
105a0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
105b0 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 53  .SQLite3 SQLiteS
105c0 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..
105d0 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68   } sourceId]} th
105e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
105f0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
10600 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74  OTE: We failed t
10610 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
10620 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
10630 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  fier...
10640 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
10650 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f  t sourceId unkno
10660 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  wn..        }...
10670 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
10680 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
10690 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65  k if the returne
106a0 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20  d Fossil source
106b0 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e  identifier was n
106c0 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20  ull.  If..
106d0 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61    #       so, ma
106e0 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 70  ke it easy to sp
106f0 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
10700 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
10710 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72  ing length $sour 10720 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then 10730 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 10740 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d t sourceId null. 10750 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 10760 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10770 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 # NOTE: Yes, th 10780 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 e SQLite core li 10790 62 72 61 72 79 20 61 70 70 65 61 72 73 20 74 6f brary appears to 107a0 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a be available... 107b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 107c0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 107d0 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 SQLite.... 107e0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
107f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79  l [appendArgs "y
10800 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22  es (" $version " 10810 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c "$sourceId ")\
10820 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  n"]..      } els
10830 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
10840 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n 10850 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 10860 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 ..... proc ch 10870 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 eckForSQLiteInte 10880 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 rop { channel } 10890 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 {.. tputs$
108a0 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
108b0 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 74  ecking for SQLit
108c0 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
108d0 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ly... "....
108e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
108f0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
10900 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
10910 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
10920 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
10930 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33  a.SQLite.SQLite3
10940 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d   InteropVersion.
10950 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e  .      } version
10960 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
10970 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10980 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
10990 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64   if the returned
109a0 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c   version was nul
109b0 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20  l.  If so, make
109c0 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20  it easy..
109d0 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74   #       to spot
109e0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
109f0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
10a00 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f  g length $versio 10a10 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. 10a20 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 . set v 10a30 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 ersion null.. 10a40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10a50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 10a60 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 10a70 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c query the Fossil 10a80 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 source identifi 10a90 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 er for the SQLit 10aa0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 10ab0 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e core library. 10ac0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10ad0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 10ae0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 10af0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 10b00 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 10b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 10b20 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 10b30 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 .SQLite3 Interop 10b40 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 SourceId.. 10b50 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 } sourceId]} t 10b60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 10b70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 10b80 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 NOTE: We failed 10b90 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos 10ba0 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident 10bb0 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 ifier... 10bc0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 10bd0 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e et sourceId unkn 10be0 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a own.. }.. 10bf0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 10c10 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return 10c20 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 ed Fossil source 10c30 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 identifier was 10c40 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 null. If.. 10c50 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d # so, m 10c60 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 ake it easy to s 10c70 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d pot... #. 10c80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 10c90 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 ring length$sou
10ca0 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65  rceId] == 0} the
10cb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
10cc0 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
10cd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
10ce0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10cf0 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f 72 65    # NOTE: Before
10d00 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69 6e 67   actually adding
10d10 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72   the test constr
10d20 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72 65 20  aint, make sure
10d30 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
10d40 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69 73 20       version is
10d50 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f 74 20  valid (i.e. not
10d60 6a 75 73 74 20 74 68 61 74 20 77 65 20 63 6f 75  just that we cou
10d70 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d 0a 20  ld query it)...
10d80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10d90 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e 20 6e    if {$version n 10da0 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b e "null"} then { 10db0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 10dc0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 10dd0 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74 65 Yes, the SQLite 10de0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 10df0 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 y appears to be 10e00 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... 10e10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10e20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 10e30 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a SQLiteInterop.. 10e40 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 10e50 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20 20 20 answer yes.. 10e60 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 10e70 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 77 set answ 10e80 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20 20 7d er no.. } 10e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 10ea0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10eb0 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72 20 22  ndArgs $answer " 10ec0 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 ("$version " "
10ed0 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22   $sourceId ")\n" 10ee0 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 10ef0 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 10f00 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a$channel no\n..
10f10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
10f20 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
10f30 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65  kForSQLiteDefine
10f40 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e  Constant { chann
10f50 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  el name } {..
10f60 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 10f70 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 10f80 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d . "---- 10f90 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 10fa0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 10fb0 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 define constant 10fc0 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 \""$name \..
10fd0 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22          "\"... "
10fe0 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
10ff0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
11000 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
11010 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
11020 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11030 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
11040 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e  te.SQLite3 Defin
11050 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20  eConstants..
11060 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61    } defineConsta
11070 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
11080 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
11090 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d  lsearch -exact -
110a0 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43 6f  nocase $defineCo 110b0 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 nstants$name] !
110c0 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  = -1} then {..
110d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
110e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
110f0 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63 6f  , this define co
11100 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62 6c  nstant was enabl
11110 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e 61  ed when the mana
11120 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ged..          #
11130 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
11140 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20  was compiled...
11150 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
11160 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
11170 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
11180 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65  [getSQLiteDefine
11190 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d 20  ConstantPrefix]
111a0 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  $name].... 111b0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
111c0 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20  el yes\n..
111d0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
111e0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 111f0 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 nnel no\n.. 11200 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 11210 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 11220 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 uts$channel err
11230 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  or\n..      }..
11240 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
11250 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
11260 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 7b 20  CompileOption {
11270 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b  channel name } {
11280 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63  ..      tputs $c 11290 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 112a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 112b0 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 112c0 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f or SQLite intero 112d0 70 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 p assembly compi 112e0 6c 65 20 6f 70 74 69 6f 6e 20 5c 22 22 20 5c 0d le option \"" \. 112f0 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 .$name
11300 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20   "\"... "]....
11310 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
11320 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
11330 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
11340 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
11350 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
11360 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
11370 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69  te3 InteropCompi
11380 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  leOptions..
11390 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e   } compileOption
113a0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
113b0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73  .        if {[ls
113c0 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f  earch -exact -no
113d0 63 61 73 65 20 24 63 6f 6d 70 69 6c 65 4f 70 74  case $compileOpt 113e0 69 6f 6e 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d ions$name] != -
113f0 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  1} then {..
11400 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11410 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74    # NOTE: Yes, t
11420 68 69 73 20 63 6f 6d 70 69 6c 65 20 6f 70 74 69  his compile opti
11430 6f 6e 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77  on was enabled w
11440 68 65 6e 20 74 68 65 20 69 6e 74 65 72 6f 70 0d  hen the interop.
11450 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
11460 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20     assembly was
11470 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20  compiled...
11480 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11490 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
114a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 74  [appendArgs [get
114b0 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74  SQLiteCompileOpt
114c0 69 6f 6e 50 72 65 66 69 78 5d 20 24 6e 61 6d 65  ionPrefix] $name 114d0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 ].... t 114e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 puts$channel ye
114f0 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  s\n..        } e
11500 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
11510 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 11520 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d no\n.. }. 11530 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 11540 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
11550 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d  channel error\n.
11560 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
11570 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 11580 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 11590 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 115a0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c checking for SQL 115b0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 115c0 20 63 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 compile option 115d0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 115e0 20 24 6e 61 6d 65 20 22 5c 22 2e 2e 2e 20 22 5d$name "\"... "]
115f0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
11600 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
11610 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
11620 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
11630 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
11640 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
11650 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65  e.SQLite3 SQLite
11660 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a  CompileOptions..
11670 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f        } compileO
11680 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68  ptions] == 0} th
11690 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
116a0 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63   {[lsearch -exac
116b0 74 20 2d 6e 6f 63 61 73 65 20 24 63 6f 6d 70 69  t -nocase $compi 116c0 6c 65 4f 70 74 69 6f 6e 73 20 24 6e 61 6d 65 5d leOptions$name]
116d0 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a   != -1} then {..
116e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
116f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
11700 65 73 2c 20 74 68 69 73 20 63 6f 6d 70 69 6c 65  es, this compile
11710 20 6f 70 74 69 6f 6e 20 77 61 73 20 65 6e 61 62   option was enab
11720 6c 65 64 20 77 68 65 6e 20 74 68 65 20 53 51 4c  led when the SQL
11730 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ite..          #
11740 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
11750 61 72 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  ary was compiled
11760 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
11770 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
11780 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
11790 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 43 6f  rgs [getSQLiteCo
117a0 6d 70 69 6c 65 4f 70 74 69 6f 6e 50 72 65 66 69  mpileOptionPrefi
117b0 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  x] $name].... 117c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
117d0 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20  annel yes\n..
117e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
117f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $11800 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. 11810 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 11820 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 11830 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11840 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d  error\n..      }
11850 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
11860 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65  proc getDateTime
11870 46 6f 72 6d 61 74 20 7b 20 7b 74 69 6d 65 5a 6f  Format { {timeZo
11880 6e 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  ne true} } {..
11890 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
118a0 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
118b0 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72  ure simply retur
118c0 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22  ns the "default"
118d0 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
118e0 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20   used..      #
118f0 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74       by the test
11900 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23   suite...      #
11910 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
11920 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74  o exists ::datet
11930 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c  ime_format] && \
11940 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
11950 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61  ing length $::da 11960 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e tetime_format] > 11970 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 11980 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 11990 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th 119a0 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 e manually overr 119b0 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 idden value for 119c0 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 the DateTime for 119d0 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d mat... #. 119e0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 119f0 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d$::datetime_form
11a00 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  at..      } else
11a10 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
11a20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
11a30 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31  eturn an ISO8601
11a40 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
11a50 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68   compatible with
11a60 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20   SQLite,..
11a70 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d    #       System
11a80 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e  .Data.SQLite, an
11a90 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72  d suitable for r
11aa0 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69  ound-tripping wi
11ab0 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  th the..
11ac0 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65  #       DateTime
11ad0 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72   class of the fr
11ae0 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69  amework.  If thi
11af0 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67  s value is chang
11b00 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ed,..        #
11b10 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73       various tes
11b20 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20  ts may fail...
11b30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11b40 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41   return [appendA
11b50 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
11b60 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48     "yyyy-MM-dd H
11b70 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22  H:mm:ss.FFFFFFF"
11b80 20 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f 6e   [expr {$timeZon 11b90 65 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d 0d e ? "K" : ""}]]. 11ba0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 11bb0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 11bc0 44 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b 20 DateTimeTicks { 11bd0 76 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22 7d value {local ""} 11be0 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d 20 {default ""} } 11bf0 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 {.. if {[st 11c00 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c ring length$val
11c10 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ue] == 0} then {
11c20 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11c30 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20   $default.. 11c40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 11c50 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 11c60 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b set dateTime [ 11c70 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 object invoke -c 11c80 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20 20 reate \.. 11c90 20 20 20 20 20 2d 70 61 72 61 6d 65 74 65 72 74 -parametert 11ca0 79 70 65 73 20 5b 6c 69 73 74 20 53 74 72 69 6e ypes [list Strin 11cb0 67 20 53 74 72 69 6e 67 20 49 46 6f 72 6d 61 74 g String IFormat 11cc0 50 72 6f 76 69 64 65 72 20 5c 0d 0a 20 20 20 20 Provider \.. 11cd0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 47 System.G 11ce0 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 2e 44 61 74 lobalization.Dat 11cf0 65 54 69 6d 65 53 74 79 6c 65 73 5d 20 44 61 74 eTimeStyles] Dat 11d00 65 54 69 6d 65 20 50 61 72 73 65 45 78 61 63 74 eTime ParseExact 11d10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11d20 24 76 61 6c 75 65 20 5b 67 65 74 44 61 74 65 54$value [getDateT
11d30 69 6d 65 46 6f 72 6d 61 74 5d 20 6e 75 6c 6c 20  imeFormat] null
11d40 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 61  AdjustToUniversa
11d50 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d 7d 20 74 68  l]..      }]} th
11d60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
11d70 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20  turn $default.. 11d80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 11d90 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 62 if {[string is b 11da0 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 63 74 20 24 oolean -strict$
11db0 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e 20 7b 0d 0a  local]} then {..
11dc0 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 65          set date
11dd0 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76  Time [object inv
11de0 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 61 74 65  oke -create Date
11df0 54 69 6d 65 20 53 70 65 63 69 66 79 4b 69 6e 64  Time SpecifyKind
11e00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11e10 24 64 61 74 65 54 69 6d 65 20 55 74 63 5d 0d 0a  $dateTime Utc].. 11e20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 11e30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 11e40 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 object invoke$d
11e50 61 74 65 54 69 6d 65 20 54 69 63 6b 73 5d 0d 0a  ateTime Ticks]..
11e60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
11e70 20 69 66 20 7b 24 6c 6f 63 61 6c 7d 20 74 68 65   if {$local} the 11e80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 11e90 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f urn [object invo 11ea0 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f 4c ke$dateTime ToL
11eb0 6f 63 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d 0d  ocalTime.Ticks].
11ec0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
11ed0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
11ee0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $11ef0 64 61 74 65 54 69 6d 65 20 54 6f 55 6e 69 76 65 dateTime ToUnive 11f00 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d 0d rsalTime.Ticks]. 11f10 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 11f20 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 11f30 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62 6a Properties { obj 11f40 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d ect varName } {. 11f50 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
11f60 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74 69  varName properti
11f70 65 73 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20  es....      set
11f80 63 6f 75 6e 74 20 30 0d 0a 20 20 20 20 20 20 73  count 0..      s
11f90 65 74 20 6e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d  et names [list].
11fa0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73  ...      if {[is
11fb0 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 6f 62  ObjectHandle $ob 11fc0 6a 65 63 74 5d 20 26 26 20 24 6f 62 6a 65 63 74 ject] &&$object
11fd0 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e   ne "null"} then
11fe0 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c   {..        eval
11ff0 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 5b   lappend names [
12000 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 5c  object members \
12010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d  ..            -m
12020 65 6d 62 65 72 74 79 70 65 73 20 50 72 6f 70 65  embertypes Prope
12030 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 6f  rty -nameonly $o 12040 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 bject].... 12050 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e eval lappend n 12060 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65 6d ames [object mem 12070 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 bers \.. 12080 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70 65 73 -membertypes 12090 20 46 69 65 6c 64 20 2d 6e 61 6d 65 6f 6e 6c 79 Field -nameonly 120a0 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 20 20$object]..
120b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65   }....      fore
120c0 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20  ach name $names 120d0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 120e0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 120f0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 12100 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e -objectflags +N 12110 6f 44 69 73 70 6f 73 65 20 24 6f 62 6a 65 63 74 oDispose$object
12120 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20   $name.. 12130 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 } value] == 0} t 12140 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 12150 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61 if {[isObjectHa 12160 6e 64 6c 65 20 24 76 61 6c 75 65 5d 20 26 26 20 ndle$value] &&
12170 24 76 61 6c 75 65 20 6e 65 20 22 6e 75 6c 6c 22  $value ne "null" 12180 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12190 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72 20 set error 121a0 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 20 69 6e 76 null; object inv 121b0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 121c0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 121d0 20 20 20 20 20 20 20 20 20 2d 6d 61 72 73 68 61 -marsha 121e0 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 6e 64 6c 65 lflags +NoHandle 121f0 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 12200 41 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 Active \.. 12210 20 20 20 20 20 20 20 20 20 20 41 64 64 4f 62 6a AddObj 12220 65 63 74 52 65 66 65 72 65 6e 63 65 20 4f 6b 20 ectReference Ok 12230 24 76 61 6c 75 65 20 65 72 72 6f 72 0d 0a 0d 0a$value error....
12240 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70              lapp
12250 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28 6f  end properties(o
12260 62 6a 65 63 74 73 29 20 5b 6c 69 73 74 20 24 6e  bjects) [list $n 12270 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20 20 ame$value]..
12280 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
12290 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
122a0 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28  pend properties(
122b0 76 61 6c 75 65 73 29 20 5b 6c 69 73 74 20 24 6e  values) [list $n 122c0 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20 20 ame$value]..
122d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
122e0 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75 6e 74        incr count
122f0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
12300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61   {..          la
12310 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73  ppend properties
12320 28 65 72 72 6f 72 73 29 20 5b 6c 69 73 74 20 24  (errors) [list $12330 6e 61 6d 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 name$::errorCod
12340 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e]..        }..
12350 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
12360 72 65 74 75 72 6e 20 24 63 6f 75 6e 74 0d 0a 20  return $count.. 12370 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 12380 63 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74 69 c getAllProperti 12390 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72 4e es { object varN 123a0 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 ame } {.. u 123b0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
123c0 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  properties..
123d0 20 20 73 65 74 20 76 61 6c 75 65 20 24 6f 62 6a    set value $obj 123e0 65 63 74 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 ect.... whi 123f0 6c 65 20 7b 74 72 75 65 7d 20 7b 0d 0a 20 20 20 le {true} {.. 12400 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 12410 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 65 exists propertie 12420 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d 20 s(seenObjects)] 12430 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 12440 20 20 24 76 61 6c 75 65 20 6e 69 20 24 70 72 6f$value ni $pro 12450 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 perties(seenObje 12460 63 74 73 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 cts)} then {.. 12470 20 20 20 20 20 20 20 20 67 65 74 50 72 6f 70 65 getPrope 12480 72 74 69 65 73 20 24 76 61 6c 75 65 20 70 72 6f rties$value pro
12490 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..
124a0 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 65     lappend prope
124b0 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74  rties(seenObject
124c0 73 29 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20  s) $value.. 124d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 124e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 124f0 73 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a s properties(obj 12500 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ects)]} then {.. 12510 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0d break. 12520 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 12530 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 12540 74 68 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f th$properties(o
12550 62 6a 65 63 74 73 29 5d 20 3d 3d 20 30 7d 20 74  bjects)] == 0} t
12560 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
12570 20 75 6e 73 65 74 20 70 72 6f 70 65 72 74 69 65   unset propertie
12580 73 28 6f 62 6a 65 63 74 73 29 3b 20 62 72 65 61  s(objects); brea
12590 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  k..        }....
125a0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
125b0 65 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e 64 65  e [lindex [linde
125c0 78 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f 62  x $properties(ob 125d0 6a 65 63 74 73 29 20 30 5d 20 65 6e 64 5d 0d 0a jects) 0] end].. 125e0 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f 70 set prop 125f0 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 erties(objects) 12600 5b 6c 72 61 6e 67 65 20 24 70 72 6f 70 65 72 74 [lrange$propert
12610 69 65 73 28 6f 62 6a 65 63 74 73 29 20 31 20 65  ies(objects) 1 e
12620 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  nd]..      }....
12630 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
12640 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 65  exists propertie
12650 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d 7d  s(seenObjects)]}
12660 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12670 20 66 6f 72 65 61 63 68 20 76 61 6c 75 65 20 24   foreach value $12680 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f properties(seenO 12690 62 6a 65 63 74 73 29 20 7b 0d 0a 20 20 20 20 20 bjects) {.. 126a0 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65 20 if {$value
126b0 65 71 20 24 6f 62 6a 65 63 74 7d 20 63 6f 6e 74  eq $object} cont 126c0 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 inue.. 126d0 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 catch {object di 126e0 73 70 6f 73 65 20 24 76 61 6c 75 65 7d 0d 0a 20 spose$value}..
126f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
12700 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65 72      unset proper
12710 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73  ties(seenObjects
12720 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  )..      }..
12730 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
12740 65 74 56 61 72 69 61 62 6c 65 73 20 7b 20 76 61  etVariables { va
12750 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 63 74 73 20  rNames {objects
12760 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
12770 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
12780 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  st]....      for
12790 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61  each varName $va 127a0 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 rNames {.. 127b0 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20 31 if {[uplevel 1 127c0 20 5b 6c 69 73 74 20 61 72 72 61 79 20 65 78 69 [list array exi 127d0 73 74 73 20 24 76 61 72 4e 61 6d 65 5d 5d 7d 20 sts$varName]]}
127e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
127f0 20 20 73 65 74 20 61 72 72 61 79 4e 61 6d 65 20    set arrayName
12800 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20  $varName.... 12810 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 65 6c foreach el 12820 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 70 6c 65 76 ementName [uplev 12830 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61 79 el 1 [list array 12840 20 6e 61 6d 65 73 20 24 61 72 72 61 79 4e 61 6d names$arrayNam
12850 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  e]] {..
12860 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 61 70 70     set name [app
12870 65 6e 64 41 72 67 73 20 24 61 72 72 61 79 4e 61  endArgs $arrayNa 12880 6d 65 20 28 20 24 65 6c 65 6d 65 6e 74 4e 61 6d me ($elementNam
12890 65 20 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  e )]..
128a0 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 5b    set varValue [
128b0 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
128c0 73 65 74 20 24 6e 61 6d 65 5d 5d 0d 0a 0d 0a 20  set $name]].... 128d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 if {$
128e0 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f 62  objects && [isOb
128f0 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 56  jectHandle $varV 12900 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 alue]} then {.. 12910 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 uns 12920 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 et -nocomplain p 12930 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 roperties.. 12940 20 20 20 20 20 20 20 20 20 67 65 74 41 6c 6c 50 getAllP 12950 72 6f 70 65 72 74 69 65 73 20 24 76 61 72 56 61 roperties$varVa
12960 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a  lue properties..
12970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12980 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
12990 6c 69 73 74 20 24 6e 61 6d 65 20 5b 61 72 72 61  list $name [arra 129a0 79 20 67 65 74 20 70 72 6f 70 65 72 74 69 65 73 y get properties 129b0 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ]].. 129c0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 129d0 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 129e0 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61 result [list$na
129f0 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d 0a 20  me $varValue].. 12a00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 12a10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 12a20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 12a30 20 20 20 20 20 20 20 73 65 74 20 76 61 72 56 61 set varVa 12a40 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b lue [uplevel 1 [ 12a50 6c 69 73 74 20 73 65 74 20 24 76 61 72 4e 61 6d list set$varNam
12a60 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e]]....
12a70 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 26 26   if {$objects && 12a80 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 [isObjectHandle 12a90 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74 68 65$varValue]} the
12aa0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
12ab0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
12ac0 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20  in properties..
12ad0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 41 6c             getAl
12ae0 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 72  lProperties $var 12af0 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 Value properties 12b00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 12b10 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [ 12b20 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 5b 61 list$varName [a
12b30 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72 74  rray get propert
12b40 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20  ies]]..
12b50 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
12b60 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
12b70 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61 72  esult [list $var 12b80 4e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d Name$varValue].
12b90 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
12ba0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
12bb0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
12bc0 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 12bd0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 .... proc enu 12be0 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 merableToList { 12bf0 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a enumerable } {.. 12c00 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 12c10 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... 12c20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 12c30 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d gth$enumerable]
12c40 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72   == 0 || $enumer 12c50 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 able eq "null"} 12c60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12c70 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
12c80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
12c90 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
12ca0 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e 75  -alias item $enu 12cb0 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 merable {.. 12cc0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 12cd0 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 ength$item] > 0
12ce0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12cf0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
12d00 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 69  lt [$item ToStri 12d10 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ng].. }.. 12d20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 12d30 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
12d40 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
12d50 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 75  roc catchAndRetu
12d60 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 61  rn { script {sta
12d70 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 7b  ckTrace false} {
12d80 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 7b  strict true} } {
12d90 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
12da0 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74   # NOTE: Evaluat
12db0 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f  e the script pro
12dc0 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
12dd0 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e  ler in their con
12de0 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20  text,..      #
12df0 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 62       capturing b
12e00 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 61  oth the result a
12e10 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  nd the return co
12e20 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  de...      #..
12e30 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61      set code [ca
12e40 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 24  tch {uplevel 1 $12e50 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d script} result]. 12e60 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12e70 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74 68 # NOTE: Did th 12e80 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 e script provide 12e90 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 d by our caller 12ea0 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72 72 NOT raise an err 12eb0 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 or?.. #.. 12ec0 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74 20 if {$strict
12ed0 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c  && $code == 0 || 12ee0 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63 6f !$strict && $co 12ef0 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d de != 1} then {. 12f00 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 12f10 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 # NOTE: Succ 12f20 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20 6c ess. Return a l 12f30 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 ist with the ret 12f40 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 urn code and the 12f50 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 result... 12f60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 12f70 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 urn [list$code
12f80 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20  $result].. 12f90 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63 6b } elseif {$stack
12fa0 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  Trace} then {..
12fb0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12fc0 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
12fd0 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 77  e.  Our caller w
12fe0 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 63  ants a full stac
12ff0 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70 6c  k trace (if appl
13000 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20  icable),..
13010 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e    #       return
13020 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65   a list with the
13030 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
13040 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 62   the result verb
13050 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
13060 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
13070 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65   [list $code$re
13080 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65  sult]..      } e
13090 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
130a0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
130b0 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20  : Failure.  Our
130c0 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20  caller does not
130d0 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 63  want a full stac
130e0 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 20  k trace (if..
130f0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70       #       app
13100 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 6e  licable), return
13110 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65   a list with the
13120 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 68   return code, th
13130 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..
13140 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 6f   #       code fo
13150 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  r the interprete
13160 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  r, and the error
13170 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 74   message up to t
13180 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
13190 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 20      point where
131a0 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20  the stack trace
131b0 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20  should start...
131c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
131d0 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $131e0 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 code$::errorCod
131f0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
13200 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
13210 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
13220 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c  onMessage $resul 13230 74 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 t]].. }.. 13240 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 13250 20 72 65 73 65 74 45 78 63 65 70 74 69 6f 6e 20 resetException 13260 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 13270 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 73 # NOTE: Res 13280 65 74 20 65 78 63 65 70 74 69 6f 6e 20 61 73 73 et exception ass 13290 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 ociated with thi 132a0 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 28 74 s interpreter (t 132b0 6f 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 o null)... 132c0 23 20 20 20 20 20 20 20 54 68 69 73 20 28 70 72 # This (pr 132d0 69 76 61 74 65 29 20 70 72 6f 70 65 72 74 79 20 ivate) property 132e0 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 6f 6e is maintained on 132f0 20 61 20 70 65 72 2d 74 68 72 65 61 64 20 62 61 a per-thread ba 13300 73 69 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sis... #.. 13310 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 13320 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 13330 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 blic Interpreter 13340 2e 47 65 74 41 63 74 69 76 65 20 45 78 63 65 70 .GetActive Excep 13350 74 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 tion null.. 13360 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 13370 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 13380 61 74 63 68 41 6e 64 53 65 74 45 78 63 65 70 74 atchAndSetExcept 13390 69 6f 6e 20 7b 20 73 63 72 69 70 74 20 7b 76 61 ion { script {va 133a0 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 rName ""} } {.. 133b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 133c0 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 NOTE: Evaluate t 133d0 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 he script provid 133e0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 133f0 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 in their contex 13400 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. 13410 20 20 20 63 61 74 63 68 20 7b 75 70 6c 65 76 65 catch {upleve 13420 6c 20 31 20 24 73 63 72 69 70 74 7d 0d 0a 0d 0a l 1$script}....
13430 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
13440 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the
13450 28 70 72 69 76 61 74 65 29 20 65 78 63 65 70 74  (private) except
13460 69 6f 6e 20 70 72 6f 70 65 72 74 79 20 66 72 6f  ion property fro
13470 6d 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74  m this interpret
13480 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  er,..      #
13490 20 20 20 66 6f 72 20 74 68 69 73 20 74 68 72 65     for this thre
134a0 61 64 2c 20 61 6e 64 20 61 64 64 20 61 73 20 61  ad, and add as a
134b0 6e 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  n opaque object
134c0 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 0d 0a 20  handle in the..
134d0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
134e0 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c  text of our call
134f0 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
13500 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
13510 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d  length $varName] 13520 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 13530 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
13540 61 72 4e 61 6d 65 20 65 78 63 65 70 74 69 6f 6e  arName exception
13550 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
13560 20 20 20 73 65 74 20 65 78 63 65 70 74 69 6f 6e     set exception
13570 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
13580 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 2d 61 6c  \..          -al
13590 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  ias -flags +NonP
135a0 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65  ublic Interprete
135b0 72 2e 47 65 74 41 63 74 69 76 65 20 45 78 63 65  r.GetActive Exce
135c0 70 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  ption]....
135d0 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d  return ""..    }
135e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f  .....    proc co
135f0 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith
13600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
13610 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f  ext memory symbo
13620 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c 74  ls strict result
13630 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56  sVarName errorsV
13640 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73  arName fileNames
13650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72  ..            ar
13660 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  gs } {..      #.
13670 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
13680 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 6e  ince we are goin
13690 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d 65  g to use this me
136a0 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c  thod name a lot,
136b0 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 0d   assign it to a.
136c0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
136d0 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a  ariable first...
136e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
136f0 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 65  et add Reference
13700 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d  dAssemblies.Add.
13710 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
13720 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65    # NOTE: Create
13730 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e   the base comman
13740 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e  d to evaluate an
13750 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72  d add the proper
13760 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20  ty settings..
13770 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
13780 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79  are almost alway
13790 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20  s needed by our
137a0 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 2e  unit tests (i.e.
137b0 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 20   the System..
137c0 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 53     #       and S
137d0 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d  ystem.Data assem
137e0 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e  bly references).
137f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13800 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69   set command [li
13810 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
13820 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74  compileCSharp $t 13830 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d ext$memory $sym 13840 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 73 bols$strict res
13850 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20  ults errors \..
13860 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy 13870 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 stem.dll$add Sy
13880 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61  stem.Data.dll $a 13890 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73 61 dd System.Transa 138a0 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 ctions.dll \.. 138b0 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79 73$add Sys
138c0 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a  tem.Xml.dll]....
138d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
138e0 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74   NOTE: Add all t
138f0 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65  he provided file
13900 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62   names as assemb
13910 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a  ly references...
13920 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66        #..      f
13930 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
13940 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  $fileNames {.. 13950 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f lappend co 13960 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 mmand$add [getB
13970 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 13980 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. 13990 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 139a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add 139b0 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 the extra argume 139c0 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 nts, if any, to 139d0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 the command to e 139e0 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 valuate... 139f0 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 #.. eval la 13a00 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 ppend command$a
13a10 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  rgs....      #..
13a20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c        # NOTE: Al
13a30 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72  ias the compiler
13a40 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61   local results a
13a50 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62  nd errors variab
13a60 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  les to the..
13a70 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62    #       variab
13a80 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65  le names provide
13a90 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
13aa0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13ab0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
13ac0 67 74 68 20 24 72 65 73 75 6c 74 73 56 61 72 4e  gth $resultsVarN 13ad0 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { 13ae0 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20 .. upvar 13af0 31 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 1$resultsVarNam
13b00 65 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20  e results..
13b10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
13b20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $13b30 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 5d 20 3e errorsVarName] > 13b40 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 13b50 20 20 20 20 75 70 76 61 72 20 31 20 24 65 72 72 upvar 1$err
13b60 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72  orsVarName error
13b70 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  s..      }....
13b80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
13b90 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68  OTE: Evaluate th
13ba0 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b 63  e constructed [c
13bb0 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63 6f  ompileCSharp] co
13bc0 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 6e  mmand and return
13bd0 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
13be0 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20      result...
13bf0 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c     #..      eval
13c00 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d   $command.. } 13c10 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 13c20 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e MemoryDb { fileN 13c30 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ame } {.. # 13c40 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 13c50 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 Is the specified 13c60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n 13c70 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e ame really an in 13c80 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 -memory database 13c90 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ?.. #.. 13ca0 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 13cb0 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d$fileName eq ":m
13cc0 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20  emory:" || \..
13cd0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
13ce0 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 20  range $fileName 13cf0 30 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 0 12] eq "file:: 13d00 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 memory:"}].. 13d10 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 13d20 73 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d sTableInDb { nam 13d30 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d e {varName db} } 13d40 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 13d50 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 13d60 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 13d70 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 13d80 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 13d90 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 13da0 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 13db0 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 er. It contains 13dc0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f the database co 13dd0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle 13de0 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 that will be.. 13df0 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 # used 13e00 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 to execute the 13e10 71 75 65 72 79 20 75 73 65 64 20 74 6f 20 64 65 query used to de 13e20 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e termine if the n 13e30 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 amed table is.. 13e40 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 # pre 13e50 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61 74 sent in that dat 13e60 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. 13e70 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
13e80 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
13e90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
13ea0 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 71 6c  OTE: Use the sql
13eb0 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
13ec0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
13ed0 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65   the named table
13ee0 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   is..      #
13ef0 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68     present in th
13f00 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  e database...
13f10 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
13f20 73 71 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 53  sql {..        S
13f30 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46  ELECT COUNT(*) F
13f40 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
13f50 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27  r WHERE type = '
13f60 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20  table' AND name
13f70 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  = ?;..      }...
13f80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13f90 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e  # NOTE: Return n
13fa0 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e  on-zero if the n
13fb0 61 6d 65 64 20 74 61 62 6c 65 20 69 73 20 70 72  amed table is pr
13fc0 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d  esent...      #.
13fd0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
13fe0 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b  xpr {..        [
13ff0 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
14000 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 14010 24 73 71 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d$sql [list param
14020 31 20 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d  1 String $name]] 14030 20 3e 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a > 0.. }].. 14040 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 14050 6f 63 20 67 65 74 44 62 44 65 66 61 75 6c 74 50 oc getDbDefaultP 14060 61 67 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 ageSize {} {.. 14070 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 14080 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 executeSql "PRAG 14090 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 20 73 MA page_size;" s 140a0 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d calar} result] = 140b0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 140c0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
140d0 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ult..      } els
140e0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
140f0 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a  urn 0..      }..
14100 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
14110 6f 63 20 67 65 74 44 62 44 65 66 61 75 6c 74 43  oc getDbDefaultC
14120 61 63 68 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20  acheSize {} {..
14130 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
14140 7b 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 41  {executeSql "PRA
14150 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22  GMA cache_size;"
14160 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d   scalar} result]
14170 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
14180 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72         return $r 14190 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 esult.. } e 141a0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 141b0 65 74 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d eturn 0.. } 141c0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 141d0 70 72 6f 63 20 75 73 65 4c 65 67 61 63 79 44 62 proc useLegacyDb 141e0 50 61 67 65 41 6e 64 43 61 63 68 65 53 69 7a 65 PageAndCacheSize 141f0 73 20 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d s { varName } {. 14200 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 14210 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 14220 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 14230 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 14240 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 14250 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 14260 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 14270 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 It contains th 14280 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 e database conne 14290 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 ction handle tha 142a0 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 t will be.. 142b0 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74 6f # used to 142c0 20 65 78 65 63 75 74 65 20 71 75 65 72 69 65 73 execute queries 142d0 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 used to set the 142e0 20 70 61 67 65 20 61 6e 64 20 63 61 63 68 65 20 page and cache 142f0 73 69 7a 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d sizes... #. 14300 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
14310 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
14320 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute
14330 24 64 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 50  $db {.. P 14340 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 RAGMA page_size 14350 3d 20 31 30 32 34 3b 0d 0a 20 20 20 20 20 20 20 = 1024;.. 14360 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 PRAGMA cache_si 14370 7a 65 20 3d 20 32 30 30 30 3b 0d 0a 20 20 20 20 ze = 2000;.. 14380 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 14390 75 72 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 urn [list \.. 143a0 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 [sql exec 143b0 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 ute -execute sca 143c0 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 lar$db "PRAGMA
143d0 70 61 67 65 5f 73 69 7a 65 3b 22 5d 20 5c 0d 0a  page_size;"] \..
143e0 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65            [sql e
143f0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
14400 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG 14410 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d MA cache_size;"] 14420 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 14430 20 70 72 6f 63 20 6e 6f 72 6d 61 6c 69 7a 65 45 proc normalizeE 14440 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 xceptionMessage 14450 7b 20 76 61 6c 75 65 20 7d 20 7b 0d 0a 20 20 20 { value } {.. 14460 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 14470 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d ength$value] ==
14480 20 30 7d 20 74 68 65 6e 20 7b 72 65 74 75 72 6e   0} then {return
14490 20 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20   $value}.. 144a0 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 6d return [string m 144b0 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 22 20 ap [list \r\n " 144c0 3d 3d 3e 20 22 20 5c 6e 20 22 20 3d 3d 3e 20 22 ==> " \n " ==> " 144d0 5d 20 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20 7d ]$value]..    }
144e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78  .....    proc ex
144f0 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53  tractSystemDataS
14500 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65  QLiteExceptionMe
14510 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d 20  ssage { value }
14520 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
14530 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
14540 20 73 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d 73   string conforms
14550 20 74 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74 68   to format of th
14560 65 20 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74 69  e normal excepti
14570 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
14580 20 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2c    error strings,
14590 20 65 78 74 72 61 63 74 20 61 6e 64 20 72 65 74   extract and ret
145a0 75 72 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72 72  urn only the err
145b0 6f 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 20  or message..
145c0 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f    #       portio
145d0 6e 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20  n itself...
145e0 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 61   #..      set pa
145f0 74 74 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d 0a  tterns [list \..
14600 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44        {System\.D
14610 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c  ata\.SQLite\.SQL
14620 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30  iteException $$0 14630 78 28 3f 3a 30 7c 38 29 5b 30 2d 39 41 2d 46 61 x(?:0|8)[0-9A-Fa 14640 2d 66 5d 7b 37 7d 5c 29 3a 5c 0d 0a 20 20 20 20 -f]{7}$$:\..
14650 20 20 20 20 20 20 28 2e 2b 3f 29 20 20 28 3f 3a        (.+?)  (?:
14660 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20   )?at} \..
14670 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53  {System\.Data\.S
14680 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 63  QLite\.SQLiteExc
14690 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28  eption: (.+?)  (
146a0 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20  ?: )?at} \..
146b0 20 20 7b 45 61 67 6c 65 5c 2e 5f 43 6f 6d 70 6f    {Eagle\._Compo
146c0 6e 65 6e 74 73 5c 2e 50 75 62 6c 69 63 5c 2e 53  nents\.Public\.S
146d0 63 72 69 70 74 45 78 63 65 70 74 69 6f 6e 3a 20  criptException:
146e0 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d  (.+?)  (?: )?at}
146f0 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  ]....      forea
14700 63 68 20 70 61 74 74 65 72 6e 20 24 70 61 74 74  ch pattern $patt 14710 65 72 6e 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 erns {.. 14720 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 if {[regexp --$
14730 70 61 74 74 65 72 6e 20 24 76 61 6c 75 65 20 64  pattern $value d 14740 75 6d 6d 79 20 6d 65 73 73 61 67 65 5d 7d 20 74 ummy message]} t 14750 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14760 20 73 65 74 20 6d 65 73 73 61 67 65 20 5b 73 74 set message [st 14770 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c ring map [list \ 14780 72 5c 6e 20 5c 6e 5d 20 5b 73 74 72 69 6e 67 20 r\n \n] [string 14790 74 72 69 6d 20 24 6d 65 73 73 61 67 65 5d 5d 0d trim$message]].
147a0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6c  .          set l
147b0 69 6e 65 73 20 5b 73 70 6c 69 74 20 24 6d 65 73  ines [split $mes 147c0 73 61 67 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 sage \n].... 147d0 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 147e0 74 68 20 24 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d th$lines] == 2}
147f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14800 20 20 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78       if {[lindex
14810 20 24 6c 69 6e 65 73 20 30 5d 20 65 71 20 5b 6c   $lines 0] eq [l 14820 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 7d index$lines 1]}
14830 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14840 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
14850 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 0d  index $lines 0]. 14860 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 14870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 14880 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 turn [appendArgs 14890 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 [lindex$lines
148a0 30 5d 20 22 20 2d 2d 20 22 20 5b 6c 69 6e 64 65  0] " -- " [linde
148b0 78 20 24 6c 69 6e 65 73 20 31 5d 5d 0d 0a 20 20  x $lines 1]].. 148c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 148d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 6d return$m
148e0 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 20 20  essage..
148f0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
14900 20 20 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75      return $valu 14910 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 14920 20 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 proc trimSql { 14930 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 sql } {.. r 14940 65 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 eturn [regsub -a 14950 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 ll -- {\s+} [str 14960 69 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 ing trim$sql] "
14970 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   "]..    }.....
14980 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53     proc executeS
14990 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74  ql { sql {execut
149a0 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20  e none} {format
149b0 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20  none} {fileName
149c0 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ""} } {..      i
149d0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
149e0 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20  h $fileName] == 149f0 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69 6c 0} then {set fil 14a00 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d eName :memory:}. 14a10 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20 24 . setupDb$
14a20 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
14a30 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 66 61  " "" "" false fa
14a40 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20  lse false false
14a50 64 62 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20  db true....
14a60 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20   try {..
14a70 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20  return [uplevel
14a80 31 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  1 [list \..
14a90 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75         sql execu
14aa0 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 65  te -execute $exe 14ab0 63 75 74 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f cute -format$fo
14ac0 72 6d 61 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d  rmat $db$sql]].
14ad0 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79  .      } finally
14ae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
14af0 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
14b00 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a  bConnection]....
14b10 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20          try {..
14b20 20 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70           cleanup
14b30 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 14b40 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 false false fals 14b50 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e e.. } fin 14b60 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 ally {.. 14b70 20 20 6f 62 6a 65 63 74 20 66 6c 61 67 73 20 24 object flags$
14b80 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 4e 6f 44 69  connection -NoDi
14b90 73 70 6f 73 65 3b 20 66 72 65 65 44 62 43 6f 6e  spose; freeDbCon
14ba0 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  nection..
14bb0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
14bc0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
14bd0 68 61 73 4e 6f 46 6c 61 67 73 20 7b 20 76 61 72  hasNoFlags { var
14be0 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20  Name none } {..
14bf0 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 14c00 72 4e 61 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 rName flags.... 14c10 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 14c20 65 78 69 73 74 73 20 66 6c 61 67 73 5d 7d 20 74 exists flags]} t 14c30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 14c40 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 14c50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 14c60 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 14c70 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68$flags] == 0} th
14c80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
14c90 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
14ca0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
14cb0 24 6e 6f 6e 65 20 26 26 20 24 66 6c 61 67 73 20  $none &&$flags
14cc0 65 71 20 22 4e 6f 6e 65 22 7d 20 74 68 65 6e 20  eq "None"} then
14cd0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
14ce0 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d  n true..      }.
14cf0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
14d00 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  false..    }....
14d10 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e  .    proc getCon
14d20 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66  nectionFlags { f
14d30 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71  ileName flags {q
14d40 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
14d50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14d60 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
14d70 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61 73  ut which databas
14d80 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63  e file name or c
14d90 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
14da0 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20   these..      #
14db0 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
14dc0 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75   flags will actu
14dd0 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20  ally apply to.
14de0 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65  This is not nece
14df0 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ssary..      #
14e00 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f       in quiet mo
14e10 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73 20  de because this
14e20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f  information is o
14e30 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67  nly used for log
14e40 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20  ging..      #
14e50 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e      and reportin
14e60 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20  g purposes...
14e70 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
14e80 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 14e90 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 14ea0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c ring length$fil
14eb0 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  eName] > 0} then
14ec0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
14ed0 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65  t database [appe
14ee0 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d  ndArgs "file nam
14ef0 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 14f00 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 \"].. } e 14f10 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 14f20 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 sts ::dataSource 14f30 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 14f40 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 73 ![array exis 14f50 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d ts ::dataSource] 14f60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14f70 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65 set database 14f80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 61 [appendArgs "da 14f90 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a ta source \""$:
14fa0 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d  :dataSource \"].
14fb0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
14fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
14fd0 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f   database <unkno
14fe0 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  wn>..        }..
14ff0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
15000 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
15010 3a 20 45 76 65 6e 20 74 68 6f 75 67 68 20 74 68  : Even though th
15020 65 72 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20  ere is only one
15030 73 6f 75 72 63 65 20 6f 66 20 66 6c 61 67 73 20  source of flags
15040 73 6f 20 66 61 72 2c 20 74 68 65 79 0d 0a 20 20  so far, they..
15050 20 20 20 20 23 20 20 20 20 20 20 20 6d 75 73 74      #       must
15060 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 75 73 69   be combined usi
15070 6e 67 20 74 68 65 20 63 6f 72 72 65 63 74 20 73  ng the correct s
15080 79 6e 74 61 78 20 66 6f 72 20 65 6e 75 6d 65 72  yntax for enumer
15090 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  ated..      #
150a0 20 20 20 20 66 6c 61 67 20 76 61 6c 75 65 73 20      flag values
150b0 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61  for the .NET Fra
150c0 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 23  mework...      #
150d0 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67  ..      set flag
150e0 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20  s [combineFlags
150f0 24 66 6c 61 67 73 20 22 22 5d 0d 0a 0d 0a 20 20  $flags ""].... 15100 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15110 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c OTE: Show (and l 15120 6f 67 29 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f og) the local co 15130 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 nnection flags a 15140 6e 64 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 nd the associate 15150 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 15160 20 64 61 74 61 20 73 6f 75 72 63 65 20 6f 72 20 data source or 15170 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 file name... 15180 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 15190 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
151a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
151b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
151c0 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 29 5d 20  mitLocalFlags)]
151d0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
151e0 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73    (![info exists
151f0 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46   ::no(emitLocalF
15200 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20  lagsIfNone)] ||
15210 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
15220 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61  ![hasNoFlags fla
15230 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e  gs false])} then
15240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
15250 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 15260 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 15270 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15280 20 22 2d 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e "---- local con 15290 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f nection flags fo 152a0 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d r "$database \.
152b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
152c0 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21   are: " [expr {!
152d0 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67  [hasNoFlags flag
152e0 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20  s false] ? \..
152f0 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70              [app
15300 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67  endArgs \" $flag 15310 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 s \"] : "<none>" 15320 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 }] \n].. 15330 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 15340 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15350 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c OTE: Show (and l 15360 6f 67 29 20 74 68 65 20 73 68 61 72 65 64 20 63 og) the shared c 15370 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e onnection flags. 15380 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15390 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
153a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
153b0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
153c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
153d0 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  oke System.Data.
153e0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
153f0 6e 65 63 74 69 6f 6e 20 53 68 61 72 65 64 46 6c  nection SharedFl
15400 61 67 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 73  ags..        } s
15410 68 61 72 65 64 46 6c 61 67 73 5d 20 3d 3d 20 30  haredFlags] == 0
15420 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15430 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
15440 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53  xists ::no(emitS
15450 68 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20  haredFlags)] &&
15460 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
15470 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   (![info exists
15480 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46  ::no(emitSharedF
15490 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20  lagsIfNone)] ||
154a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
154b0 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73    ![hasNoFlags s
154c0 68 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d  haredFlags true]
154d0 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  )} then {..
154e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 154f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 15500 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 15510 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 15520 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 - shared connect 15530 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 ion flags for " 15540 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20$database \..
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61               " a
15560 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68  re: " [expr {![h
15570 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64  asNoFlags shared
15580 46 6c 61 67 73 20 74 72 75 65 5d 20 3f 20 5c 0d  Flags true] ? \.
15590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
155a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20   [appendArgs \"
155b0 24 73 68 61 72 65 64 46 6c 61 67 73 20 5c 22 5d  $sharedFlags \"] 155c0 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e : "<none>"}] \n 155d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 155e0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 155f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 15600 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 15610 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 no(emitSharedFla 15620 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 gs)] && \.. 15630 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 ![info 15640 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 exists ::no(emit 15650 53 68 61 72 65 64 46 6c 61 67 73 49 66 55 6e 61 SharedFlagsIfUna 15660 76 61 69 6c 61 62 6c 65 29 5d 7d 20 74 68 65 6e vailable)]} then 15670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15680 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
15690 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
156a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
156b0 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65       "---- share
156c0 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  d connection fla
156d0 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61  gs for " $databa 156e0 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 se \.. 156f0 20 20 20 20 20 20 22 20 61 72 65 3a 20 3c 75 6e " are: <un 15700 61 76 61 69 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a available>\n"].. 15710 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 15720 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 15730 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 15740 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 # NOTE: Show ( 15750 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 64 65 74 and log) the det 15760 65 63 74 65 64 20 67 6c 6f 62 61 6c 20 63 6f 6e ected global con 15770 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 69 nection flags, i 15780 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d f any... #. 15790 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 . if {!$qui
157a0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
157b0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
157c0 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47  xists ::no(emitG
157d0 6c 6f 62 61 6c 46 6c 61 67 73 29 5d 20 26 26 20  lobalFlags)] &&
157e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  \..            (
157f0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
15800 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61  no(emitGlobalFla
15810 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d  gsIfNone)] || \.
15820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b  .             ![
15830 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e  hasNoFlags ::con
15840 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61  nection_flags fa
15850 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  lse])} then {..
15860 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $15870 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 15880 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 15890 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 158a0 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 - global connect 158b0 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a 20 22 ion flags are: " 158c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 158d0 20 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f [expr {![hasNo 158e0 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 Flags ::connecti 158f0 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 on_flags false] 15900 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ? \.. 15910 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c [appendArgs \ 15920 22 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f "$::connection_
15930 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f  flags \"] : "<no
15940 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  ne>"}] \n]..
15950 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
15960 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
15970 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72   # NOTE: If ther
15980 65 20 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c  e are any global
15990 20 28 70 65 72 20 74 65 73 74 20 72 75 6e 29 20   (per test run)
159a0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
159b0 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20   currently..
159c0 20 20 23 20 20 20 20 20 20 20 73 65 74 2c 20 75    #       set, u
159d0 73 65 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65  se them now (i.e
159e0 2e 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74  . by combining t
159f0 68 65 6d 20 77 69 74 68 20 74 68 65 20 6f 6e 65  hem with the one
15a00 73 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  s for this..
15a10 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
15a20 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d  tion)...      #.
15a30 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
15a40 20 65 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63   exists ::connec
15a50 74 69 6f 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 65  tion_flags]} the
15a60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
15a70 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
15a80 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72  Combine and/or r
15a90 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65  eplace the conne
15aa0 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20  ction flags and
15ab0 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20  then show the..
15ac0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e         #       n
15ad0 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  ew value...
15ae0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
15af0 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65  t flags [combine
15b00 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a  Flags $flags$::
15b10 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73  connection_flags
15b20 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
15b30 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
15b40 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74  Show (and log) t
15b50 68 65 20 6e 65 77 20 65 66 66 65 63 74 69 76 65  he new effective
15b60 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
15b70 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
15b80 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 15b90 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 15ba0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 15bb0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi 15bc0 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 29 5d tCombinedFlags)] 15bd0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 15be0 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 (![info exi 15bf0 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d sts ::no(emitCom 15c00 62 69 6e 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 binedFlagsIfNone 15c10 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 )] || \.. 15c20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 ![hasNoF 15c30 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 lags flags false 15c40 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ])} then {.. 15c50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
15c60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
15c70 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
15c90 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e  -- combined conn
15ca0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72  ection flags for
15cb0 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a   " $database \.. 15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15cd0 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b " are: " [expr { 15ce0 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 ![hasNoFlags fla 15cf0 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 gs false] ? \.. 15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 15d10 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 appendArgs \"$f
15d20 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e  lags \"] : "<non
15d30 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  e>"}] \n]..
15d40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
15d50 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
15d60 20 20 20 20 72 65 74 75 72 6e 20 24 66 6c 61 67      return $flag 15d70 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 s.. }..... 15d80 20 70 72 6f 63 20 67 65 74 46 6c 61 67 73 50 72 proc getFlagsPr 15d90 6f 70 65 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 operty { {flags 15da0 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 ""} {quiet false 15db0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 15dc0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 # NOTE: De 15dd0 74 65 72 6d 69 6e 65 20 77 68 61 74 20 74 68 65 termine what the 15de0 20 63 6f 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 combined (globa 15df0 6c 20 61 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e l and local) con 15e00 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 nection.. # 15e10 20 20 20 20 20 20 20 66 6c 61 67 73 20 73 68 6f flags sho 15e20 75 6c 64 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 uld be, possibly 15e30 20 71 75 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 quietly... 15e40 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c #.. set fl 15e50 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 ags [getConnecti 15e60 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 onFlags ""$flag
15e70 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20  s $quiet].... 15e80 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15e90 54 45 3a 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c TE: If no global 15ea0 20 6f 72 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 or local connec 15eb0 74 69 6f 6e 20 66 6c 61 67 73 20 77 65 72 65 20 tion flags were 15ec0 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 0d 0a specified, the.. 15ed0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 # de 15ee0 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e fault connection 15ef0 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65 flags should be 15f00 20 75 73 65 64 3b 20 74 68 65 72 65 66 6f 72 65 used; therefore 15f10 2c 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 , return.. 15f20 23 20 20 20 20 20 20 20 61 6e 20 65 6d 70 74 79 # an empty 15f30 20 73 74 72 69 6e 67 20 69 6e 20 74 68 61 74 20 string in that 15f40 63 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a case... #.. 15f50 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 15f60 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d g length$flags]
15f70 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
15f80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
15f90 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
15fa0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15fb0 54 45 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f 20  TE: In order to
15fc0 63 68 65 63 6b 20 69 66 20 74 68 65 20 64 65 66  check if the def
15fd0 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ault connection
15fe0 66 6c 61 67 73 20 61 72 65 20 62 65 69 6e 67 20  flags are being
15ff0 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  used..      #
16000 20 20 20 20 69 74 20 69 73 20 6e 65 63 65 73 73      it is necess
16010 61 72 79 20 74 6f 20 61 74 74 65 6d 70 74 20 61  ary to attempt a
16020 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74   conversion to t
16030 68 65 20 61 63 74 75 61 6c 20 65 6e 75 6d 65 72  he actual enumer
16040 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  ated..      #
16050 20 20 20 20 74 79 70 65 2e 20 20 46 61 69 6c 69      type.  Faili
16060 6e 67 20 74 68 61 74 2c 20 74 68 65 20 63 68 65  ng that, the che
16070 63 6b 20 61 67 61 69 6e 73 74 20 74 68 65 20 64  ck against the d
16080 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c  efault value wil
16090 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20  l be..      #
160a0 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20      skipped...
160b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
160c0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
160d0 20 20 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c     set error nul
160e0 6c 3b 20 23 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a  l; # IGNORED....
160f0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
16100 6e 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 72  nvoke Utility Tr
16110 79 50 61 72 73 65 46 6c 61 67 73 45 6e 75 6d 20  yParseFlagsEnum
16120 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
16130 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
16140 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
16150 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66  ctionFlags "" $f 16160 6c 61 67 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c lags null true \ 16170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 16180 75 65 20 74 72 75 65 20 65 72 72 6f 72 0d 0a 20 ue true error.. 16190 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 7d 20 74 } value]} t 161a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 161b0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 161c0 3a 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 : Attempting to 161d0 70 61 72 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 parse the connec 161e0 74 69 6f 6e 20 66 6c 61 67 73 20 63 61 75 73 65 tion flags cause 161f0 64 20 61 20 73 63 72 69 70 74 0d 0a 20 20 20 20 d a script.. 16200 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f # erro 16210 72 2e 20 20 45 6d 69 74 20 61 20 77 61 72 6e 69 r. Emit a warni 16220 6e 67 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c ng to the test l 16230 6f 67 20 66 69 6c 65 20 61 6e 64 20 63 6f 6e 74 og file and cont 16240 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 23 20 inue.. # 16250 20 20 20 20 20 20 75 73 69 6e 67 20 61 6e 20 65 using an e 16260 6d 74 70 79 20 73 74 72 69 6e 67 20 69 6e 73 74 mtpy string inst 16270 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ead... #. 16280 0a 20 20 20 20 20 20 20 20 74 6c 6f 67 20 5b 61 . tlog [a 16290 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 162a0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 162b0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 162c0 6f 20 70 61 72 73 65 20 63 6f 6e 6e 65 63 74 69 o parse connecti 162d0 6f 6e 20 66 6c 61 67 73 2c 20 65 72 72 6f 72 3a on flags, error: 162e0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 162f0 20 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e \n\t$value \n
16300 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
16310 20 76 61 6c 75 65 20 22 22 0d 0a 20 20 20 20 20   value ""..
16320 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
16330 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
16340 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61  the combined fla
16350 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 20  gs string could
16360 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65 20  not actually be
16370 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 20  converted..
16380 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20   #       to the
16390 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 20  enumerated type
163a0 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  it is the defaul
163b0 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75  t value, then ju
163c0 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23 20  st use..      #
163d0 20 20 20 20 20 20 69 74 20 76 65 72 62 61 74 69        it verbati
163e0 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75  m; otherwise, ju
163f0 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  st return an emp
16400 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 74  ty string.  In t
16410 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hat..      #
16420 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 65 66     case, the def
16430 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ault connection
16440 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75 73  flags will be us
16450 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
16460 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
16470 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d  length $value] = 16480 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65 = 0 ||$value ne
16490 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65 6e   "Default"} then
164a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
164b0 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e 47         # WARNING
164c0 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74  : This returns t
164d0 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  he string value
164e0 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20  of the combined
164f0 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20  flags, not..
16500 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 74      #          t
16510 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76 61  he enumerated va
16520 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 62 79  lue.  This is by
16530 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f 75   design and shou
16540 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  ld not..
16550 23 20 20 20 20 20 20 20 20 20 20 62 65 20 63 68  #          be ch
16560 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63 61  anged without ca
16570 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 74  reful considerat
16580 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f 75  ion (e.g. it wou
16590 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ld..        #
165a0 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74         prevent t
165b0 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  he SQLiteConnect
165c0 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 61  ion class from a
165d0 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d  llowing invalid.
165e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
165f0 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20      ["magical"]
16600 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20  meta-flags)...
16610 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16620 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41   return [appendA
16630 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66 6c  rgs "Flags=" $fl 16640 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d ags \;].. } 16650 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 16660 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "".. }..... 16670 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 74 50 proc getTestP 16680 72 6f 70 65 72 74 69 65 73 20 7b 20 7b 66 6c 61 roperties { {fla 16690 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 gs ""} {quiet fa 166a0 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 166b0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 166c0 20 53 74 61 72 74 20 77 69 74 68 20 22 46 6c 61 Start with "Fla 166d0 67 73 22 20 70 72 6f 70 65 72 74 79 20 66 6f 72 gs" property for 166e0 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74 the new connect 166f0 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 ion, if any... 16700 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 16710 20 72 65 73 75 6c 74 20 5b 67 65 74 46 6c 61 67 result [getFlag 16720 73 50 72 6f 70 65 72 74 79 20 24 66 6c 61 67 73 sProperty$flags
16730 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20   $quiet].... 16740 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 16750 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 E: Add the name 16760 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 of the current t 16770 65 73 74 20 66 69 6c 65 2c 20 69 66 20 61 76 61 est file, if ava 16780 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 ilable. This is 16790 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 167a0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 64 65 only used for de 167b0 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 bugging... 167c0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 167d0 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 167e0 5f 66 69 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a _file]} then {.. 167f0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 append r 16800 65 73 75 6c 74 20 54 65 73 74 46 69 6c 65 3d 20 esult TestFile= 16810 24 3a 3a 74 65 73 74 5f 66 69 6c 65 20 5c 3b 0d$::test_file \;.
16820 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
16830 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
16840 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20  E: Add the name
16850 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  of the current t
16860 65 73 74 2c 20 69 66 20 61 76 61 69 6c 61 62 6c  est, if availabl
16870 65 2e 20 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  e.  This is only
16880 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16890 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69  used for debuggi
168a0 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ng...      #..
168b0 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
168c0 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f 74 65 73  ists ::eagle_tes
168d0 74 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 5d  ts(CurrentName)]
168e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
168f0 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20    append result
16900 54 65 73 74 4e 61 6d 65 3d 20 24 3a 3a 65 61 67  TestName= $::eag 16910 6c 65 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 le_tests(Current 16920 4e 61 6d 65 29 20 5c 3b 0d 0a 20 20 20 20 20 20 Name) \;.. 16930 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 16940 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
16950 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e  .....    proc en
16960 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
16970 7b 20 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65  { channel enable
16980 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
16990 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63   {..      if {[c
169a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
169b0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
169c0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
169d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
169e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
169f0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
16a00 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
16a10 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61       sqlite3_ena
16a20 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
16a30 20 5b 65 78 70 72 20 69 6e 74 28 24 65 6e 61 62   [expr int($enab 16a40 6c 65 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 le)].. } re 16a50 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 16a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 16a70 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
16a80 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
16a90 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 16aa0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 16ab0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 16ac0 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 l sqlite3_enable 16ad0 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 _shared_cache(" 16ae0 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20$enable \..
16af0 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f           ")... o
16b00 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d  k: " $result \n] 16b10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 16b20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 16b30 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
16b40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16b50 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 16b60 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 16b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16b80 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 "---- call sqlit 16b90 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 e3_enable_shared 16ba0 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 _cache("$enable
16bb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16bc0 20 20 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22    ")... error: "
16bd0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 16be0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 16bf0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 16c00 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 . proc setupD 16c10 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 b {.. 16c20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 fileName {mode 16c30 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 ""} {dateTimeFor 16c40 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d mat ""} {dateTim 16c50 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 eKind ""} {flags 16c60 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 ""}.. 16c70 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 {extra ""} {qu 16c80 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c alify true} {del 16c90 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 ete true} {uri f 16ca0 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 alse}.. 16cb0 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 {temporary tr 16cc0 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d ue} {varName db} 16cd0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 16ce0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 16cf0 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 # NOTE: First 16d00 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c , see if our cal 16d10 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 ler has requeste 16d20 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 d an in-memory d 16d30 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 atabase... 16d40 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d #.. set isM 16d50 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 emory [isMemoryD 16d60 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a b$fileName]....
16d70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
16d80 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20   NOTE: For now,
16d90 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61 73  all test databas
16da0 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 74  es used by the t
16db0 65 73 74 20 73 75 69 74 65 20 61 72 65 20 70 6c  est suite are pl
16dc0 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  aced..      #
16dd0 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74      into the dat
16de0 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e  abase directory.
16df0 20 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20    Each database
16e00 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65  and related file
16e10 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
16e20 20 75 73 65 64 20 62 79 20 61 20 74 65 73 74 20   used by a test
16e30 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65  should be cleane
16e40 64 20 75 70 20 62 79 20 74 68 61 74 20 74 65 73  d up by that tes
16e50 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  t using the..
16e60 20 20 20 23 20 20 20 20 20 20 20 22 63 6c 65 61     #       "clea
16e70 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 72 65  nupDb" procedure
16e80 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20  , below...
16e90 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69  #..      if {!$i 16ea0 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c sMemory &&$qual
16eb0 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ify} then {..
16ec0 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
16ed0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
16ee0 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
16ef0 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  ry] [file tail $16f00 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 fileName]].. 16f10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 16f20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 # NOTE: By 16f30 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 default, delete 16f40 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e any pre-existin 16f50 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 g database with 16f60 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 the same file.. 16f70 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 16f80 65 20 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c e if it currentl 16f90 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 y exists... 16fa0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
16fb0 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c  isMemory && $del 16fc0 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 ete && [file exi 16fd0 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
16fe0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16ff0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
17000 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65  E: Attempt to de
17010 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69  lete any pre-exi
17020 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77  sting database w
17030 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c  ith the same fil
17040 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
17050 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20     name...
17060 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
17070 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65  {[catch {file de
17080 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20  lete $fileName} 17090 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 170a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 170b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W 170c0 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 e somehow failed 170d0 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 to delete the f 170e0 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ile, report why. 170f0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 17100 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
17110 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
17120 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
17130 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 17140 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 17160 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 17170 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 iled to delete d 17180 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 atabase file \"" 17190 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
171b0 22 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20  " during setup,
171c0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 171d0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 171e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 171f0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 17200 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 17210 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the 17220 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia 17230 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") 17240 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o 17250 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # 17260 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 caller. Th 17270 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 e handle to the 17280 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 opened database 17290 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 will be stored t 172a0 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. 172b0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
172c0 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
172d0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
172e0 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69  TE: Start buildi
172f0 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
17300 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f  n string.  The o
17310 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f 72  nly required por
17320 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
17330 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
17340 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20  ction string is
17350 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c  the data source,
17360 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains
17370 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
17380 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65     database file
17390 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49   name itself.  I
173a0 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e  f our caller wan
173b0 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 20  ts to use a URI
173c0 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  as..      #
173d0 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63    the data sourc
173e0 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55  e, use the FullU
173f0 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  ri connection st
17400 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f  ring property to
17410 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
17420 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 61  prevent the data
17430 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66   source string f
17440 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65  rom being mangle
17450 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
17460 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65     if {$uri} the 17470 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 17480 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c connection {Ful 17490 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d lUri=${fileName}
174a0 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
174b0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
174c0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20  onnection {Data
174d0 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d  Source=${fileNam 174e0 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e}}.. }.... 174f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 17500 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 NOTE: Since thi 17510 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 s procedure has 17520 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c no special knowl 17530 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 edge of what the 17540 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 default.. 17550 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 # setting 17560 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c is for the ToFul 17570 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e lPath connection 17580 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c string propery, 17590 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 always.. # 175a0 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20 76 add the v 175b0 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f alue we know abo 175c0 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 ut to the connec 175d0 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 tion string... 175e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 #.. app 175f0 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { 17600 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 ;ToFullPath=${qu
17610 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20  alify}}....
17620 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
17630 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
17640 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72  specified a jour
17650 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68  nal mode, add th
17660 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74  e necessary port
17670 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
17680 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
17690 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
176a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
176b0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
176c0 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20  gth $mode] > 0} 176d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 176e0 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f append connectio 176f0 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 n {;Journal Mode 17700 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 =${mode}}..
17710 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
17720 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
17730 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
17740 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 20  fied a DateTime
17750 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20  format, add the
17760 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20  necessary..
17770 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e   #       portion
17780 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
17790 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
177a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
177b0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
177c0 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  h $dateTimeForma 177d0 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. 177e0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c 177f0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 onnection {;Date 17800 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 TimeFormat=${dat
17810 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20  eTimeFormat}}..
17820 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
17830 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
17840 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
17850 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
17860 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65  imeKind, add the
17870 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
17880 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
17890 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
178a0 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
178b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
178c0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
178d0 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64  th $dateTimeKind 178e0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 178f0 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co 17900 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 nnection {;DateT 17910 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 imeKind=${dateTi
17920 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20  meKind}}..
17930 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
17940 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
17950 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 20  re out what the
17960 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20  final flags for
17970 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  this connection
17980 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20  need to be...
17990 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
179a0 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63  flags [getConnec
179b0 74 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e  tionFlags $fileN 179c0 61 6d 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 ame$flags $quie 179d0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 t].... #.. 179e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 179f0 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 our caller speci 17a00 66 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 fied some SQLite 17a10 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c ConnectionFlags, 17a20 20 61 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 add the.. 17a30 23 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 # necessar 17a40 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 y portion of the 17a50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 17a60 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 17a70 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 17a80 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 ing length$flag
17a90 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  s] > 0} then {..
17aa0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
17ab0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67  onnection {;Flag
17ac0 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20  s=${flags}}.. 17ad0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 17ae0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 17af0 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 f our caller spe 17b00 63 69 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 cified an extra 17b10 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 payload to the c 17b20 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 onnection.. 17b30 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c # string, 17b40 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d append it now.. 17b50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 17b60 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 17b70 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 th$extra] > 0}
17b80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17b90 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
17ba0 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20  n \; $extra.. 17bb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 17bc0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 17bd0 64 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 dd the name of t 17be0 68 65 20 63 75 72 72 65 6e 74 20 74 65 73 74 20 he current test 17bf0 66 69 6c 65 2c 20 69 66 20 61 76 61 69 6c 61 62 file, if availab 17c00 6c 65 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20 le. This is.. 17c10 20 20 20 20 23 20 20 20 20 20 20 20 6f 6e 6c 79 # only 17c20 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 used for debugg 17c30 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ing... #.. 17c40 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 17c50 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 66 69 6c xists ::test_fil 17c60 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 17c70 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 17c80 63 74 69 6f 6e 20 7b 3b 54 65 73 74 46 69 6c 65 ction {;TestFile 17c90 3d 24 7b 3a 3a 74 65 73 74 5f 66 69 6c 65 7d 7d =${::test_file}}
17ca0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
17cb0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
17cc0 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65  TE: Add the name
17cd0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current
17ce0 74 65 73 74 2c 20 69 66 20 61 76 61 69 6c 61 62  test, if availab
17cf0 6c 65 2e 20 20 54 68 69 73 20 69 73 20 6f 6e 6c  le.  This is onl
17d00 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
17d10 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   used for debugg
17d20 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
17d30 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
17d40 78 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f 74 65  xists ::eagle_te
17d50 73 74 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29  sts(CurrentName)
17d60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
17d70 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
17d80 74 69 6f 6e 20 7b 3b 54 65 73 74 4e 61 6d 65 3d  tion {;TestName=
17d90 24 7b 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28  ${::eagle_tests( 17da0 43 75 72 72 65 6e 74 4e 61 6d 65 29 7d 7d 0d 0a CurrentName)}}.. 17db0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17dc0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 17dd0 3a 20 46 6f 72 20 63 6c 61 72 69 74 79 2c 20 61 : For clarity, a 17de0 70 70 65 6e 64 20 61 20 66 69 6e 61 6c 20 73 65 ppend a final se 17df0 6d 69 63 6f 6c 6f 6e 20 74 6f 20 74 68 65 20 63 micolon to the c 17e00 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 17e10 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 17e20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect 17e30 69 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20 20 20 20 20 ion \;.... 17e40 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 17e50 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 Open the databa 17e60 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f se connection no 17e70 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f w, placing the o 17e80 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c paque handle val 17e90 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ue.. # 17ea0 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 into the varia 17eb0 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79 ble specified by 17ec0 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 our caller... 17ed0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 17ee0 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 db [sql open -t 17ef0 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 ype SQLite [subs 17f00 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d t$connection]].
17f10 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
17f20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67    # NOTE: Config
17f30 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72  ure the temporar
17f40 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20  y directory for
17f50 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64  the newly opened
17f60 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..
17f70 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74   #       connect
17f80 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f  ion now unless o
17f90 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64  ur caller forbid
17fa0 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  s it...      #..
17fb0 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70 6f        if {$tempo 17fc0 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 rary && ![info e 17fd0 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 xists ::no(setTe 17fe0 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 17ff0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 18000 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 sql execute 18010 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20$db [appendArgs
18020 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
18030 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
18040 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c 22  e_directory = \"
18050 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 44  " [getTemporaryD
18060 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d  irectory] \"\;].
18070 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
18080 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
18090 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79 20 65  E: Perform any e
180a0 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74  xtra per-connect
180b0 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 74 68  ion setup for th
180c0 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 0d 0a  e newly opened..
180d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61        #       da
180e0 74 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c 65 73  tabase now unles
180f0 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72  s our caller for
18100 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20  bids it...
18110 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 78 65  #..      set exe
18120 63 75 74 65 4f 6e 53 65 74 75 70 20 5b 67 65 74  cuteOnSetup [get
18130 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d  ExecuteOnSetup].
18140 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
18150 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 65  ring length $exe 18160 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e 20 30 cuteOnSetup] > 0 18170 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 18180 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a ![info exists : 18190 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 65 74 :no(executeOnSet 181a0 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 up)]} then {.. 181b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 181c0 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 6f # NOTE: This co 181d0 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 65 20 mmand may raise 181e0 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 6f 2c an error; if so, 181f0 20 74 68 61 74 20 69 73 20 66 69 6e 65 2c 20 61 that is fine, a 18200 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 18210 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 the enclosing 18220 20 74 65 73 74 20 77 69 6c 6c 20 74 68 65 6e 20 test will then 18230 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 62 73 fail. The [subs 18240 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 t] command is.. 18250 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 18260 73 65 64 20 6f 6e 20 74 68 65 20 53 51 4c 20 69 sed on the SQL i 18270 6e 20 63 61 73 65 20 69 74 20 6e 65 65 64 73 20 n case it needs 18280 74 6f 20 72 65 66 65 72 20 74 6f 20 73 74 61 74 to refer to stat 18290 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 20 20 e in our.. 182a0 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 # contex 182b0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 182c0 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 sql execu 182d0 74 65 20 24 64 62 20 5b 73 75 62 73 74 20 24 65 te$db [subst $e 182e0 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a xecuteOnSetup].. 182f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 18300 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 18310 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72 6e 20 : Always return 18320 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 the connection h 18330 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 andle upon succe 18340 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ss... #.. 18350 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 0d 0a return$db..
18360 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
18370 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  oc getDbConnecti
18380 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62  on { {varName db
18390 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
183a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
183b0 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
183c0 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
183d0 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
183e0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
183f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
18400 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64  aller.  The hand
18410 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  le to the databa
18420 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  se previously op
18430 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20  ened via the..
18440 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74      #       [set
18450 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20  upDb] procedure
18460 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64  should be stored
18470 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23   there...      #
18480 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
18490 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 184a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 184b0 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74 75 72 NOTE: This retur 184c0 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 ns the ADO.NET I 184d0 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a DbConnection obj 184e0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 ect instance for 184f0 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 18500 20 20 20 20 73 70 65 63 69 66 69 65 64 20 64 61 specified da 18510 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 tabse handle. S 18520 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74 68 69 ince getting thi 18530 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 73 20 s object relies 18540 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 upon.. # 18550 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 72 6e Eagle intern 18560 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72 65 20 als, great care 18570 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 should be taken 18580 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f 73 69 to avoid disposi 18590 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 ng of.. # 185a0 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65 63 74 this object 185b0 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 70 75 or otherwise pu 185c0 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e tting it into an 185d0 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65 2e 0d invalid state.. 185e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 185f0 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 18600 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 db]} then {.. 18610 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 18620 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 18630 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 18640 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f gs +NonPublic -o 18650 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 bjectflags +NoDi 18660 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a spose -alias \.. 18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e In 18680 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 18690 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 ive.connections 186a0 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 Item$db..
186b0 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30    } result] == 0
186c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
186d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
186e0 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73   # NOTE: Success
186f0 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f 70 61  , return the opa
18700 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
18710 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e...          #.
18720 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
18730 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20  n $result.. 18740 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 18750 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18760 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c # NOTE: Fail 18770 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ure, report why. 18780 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 18790 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
187a0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
187b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
187c0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
187d0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
187e0 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74  d to get connect
187f0 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 64  ion handle for d
18800 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20  atabase \"" \..
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62               $db 18820 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c "\", error: " \ 18830 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
18840 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
18850 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
18860 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
18870 69 6c 75 72 65 2c 20 72 65 74 75 72 6e 20 61 6e  ilure, return an
18880 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76 61 6c   obviously inval
18890 69 64 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  id opaque object
188a0 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
188b0 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
188c0 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ""..    }.....
188d0 20 20 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e    proc freeDbCon
188e0 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61  nection { {varNa
188f0 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d  me connection} }
18900 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
18910 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
18920 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
18930 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
18940 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69   "connection") i
18950 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
18960 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20       context of
18970 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65  our caller.  The
18980 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
18990 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f  andle for an ADO
189a0 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20  .NET..      #
189b0 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70      connection p
189c0 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e  reviously return
189d0 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e  ed by [getDbConn
189e0 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62  ection] should b
189f0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
18a00 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
18a10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
18a20 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 18a30 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 connection.... 18a40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 18a50 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 18a60 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 remove the opaqu 18a70 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 e object handle 18a80 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 from the interpr 18a90 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 eter.. # 18aa0 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b now. This [ 18ab0 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 object dispose] 18ac0 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 call will not ac 18ad0 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f tually dispose o 18ae0 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 f the.. # 18af0 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 underlying 18b00 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 object because t 18b10 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c he +NoDispose fl 18b20 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 ag was set on it 18b30 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 18b40 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 during creation 18b50 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 of the opaque ob 18b60 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 ject handle... 18b70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 18b80 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f {[info exists co 18b90 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a nnection] && \.. 18ba0 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 [catch 18bb0 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 {object dispose 18bc0 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72$connection} er
18bd0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
18be0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18bf0 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65   # NOTE: We some
18c00 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65  how failed to re
18c10 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c  move the handle,
18c20 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
18c30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18c40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 18c50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 18c60 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 18c70 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 18c80 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 failed to remov 18c90 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han 18ca0 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 dle \""$connect
18cb0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
18cc0 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22     "\", error: "
18cd0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 18ce0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 18cf0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 ..... proc ad 18d00 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 dDbConnection { 18d10 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e connection {varN 18d20 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 ame db} } {.. 18d30 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 18d40 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the 18d50 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia 18d60 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") 18d70 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o 18d80 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # 18d90 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 caller... 18da0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv 18db0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
18dc0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
18dd0 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74     # NOTE: Creat
18de0 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f  e a correctly fo
18df0 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72  rmatted name for
18e00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
18e10 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20  nnection to..
18e20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 61 64     #       be ad
18e30 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list
18e40 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 45  managed by the E
18e50 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72  agle interpreter
18e60 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
18e70 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74    set db [object
18e80 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
18e90 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
18ea0 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f         Eagle._Co
18eb0 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65  mponents.Private
18ec0 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62  .FormatOps Datab
18ed0 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63  aseObjectName $c 18ee0 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 onnection \.. 18ef0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e SQLiteCon 18f00 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 nection [object 18f10 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 invoke Interpret 18f20 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 er.GetActive Nex 18f30 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 tId]].... # 18f40 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 18f50 41 64 64 20 74 68 65 20 64 61 74 61 62 61 73 65 Add the database 18f60 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 connection prov 18f70 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call 18f80 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a er to the list.. 18f90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 # of 18fa0 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 those known to 18fb0 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 the Eagle interp 18fc0 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d reter... #. 18fd0 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e . object in 18fe0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 18ff0 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 Public Interpret 19000 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e er.GetActive.con 19010 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a nections Add \.. 19020 20 20 20 20 20 20 20 20 20 20 24 64 62 20 24 63$db $c 19030 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d onnection.. } 19040 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 ..... proc re 19050 6d 6f 76 65 44 62 54 72 61 6e 73 61 63 74 69 6f moveDbTransactio 19060 6e 20 7b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 n { transaction 19070 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 19080 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f # NOTE: Remo 19090 76 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 ve the database 190a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 70 72 6f 76 transaction prov 190b0 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call 190c0 65 72 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 er from the.. 190d0 20 20 20 23 20 20 20 20 20 20 20 6c 69 73 74 20 # list 190e0 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 of those known t 190f0 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 o the Eagle inte 19100 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 19110 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 #.. object 19120 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 19130 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 onPublic Interpr 19140 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 74 eter.GetActive.t 19150 72 61 6e 73 61 63 74 69 6f 6e 73 20 5c 0d 0a 20 ransactions \.. 19160 20 20 20 20 20 20 20 20 20 52 65 6d 6f 76 65 20 Remove 19170 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20$transaction..
19180 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
19190 20 67 65 74 52 6f 77 73 46 72 6f 6d 44 61 74 61   getRowsFromData
191a0 54 61 62 6c 65 20 7b 20 64 61 74 61 54 61 62 6c  Table { dataTabl
191b0 65 20 7b 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b  e {valueCallback
191c0 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
191d0 73 65 74 20 72 6f 77 73 20 5b 6c 69 73 74 5d 0d  set rows [list].
191e0 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74  .      set count
191f0 20 5b 24 64 61 74 61 54 61 62 6c 65 20 43 6f 6c   [$dataTable Col 19200 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a 0d 0a 20 umns.Count].... 19210 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e for {set in 19220 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c dex 0} {$index <
19230 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69   $count} {incr i 19240 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 ndex} {.. 19250 20 73 65 74 20 64 61 74 61 43 6f 6c 75 6d 6e 20 set dataColumn 19260 5b 24 64 61 74 61 54 61 62 6c 65 20 2d 61 6c 69 [$dataTable -ali
19270 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 65 74 5f 49  as Columns.get_I
19280 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 20 20 20  tem $index].. 19290 20 20 20 20 20 73 65 74 20 6e 61 6d 65 73 28 24 set names($
192a0 69 6e 64 65 78 29 20 5b 24 64 61 74 61 43 6f 6c  index) [$dataCol 192b0 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 0d umn ColumnName]. 192c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 192d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 192e0 45 3a 20 53 65 74 75 70 20 73 6f 6d 65 20 54 63 E: Setup some Tc 192f0 6c 20 72 65 74 75 72 6e 20 63 6f 64 65 20 63 6f l return code co 19300 6e 73 74 61 6e 74 73 2e 0d 0a 20 20 20 20 20 20 nstants... 19310 23 0d 0a 20 20 20 20 20 20 73 65 74 20 4f 6b 20 #.. set Ok 19320 30 3b 20 73 65 74 20 45 72 72 6f 72 20 31 3b 20 0; set Error 1; 19330 73 65 74 20 52 65 74 75 72 6e 20 32 3b 20 73 65 set Return 2; se 19340 74 20 42 72 65 61 6b 20 33 3b 20 73 65 74 20 43 t Break 3; set C 19350 6f 6e 74 69 6e 75 65 20 34 0d 0a 0d 0a 20 20 20 ontinue 4.... 19360 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 object foreac 19370 68 20 2d 61 6c 69 61 73 20 64 61 74 61 52 6f 77 h -alias dataRow 19380 20 5b 73 65 74 20 64 61 74 61 52 6f 77 73 20 5b [set dataRows [ 19390 24 64 61 74 61 54 61 62 6c 65 20 52 6f 77 73 5d$dataTable Rows]
193a0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ] {..        set
193b0 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20   row [list]....
193c0 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20         for {set
193d0 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78  index 0} {$index 193e0 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 <$count} {incr
193f0 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20   index} {..
19400 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b       set value [
19410 24 64 61 74 61 52 6f 77 20 2d 63 72 65 61 74 65  $dataRow -create 19420 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 74 65 6d -alias get_Item 19430 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20 20$index]....
19440 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
19450 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 43  g length $valueC 19460 61 6c 6c 62 61 63 6b 5d 20 3e 20 30 7d 20 74 68 allback] > 0} th 19470 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19480 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 set code [catc 19490 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 194a0 20 20 20 24 76 61 6c 75 65 43 61 6c 6c 62 61 63$valueCallbac
194b0 6b 20 24 64 61 74 61 54 61 62 6c 65 20 24 64 61  k $dataTable$da
194c0 74 61 52 6f 77 20 24 69 6e 64 65 78 20 24 76 61  taRow $index$va
194d0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..
194e0 20 7d 20 6e 65 77 56 61 6c 75 65 5d 0d 0a 0d 0a   } newValue]....
194f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
19500 24 63 6f 64 65 20 3d 3d 20 24 4f 6b 7d 20 74 68  $code ==$Ok} th
19510 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
19520 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
19530 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
19540 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 28   the specified (
19550 6e 65 77 3f 29 20 72 6f 77 20 76 61 6c 75 65 2e  new?) row value.
19560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19570 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
19580 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69   lappend row [li
19590 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78  st $names($index
195a0 29 20 24 6e 65 77 56 61 6c 75 65 5d 0d 0a 20 20  ) $newValue].. 195b0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 195c0 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 45 72 if {$code == $Er 195d0 72 6f 72 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ror} then {.. 195e0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 195f0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 19600 54 45 3a 20 55 73 65 20 74 68 65 20 28 6e 65 77 TE: Use the (new 19610 3f 29 20 4e 55 4c 4c 20 72 6f 77 20 76 61 6c 75 ?) NULL row valu 19620 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 19630 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 19640 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b lappend row [ 19650 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 list$names($ind 19660 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ex)].. 19670 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 } elseif {$cod
19680 65 20 3d 3d 20 24 52 65 74 75 72 6e 7d 20 74 68  e == $Return} th 19690 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 196a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 196b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 196c0 70 20 72 65 6d 61 69 6e 69 6e 67 20 76 61 6c 75 p remaining valu 196d0 65 73 20 66 6f 72 20 74 68 69 73 20 72 6f 77 2e es for this row. 196e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 196f0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 19700 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 break.. 19710 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 } elseif {$c
19720 6f 64 65 20 3d 3d 20 24 42 72 65 61 6b 7d 20 74  ode == $Break} t 19730 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19740 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 19750 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 19760 69 70 20 70 72 6f 63 65 73 73 69 6e 67 20 74 68 ip processing th 19770 69 73 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 is row value... 19780 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 19790 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 197a0 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 seif {$code == $197b0 43 6f 6e 74 69 6e 75 65 7d 20 74 68 65 6e 20 7b Continue} then { 197c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 197d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 197e0 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 64 65 66 # NOTE: Use def 197f0 61 75 6c 74 20 72 6f 77 20 76 61 6c 75 65 20 68 ault row value h 19800 61 6e 64 6c 69 6e 67 2e 0d 0a 20 20 20 20 20 20 andling... 19810 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 19830 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 19840 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f set co 19850 64 65 20 24 43 6f 6e 74 69 6e 75 65 0d 0a 20 20 de$Continue..
19860 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
19870 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65         if {$code 19880 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 ==$Continue} t
19890 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
198a0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
198b0 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3e 20  ength $value] > 198c0 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 0 && \.. 198d0 20 20 20 20 20 20 20 20 21 5b 6f 62 6a 65 63 74 ![object 198e0 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 65 72 74 20 invoke Convert 198f0 49 73 44 42 4e 75 6c 6c 20 24 76 61 6c 75 65 5d IsDBNull$value]
19900 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19910 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
19920 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73  row [list $names 19930 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c 75 65 ($index) [$value 19940 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 20 20 ToString]].. 19950 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 19960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19970 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 lappend row [li 19980 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 st$names($index 19990 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )].. 199a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 199b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 199c0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 lappend row 199d0 73 20 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d s$row..      }.
199e0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
199f0 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  $rows.. }.... 19a00 0a 20 20 20 20 70 72 6f 63 20 64 75 6d 70 52 6f . proc dumpRo 19a10 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 wsFromDataTable 19a20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d { channel rows } 19a30 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 65 {.. set se 19a40 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 quence 1.... 19a50 20 20 66 6f 72 65 61 63 68 20 72 6f 77 20 24 72 foreach row$r
19a60 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  ows {..        t
19a70 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 19a80 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 19a90 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b [expr { 19aa0 24 73 65 71 75 65 6e 63 65 20 3e 20 31 20 3f 20$sequence > 1 ?
19ab0 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d  "\n" : ""}] "---
19ac0 2d 20 52 4f 57 20 23 22 20 24 73 65 71 75 65 6e  - ROW #" $sequen 19ad0 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 ce :\n].... 19ae0 20 20 20 66 6f 72 65 61 63 68 20 70 61 69 72 20 foreach pair 19af0 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20 20$row {..
19b00 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $19b10 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e pair] >= 2} then 19b20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19b30 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
19b40 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d  appendArgs \t \.
19b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19b60 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24   [list [lindex $19b70 70 61 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c pair 0]] ": " [l 19b80 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 ist [lindex$pai
19b90 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  r 1]] \n]..
19ba0 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
19bb0 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3d  llength $pair] = 19bc0 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 1} then {.. 19bd0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
19be0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
19bf0 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20  rgs \t \..
19c00 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20            [list
19c10 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d  [lindex $pair 0] 19c20 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d ] ": <null>\n"]. 19c30 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 19c40 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 19c50 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
19c60 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e  \t<empty>\n; # N
19c70 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20  OTE: No data?..
19c80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
19c90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
19ca0 20 69 6e 63 72 20 73 65 71 75 65 6e 63 65 0d 0a   incr sequence..
19cb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
19cc0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61  ...    proc clea
19cd0 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65  nupDb { fileName
19ce0 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63   {varName db} {c
19cf0 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75  ollect true} {qu
19d00 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20  alify true}..
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19d20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20    {delete true}
19d30 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
19d40 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
19d50 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c  mpt to force all
19d60 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67   pending "garbag
19d70 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65  e" objects to be
19d80 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20   collected,..
19d90 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75     #       inclu
19da0 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74  ding SQLite stat
19db0 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75  ements and backu
19dc0 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20  p objects; this
19dd0 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20  should allow..
19de0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
19df0 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62  underlying datab
19e00 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64  ase file to be d
19e10 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23  eleted...      #
19e20 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c  ..      if {$col 19e30 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lect} then {.. 19e40 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 collectGar 19e50 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 bage$::test_cha
19e60 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  nnel..      }...
19e70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
19e80 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
19e90 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
19ea0 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
19eb0 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
19ec0 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
19ed0 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
19ee0 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20    The handle to
19ef0 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65  the database pre
19f00 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76  viously opened v
19f10 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  ia the..      #
19f20 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20        [setupDb]
19f30 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64  procedure should
19f40 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65   be stored there
19f50 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
19f60 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 19f70 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 19f80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 19f90 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 Close the connec 19fa0 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 tion to the data 19fb0 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 base now. This 19fc0 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d should allow us. 19fd0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 19fe0 6f 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 o delete the und 19ff0 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 erlying database 1a000 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d file... #. 1a010 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 1a020 20 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b exists db] && [ 1a030 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 catch {sql close 1a040 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68$db} error]} th
1a050 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1a060 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1a070 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
1a080 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20  ed to close the
1a090 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74  database, report
1a0a0 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23   why...        #
1a0b0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
1a0c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1a0d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1a0e0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 1a0f0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 1a100 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 to close databa 1a110 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 se \""$db "\",
1a120 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
1a130 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72          \n\t $er 1a140 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d ror \n].. } 1a150 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 1a160 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 # NOTE: First 1a170 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c , see if our cal 1a180 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 ler has requeste 1a190 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 d an in-memory d 1a1a0 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 atabase... 1a1b0 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d #.. set isM 1a1c0 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 emory [isMemoryD 1a1d0 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a b$fileName]....
1a1e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1a1f0 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
1a200 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68   full path to th
1a210 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file
1a220 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20  name.  For now,
1a230 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20  all test..
1a240 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65  #       database
1a250 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65   files are store
1a260 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61  d in the tempora
1a270 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20  ry directory...
1a280 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1a290 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20   {!$isMemory && 1a2a0 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b$qualify} then {
1a2b0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69  ..        set fi
1a2c0 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  leName [file joi
1a2d0 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69  n [getDatabaseDi
1a2e0 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74  rectory] [file t
1a2f0 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d  ail $fileName]]. 1a300 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1a310 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1a320 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 1a330 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 file still exist 1a340 73 3b 20 69 6e 69 74 69 61 6c 6c 79 2c 20 61 73 s; initially, as 1a350 73 75 6d 65 20 61 6c 6c 20 66 69 6c 65 73 20 77 sume all files w 1a360 69 6c 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ill.. # 1a370 20 20 20 62 65 20 64 65 6c 65 74 65 64 20 73 75 be deleted su 1a380 63 63 65 73 73 66 75 6c 6c 79 2c 20 69 66 20 6e ccessfully, if n 1a390 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 ecessary... 1a3a0 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 75 #.. set su 1a3b0 63 63 65 73 73 20 74 72 75 65 0d 0a 0d 0a 20 20 ccess true.... 1a3c0 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
1a3d0 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26  ry && $delete && 1a3e0 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 [file exists$f
1a3f0 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
1a400 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1a410 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
1a420 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62  p deleting datab
1a430 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d  ase files if som
1a440 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 67  ebody sets the g
1a450 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23  lobal..        #
1a460 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20         variable
1a470 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a  to prevent it...
1a480 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a490 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
1a4a0 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75  ists ::no(cleanu
1a4b0 70 44 62 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  pDbFiles)]} then
1a4c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1a4d0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1a4e0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65  E: Attempt to de
1a4f0 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 57 41  lete the test WA
1a500 4c 20 66 69 6c 65 2c 20 69 66 20 61 6e 79 2c 20  L file, if any,
1a510 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  now...
1a520 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
1a530 20 77 61 6c 46 69 6c 65 4e 61 6d 65 20 5b 61 70   walFileName [ap
1a540 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61  pendArgs $fileNa 1a550 6d 65 20 2d 77 61 6c 5d 0d 0a 0d 0a 20 20 20 20 me -wal].... 1a560 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 1a570 65 78 69 73 74 73 20 24 77 61 6c 46 69 6c 65 4e exists$walFileN
1a580 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
1a590 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1a5a0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1a5b0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 57   If there is a W
1a5c0 41 4c 20 66 69 6c 65 2c 20 69 74 20 73 68 6f 75  AL file, it shou
1a5d0 6c 64 20 62 65 20 7a 65 72 6f 20 62 79 74 65 73  ld be zero bytes
1a5e0 20 61 74 20 74 68 69 73 0d 0a 20 20 20 20 20 20   at this..
1a5f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f        #       po
1a600 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  int...
1a610 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1a620 20 69 66 20 7b 5b 73 65 74 20 73 69 7a 65 20 5b   if {[set size [
1a630 66 69 6c 65 20 73 69 7a 65 20 24 77 61 6c 46 69  file size $walFi 1a640 6c 65 4e 61 6d 65 5d 5d 20 3d 3d 20 30 7d 20 74 leName]] == 0} t 1a650 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a660 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a670 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We 1a680 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed 1a690 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 57 41 to delete the WA 1a6a0 4c 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 L file, report w 1a6b0 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 hy... 1a6c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a6d0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1a6e0 66 69 6c 65 20 64 65 6c 65 74 65 20 24 77 61 6c file delete$wal
1a6f0 46 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d  FileName} error]
1a700 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a710 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1a720 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1a730 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1a750 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 1a760 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele 1a770 74 65 20 57 41 4c 20 66 69 6c 65 20 5c 22 22 20 te WAL file \"" 1a780 24 77 61 6c 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a$walFileName \..
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a7a0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
1a7b0 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22  leanup, error: "
1a7c0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 1a7d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1a7e0 20 20 20 20 73 65 74 20 73 75 63 63 65 73 73 20 set success 1a7f0 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 false.. 1a800 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1a810 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1a820 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1a830 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1a840 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1a850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a860 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1a870 3a 20 57 41 4c 20 66 69 6c 65 20 5c 22 22 20 24  : WAL file \"" $1a880 77 61 6c 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 walFileName "\" 1a890 69 73 20 22 20 24 73 69 7a 65 20 5c 0d 0a 20 20 is "$size \..
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a8b0 22 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2c  " bytes in size,
1a8c0 20 73 6b 69 70 70 69 6e 67 20 61 6c 6c 20 66 69   skipping all fi
1a8d0 6c 65 20 64 65 6c 65 74 69 6f 6e 73 2e 2e 2e 5c  le deletions...\
1a8e0 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n"]....
1a8f0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 23       return 1; #
1a900 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..
1a910 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1a920 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1a930 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
1a940 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
1a950 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20  delete the test
1a960 53 48 4d 20 66 69 6c 65 2c 20 69 66 20 61 6e 79  SHM file, if any
1a970 2c 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  , now...
1a980 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
1a990 65 74 20 73 68 6d 46 69 6c 65 4e 61 6d 65 20 5b  et shmFileName [
1a9a0 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65  appendArgs $file 1a9b0 4e 61 6d 65 20 2d 73 68 6d 5d 0d 0a 0d 0a 20 20 Name -shm].... 1a9c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c if {[fil 1a9d0 65 20 65 78 69 73 74 73 20 24 73 68 6d 46 69 6c e exists$shmFil
1a9e0 65 4e 61 6d 65 5d 20 26 26 20 5c 0d 0a 20 20 20  eName] && \..
1a9f0 20 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 63             [catc
1aa00 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $1aa10 73 68 6d 46 69 6c 65 4e 61 6d 65 7d 20 65 72 72 shmFileName} err 1aa20 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 1aa30 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1aa40 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1aa50 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 We somehow faile 1aa60 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 d to delete the 1aa70 53 48 4d 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 SHM file, report 1aa80 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 why... 1aa90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1aaa0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1aab0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1aac0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1aad0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
1aae0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
1aaf0 64 65 6c 65 74 65 20 53 48 4d 20 66 69 6c 65 20  delete SHM file
1ab00 5c 22 22 20 24 73 68 6d 46 69 6c 65 4e 61 6d 65  \"" $shmFileName 1ab10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ab20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 1ab30 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 leanup, error: " 1ab40 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
1ab50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
1ab60 73 65 74 20 73 75 63 63 65 73 73 20 66 61 6c 73  set success fals
1ab70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  e..          }..
1ab80 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1ab90 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1aba0 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65   Attempt to dele
1abb0 74 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61  te the test data
1abc0 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a  base file now...
1abd0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1abe0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1abf0 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $1ac00 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] 1ac10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1ac20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ac30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 1ac40 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 1ac50 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c o delete the fil 1ac60 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 1ac70 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1ac80 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1ac90 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1aca0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1acc0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
1acd0 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
1ace0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
1acf0 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1ad10 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 \" during cleanu 1ad20 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 p, error: " \n\t 1ad30 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20$error \n]....
1ad40 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73             set s
1ad50 75 63 63 65 73 73 20 66 61 6c 73 65 0d 0a 20 20  uccess false..
1ad60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ad70 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1ad80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1ad90 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
1ada0 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64   that we skipped
1adb0 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69   deleting the fi
1adc0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le...          #
1add0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
1ade0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1adf0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1ae00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 1ae10 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b ==== WARNING: sk 1ae20 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 ipped deleting d 1ae30 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 atabase file \"" 1ae40 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
1ae60 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e  during cleanup\n
1ae70 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  "]..        }..
1ae80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1ae90 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 73  return [expr {$s 1aea0 75 63 63 65 73 73 20 3f 20 30 20 3a 20 31 7d 5d uccess ? 0 : 1}] 1aeb0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1aec0 70 72 6f 63 20 73 61 76 65 45 6e 76 69 72 6f 6e proc saveEnviron 1aed0 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 mentVariables { 1aee0 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 names {varName " 1aef0 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d "} } {.. #. 1af00 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 1af10 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f or each name, do 1af20 65 73 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 es the live envi 1af30 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 1af40 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 exist? If.. 1af50 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 73 # so, s 1af60 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 66 6f ave the value fo 1af70 72 20 6c 61 74 65 72 3b 20 6f 74 68 65 72 77 69 r later; otherwi 1af80 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 se, make sure th 1af90 65 20 73 61 76 65 64 0d 0a 20 20 20 20 20 20 23 e saved.. # 1afa0 20 20 20 20 20 20 20 76 61 6c 75 65 20 64 6f 65 value doe 1afb0 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 s not exist eith 1afc0 65 72 2e 20 20 54 68 65 20 6c 69 76 65 20 65 6e er. The live en 1afd0 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 vironment variab 1afe0 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 les.. # 1aff0 20 20 20 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 ARE NOT chang 1b000 65 64 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 ed by this proce 1b010 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a dure... #.. 1b020 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 1b030 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
1b040 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  e] == 0} then {.
1b050 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72  .        set var
1b060 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20  Name savedEnv..
1b070 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1b080 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 1b090 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 1b0a0 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 foreach name 1b0b0 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20$names {..
1b0c0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1b0d0 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d  ts ::env($name)] 1b0e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b0f0 20 20 20 20 73 65 74 20 73 61 76 65 64 45 6e 76 set savedEnv 1b100 28 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 ($name) $::env($
1b110 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d  name)..        }
1b120 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1b130 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70     unset -nocomp
1b140 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e  lain savedEnv($n 1b150 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d ame).. }. 1b160 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1b170 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b180 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d E: This is self- 1b190 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f cleaning. If no 1b1a0 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 saved environme 1b1b0 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 nt variables now 1b1c0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1b1d0 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 exist, remove th 1b1e0 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 e array... 1b1f0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 #.. if {[ar 1b200 72 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e ray size savedEn 1b210 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d v] == 0} then {. 1b220 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d . unset - 1b230 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 nocomplain saved 1b240 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 Env.. }.. 1b250 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1b260 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d restoreEnvironm 1b270 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e entVariables { n 1b280 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 ames {varName "" 1b290 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 1b2a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f # NOTE: Fo 1b2b0 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 r each name, doe 1b2c0 73 20 74 68 65 20 73 61 76 65 64 20 65 6e 76 69 s the saved envi 1b2d0 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 1b2e0 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 exist? If.. 1b2f0 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 72 # so, r 1b300 65 73 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 estore the saved 1b310 20 76 61 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 value and unset 1b320 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 it; otherwise, 1b330 6d 61 6b 65 20 73 75 72 65 0d 0a 20 20 20 20 20 make sure.. 1b340 20 23 20 20 20 20 20 20 20 74 68 65 20 6c 69 76 # the liv 1b350 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 e environment va 1b360 72 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 riable does not 1b370 65 78 69 73 74 20 65 69 74 68 65 72 20 28 69 2e exist either (i. 1b380 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 e. it.. # 1b390 20 20 20 20 20 77 61 73 20 6e 6f 74 20 73 65 74 was not set 1b3a0 20 74 6f 20 62 65 67 69 6e 20 77 69 74 68 29 2e to begin with). 1b3b0 20 20 42 6f 74 68 20 73 61 76 65 64 20 61 6e 64 Both saved and 1b3c0 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e live environmen 1b3d0 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 t.. # 1b3e0 20 76 61 72 69 61 62 6c 65 73 20 41 52 45 20 63 variables ARE c 1b3f0 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 hanged by this p 1b400 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 rocedure... 1b410 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 1b420 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
1b430 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65  rName] == 0} the
1b440 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
1b450 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e   varName savedEn
1b460 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  v..      }....
1b470 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 1b480 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d Name savedEnv... 1b490 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e . foreach n 1b4a0 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 ame$names {..
1b4b0 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
1b4c0 65 78 69 73 74 73 20 73 61 76 65 64 45 6e 76 28  exists savedEnv(
1b4d0 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  $name)]} then {. 1b4e0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a . set : 1b4f0 3a 65 6e 76 28 24 6e 61 6d 65 29 20 24 73 61 76 :env($name) $sav 1b500 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 edEnv($name)..
1b510 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1b520 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45  ocomplain savedE
1b530 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20  nv($name).. 1b540 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1b550 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 1b560 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 complain ::env($
1b570 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d  name)..        }
1b580 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1b590 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1b5a0 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66  TE: This is self
1b5b0 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e  -cleaning.  If n
1b5c0 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d  o saved environm
1b5d0 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f  ent variables no
1b5e0 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  w..      #
1b5f0 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74   exist, remove t
1b600 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20  he array...
1b610 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61   #..      if {[a
1b620 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 64 45  rray size savedE
1b630 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  nv] == 0} then {
1b640 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20  ..        unset
1b650 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65  -nocomplain save
1b660 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  dEnv..      }..
1b670 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1b680 63 20 73 61 76 65 45 61 67 6c 65 53 68 65 6c 6c  c saveEagleShell
1b690 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b  Environment {} {
1b6a0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
1b6b0 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e  savedEnv savedEn
1b6c0 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45  v....      saveE
1b6d0 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62  nvironmentVariab
1b6e0 6c 65 73 20 5b 6c 69 73 74 20 4e 6f 4d 75 74 65  les [list NoMute
1b6f0 78 65 73 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20  xes] savedEnv..
1b700 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1b710 63 20 72 65 73 74 6f 72 65 45 61 67 6c 65 53 68  c restoreEagleSh
1b720 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b  ellEnvironment {
1b730 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72  } {..      upvar
1b740 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65   1 savedEnv save
1b750 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65  dEnv....      re
1b760 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74  storeEnvironment
1b770 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20  Variables [list
1b780 4e 6f 4d 75 74 65 78 65 73 5d 20 73 61 76 65 64  NoMutexes] saved
1b790 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  Env..    }.....
1b7a0 20 20 20 70 72 6f 63 20 73 61 76 65 4d 64 61 43     proc saveMdaC
1b7b0 6f 6e 66 69 67 45 6e 76 69 72 6f 6e 6d 65 6e 74  onfigEnvironment
1b7c0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76   {} {..      upv
1b7d0 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61  ar 1 savedEnv sa
1b7e0 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20  vedEnv....
1b7f0 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56  saveEnvironmentV
1b800 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 43  ariables [list C
1b810 4f 4d 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 65  OMPLUS_MDA] save
1b820 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  dEnv..    }.....
1b830 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65      proc restore
1b840 4d 64 61 43 6f 6e 66 69 67 45 6e 76 69 72 6f 6e  MdaConfigEnviron
1b850 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ment {} {..
1b860 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e   upvar 1 savedEn
1b870 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20  v savedEnv....
1b880 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72      restoreEnvir
1b890 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1b8a0 5b 6c 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d 44  [list COMPLUS_MD
1b8b0 41 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  A] savedEnv..
1b8c0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1b8d0 73 61 76 65 47 65 74 53 65 74 74 69 6e 67 56 61  saveGetSettingVa
1b8e0 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b  lueEnvironment {
1b8f0 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72  } {..      upvar
1b900 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65   1 savedEnv save
1b910 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61  dEnv....      sa
1b920 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  veEnvironmentVar
1b930 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  iables [list \..
1b940 20 20 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 70            No_Exp
1b950 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 74  and No_SQLiteGet
1b960 53 65 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f 5f  SettingValue No_
1b970 53 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 46  SQLiteXmlConfigF
1b980 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile] \..
1b990 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20    savedEnv..
1b9a0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
1b9b0 65 73 74 6f 72 65 47 65 74 53 65 74 74 69 6e 67  estoreGetSetting
1b9c0 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74  ValueEnvironment
1b9d0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76   {} {..      upv
1b9e0 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61  ar 1 savedEnv sa
1b9f0 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20  vedEnv....
1ba00 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65  restoreEnvironme
1ba10 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
1ba20 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e  t \..          N
1ba30 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69  o_Expand No_SQLi
1ba40 74 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75  teGetSettingValu
1ba50 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f  e No_SQLiteXmlCo
1ba60 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20  nfigFile] \..
1ba70 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d         savedEnv.
1ba80 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1ba90 72 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f  roc saveSQLiteCo
1baa0 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d  nnectionEnvironm
1bab0 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ent {} {..
1bac0 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76  upvar 1 savedEnv
1bad0 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20   savedEnv....
1bae0 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65     saveEnvironme
1baf0 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
1bb00 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44  t \..          D
1bb10 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69  efaultFlags_SQLi
1bb20 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f  teConnection No_
1bb30 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1bb40 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20  NewParser] \..
1bb50 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76          savedEnv
1bb60 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1bb70 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69  proc restoreSQLi
1bb80 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69  teConnectionEnvi
1bb90 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20  ronment {} {..
1bba0 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65      upvar 1 save
1bbb0 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d  dEnv savedEnv...
1bbc0 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e  .      restoreEn
1bbd0 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
1bbe0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
1bbf0 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61        DefaultFla
1bc00 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  gs_SQLiteConnect
1bc10 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e  ion No_SQLiteCon
1bc20 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72  nectionNewParser
1bc30 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] \..          s
1bc40 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a  avedEnv..    }..
1bc50 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65  ...    proc save
1bc60 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76  SQLiteConvertEnv
1bc70 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20  ironment {} {..
1bc80 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76       upvar 1 sav
1bc90 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a  edEnv savedEnv..
1bca0 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69  ..      saveEnvi
1bcb0 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
1bcc0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
1bcd0 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f      Use_SQLiteCo
1bce0 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54  nvert_DefaultDbT
1bcf0 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f  ype Use_SQLiteCo
1bd00 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70  nvert_DefaultTyp
1bd10 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20  eName] \..
1bd20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20      savedEnv..
1bd30 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1bd40 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f   restoreSQLiteCo
1bd50 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74  nvertEnvironment
1bd60 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76   {} {..      upv
1bd70 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61  ar 1 savedEnv sa
1bd80 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20  vedEnv....
1bd90 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65  restoreEnvironme
1bda0 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73  ntVariables [lis
1bdb0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55  t \..          U
1bdc0 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  se_SQLiteConvert
1bdd0 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 55  _DefaultDbType U
1bde0 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  se_SQLiteConvert
1bdf0 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65  _DefaultTypeName
1be00 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] \..          s
1be10 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a  avedEnv..    }..
1be20 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75  ...    proc setu
1be30 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c  pDbInterruptCall
1be40 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c  back { channel l
1be50 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  og } {..      tp
1be60 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 1be70 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 -- setting up de 1be80 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 bugger interrupt 1be90 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a callback... ".. 1bea0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 1beb0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 ch {.. sa 1bec0 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 veEnvironmentVar 1bed0 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a iables [list \.. 1bee0 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 quie 1bef0 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 tFindInterpreter 1bf00 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 TestPath quietSe 1bf10 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 tupInterpreterTe 1bf20 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 stPath].... 1bf30 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 try {.. 1bf40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1bf50 20 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 # NOTE: Prevent 1bf60 20 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69 the vendor scri 1bf70 70 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f pt from being no 1bf80 69 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e isy when creatin 1bf90 67 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 g.. # 1bfa0 20 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65 the isolate 1bfb0 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... 1bfc0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1bfd0 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 set ::env 1bfe0 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 (quietFindInterp 1bff0 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31 reterTestPath) 1 1c000 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1c010 3a 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 ::env(quietSetup 1c020 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 InterpreterTestP 1c030 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 ath) 1.... 1c040 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1c050 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 # NOTE: Make su 1c060 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 re the script de 1c070 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 bugger and the i 1c080 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 solated interpre 1c090 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ter.. # 1c0a0 20 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70 are setup 1c0b0 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 1c0c0 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 se... # 1c0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 .. debu 1c0e0 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75 g setup true tru 1c0f0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e.... # 1c100 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 1c110 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 TE: Load the nec 1c120 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 essary packages 1c130 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 into the isolate 1c140 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... 1c150 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1c160 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61 debug eva 1c170 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l {.. 1c180 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 package require 1c190 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 Eagle.. 1c1a0 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 package requ 1c1b0 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 ire Eagle.Librar 1c1c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 y.. p 1c1d0 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 ackage require E 1c1e0 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 agle.Test.. 1c1f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1c200 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1c210 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th 1c220 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 e necessary vari 1c230 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 ables into the i 1c240 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 solated interpre 1c250 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ter... 1c260 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 #.. deb 1c270 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 ug invoke 0 set 1c280 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
1c290 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a  channel; # NOTE:
1c2a0 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20   For [tputs]...
1c2b0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69           debug i
1c2c0 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65  nvoke 0 set ::te
1c2d0 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e  st_log $log; # N 1c2e0 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e OTE: For [tlog]. 1c2f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 1c300 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1c310 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 E: Install the c 1c320 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 allback script t 1c330 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 o be evaluated i 1c340 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a n the isolated.. 1c350 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1c360 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 interpreter wh 1c370 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 en this interpre 1c380 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 ter is interrupt 1c390 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 ed by script.. 1c3a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1c3b0 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 cancellation, et 1c3c0 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d c... #. 1c3d0 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 1c3e0 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 callback apply 1c3f0 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 {{sender e} {.. 1c400 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1c410 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1c420 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 : Check if this 1c430 64 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63 debugger callbac 1c440 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 k is one that we 1c450 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 care about... 1c460 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1c470 20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74 set int 1c480 65 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c erruptTypes [spl 1c490 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 it [$e Interrupt
1c4a0 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20  Type] ", "]....
1c4b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22             if {"
1c4c0 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e  Canceled" in $in 1c4d0 74 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20 terruptTypes || 1c4e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c4f0 20 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 "Unwound" in 1c500 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d$interruptTypes}
1c510 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c520 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1c530 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c540 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f  Make sure the [o
1c550 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69  bject] command i
1c560 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69  s available.  Si
1c570 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..
1c580 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20     #       this
1c590 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69  is an isolated i
1c5a0 6e 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63  nterpreter, chec
1c5b0 6b 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72  k for it the har
1c5c0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..
1c5d0 20 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20   #       way...
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c600 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
1c610 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74   commands object
1c620 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ]] > 0} then {..
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c640 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
1c650 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61     # NOTE: Itera
1c660 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64  te through all d
1c670 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1c680 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65  ons known to the
1c690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c6a0 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74    #       parent
1c6b0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
1c6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c6e0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
1c6f0 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62   -alias pair [ob
1c700 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
1c710 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
1c720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c730 20 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65       $e Interpre 1c740 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d ter.connections] 1c750 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c760 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1c770 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1c780 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 E: Attempt to ca 1c790 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 ncel any SQL que 1c7a0 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 ries in progress 1c7b0 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on.. 1c7c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 1c7d0 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e his database con 1c7e0 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 nection... 1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c810 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 if {[catch {$pa
1c820 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d  ir Value.Cancel}
1c830 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
1c840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c850 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1c860 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1c870 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 ndArgs \n \.. 1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c890 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1c8a0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 NG: failed to ca 1c8b0 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 ncel query for " 1c8c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e "con 1c8e0 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 nection \"" [$pa
1c8f0 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72  ir Key] "\", err
1c900 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20  or: " \n\t \..
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c920 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d        $error \n] 1c930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c940 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1c950 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1c960 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1c970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c980 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1c990 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1c9a0 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20  rgs \n \..
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1c9c0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e  === WARNING: can
1c9d0 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71  not cancel any q
1c9e0 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20  ueries: " \..
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca00 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22   "the \"object\"
1ca10 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20   command is not
1ca20 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20  available\n"]..
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1ca50 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20           }}..
1ca60 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b       } finally {
1ca70 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74  ..          rest
1ca80 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  oreEnvironmentVa
1ca90 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d  riables [list \.
1caa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71  .              q
1cab0 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65  uietFindInterpre
1cac0 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65  terTestPath quie
1cad0 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65  tSetupInterprete
1cae0 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20  rTestPath]..
1caf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
1cb00 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
1cb10 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
1cb20 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72  onstraint interr
1cb30 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69  uptCallback.sqli
1cb40 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  te3....        t
1cb50 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 1cb60 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 s\n.. } els 1cb70 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 1cb80 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1cb90 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72  endArgs "no, err
1cba0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 1cbb0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 1cbc0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1cbd0 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b oc cleanupFile { 1cbe0 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 fileName {colle 1cbf0 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 ct true} {force 1cc00 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 1cc10 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1cc20 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 1cc30 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 1cc40 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 1cc50 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 1cc60 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 1cc70 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 1cc80 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 1cc90 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 1cca0 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 1ccb0 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 1ccc0 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 1ccd0 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 1cce0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 1ccf0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1cd00 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
1cd10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
1cd20 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 1cd30 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 1cd40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 1cd50 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 1cd60 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 heck if the file 1cd70 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a still exists... 1cd80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1cd90 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 1cda0 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
1cdb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1cdc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1cdd0 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73  kip deleting tes
1cde0 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  t files if someb
1cdf0 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
1ce00 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  bal variable..
1ce10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
1ce20 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
1ce30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ce40 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || ! 1ce50 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1ce60 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d o(cleanupFile)]} 1ce70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1ce80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1ce90 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 1cea0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 1ceb0 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 st file now... 1cec0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1ced0 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f if {[set co 1cee0 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 de [catch {file 1cef0 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
1cf00 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20  } error]]} then
1cf10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
1cf20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
1cf30 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
1cf40 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
1cf50 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
1cf60 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
1cf70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1cf80 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1cf90 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1cfa0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1cfb0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1cfc0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1cfd0 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 o delete test fi 1cfe0 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
1cff0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1d000 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
1d010 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22  leanup, error: "
1d020 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 1d030 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1d040 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1d050 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1d060 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1d070 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 Show that we ski 1d080 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 pped deleting th 1d090 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 e file... 1d0a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1d0b0 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 set code 0.... 1d0c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1d0d0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1d0e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1d0f0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1d100 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65   WARNING: skippe
1d110 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  d deleting test
1d120 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 1d130 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 1d140 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 1d150 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 leanup\n"].. 1d160 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 1d170 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 1d180 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1d190 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 : The file does 1d1a0 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 not exist, succe 1d1b0 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ss!.. #.. 1d1c0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 1d1d0 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 0.. }.... 1d1e0 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 return$cod
1d1f0 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
1d200 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d   proc cleanupMem
1d210 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71  ory { varName {q
1d220 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
1d230 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
1d240 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
1d250 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  and] && \..
1d260 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1d270 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20  gth $varName] > 1d280 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1d290 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1d2a0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 1d2b0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 1d2c0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e iable (e.g. "con 1d2d0 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 nection") in the 1d2e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1d2f0 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 context of our 1d300 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 caller. The op 1d310 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 aque object hand 1d320 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 le for an.. 1d330 20 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e # ADO.N 1d340 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 ET connection pr 1d350 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 eviously returne 1d360 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 d by [getDbConne 1d370 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ction].. 1d380 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 1d390 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. 1d3a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1d3b0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
1d3c0 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  Name connection.
1d3d0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
1d3e0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1d3f0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1d400 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c   $connection Rel 1d410 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 easeMemory.. 1d420 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 } result]} t 1d430 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d440 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1d450 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1d460 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1d470 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1d480 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1d490 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1d4a0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1d4b0 72 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65 release database 1d4c0 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 memory, error: 1d4d0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1d4e0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
1d4f0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
1d500 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
1d510 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1d520 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e  if {[llength [in
1d530 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75  fo commands debu
1d540 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  g]] > 0} then {.
1d550 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
1d560 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1d570 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
1d580 20 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20   debug purge]..
1d590 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d         } result]
1d5a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1d5b0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1d5c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1d5d0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1d5e0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1d5f0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1d600 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1d610 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1d620 74 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72  to purge call fr
1d630 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  ame, error: " \.
1d640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d650 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 1d660 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1d670 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1d680 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1d690 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c {.. upl 1d6a0 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 evel 1 [list deb 1d6b0 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 ug cleanup].. 1d6c0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 } result]} 1d6d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d6e0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1d6f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d700 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1d710 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1d720 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1d730 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1d740 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1d750 20 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72 cleanup interpr 1d760 65 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c eter, error: " \ 1d770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d780 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
1d790 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1d7a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1d7b0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1d7c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70   {..          up
1d7d0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65  level 1 [list de
1d7e0 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20  bug collect]..
1d7f0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d        } result]}
1d800 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d810 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1d820 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d830 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1d840 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1d850 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1d860 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
1d870 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
1d880 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67  o collect garbag
1d890 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1d8b0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 1d8c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1d8d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1d8e0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1d8f0 70 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 proc setupMemory 1d900 43 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 Counters { varNa 1d910 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 me } {.. if 1d920 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1d930 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 1d940 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv 1d950 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f ar 1$varName co
1d960 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20  unter....
1d970 20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20   set counter(1)
1d980 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
1d990 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
1d9a0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67       System.Diag
1d9b0 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61  nostics.Performa
1d9c0 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65  nceCounter Proce
1d9d0 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss \..
1d9e0 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20    "Working Set"
1d9f0 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
1da00 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e  file tail $::bin 1da10 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 _file]]].... 1da20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 set counter( 1da30 32 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 2) [object creat 1da40 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 e -alias \.. 1da50 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1da60 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f iagnostics.Perfo 1da70 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 rmanceCounter Pr 1da80 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 ocess \.. 1da90 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 "Working Se 1daa0 74 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f t Peak" [file ro 1dab0 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 otname [file tai 1dac0 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d l$::bin_file]]]
1dad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
1dae0 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65  counter(3) [obje
1daf0 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
1db00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1db10 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
1db20 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f  cs.PerformanceCo
1db30 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d  unter Process \.
1db40 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72  .            "Pr
1db50 69 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69  ivate Bytes" [fi
1db60 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c  le rootname [fil
1db70 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69  e tail $::bin_fi 1db80 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a le]]].. }.. 1db90 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 .. return " 1dba0 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ".. }..... 1dbb0 20 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f proc reportMemo 1dbc0 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 ryCounters { cha 1dbd0 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 nnel varName pre 1dbe0 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 fix } {.. i 1dbf0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 1dc00 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 1dc10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 en {.. up 1dc20 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 var 1$varName c
1dc30 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20  ounter....
1dc40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1dc50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1dc60 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1dc70 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f - "$prefix " co
1dc80 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20  unter \"" \..
1dc90 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74           [object
1dca0 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72   invoke $counter 1dcb0 28 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d (1) CounterName] 1dcc0 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 "\" value is " 1dcd0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1dce0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
1dcf0 6f 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c  ounter(1) RawVal
1dd00 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ue] \n]....
1dd10 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1dd20 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1dd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 1dd40 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 -- "$prefix " c
1dd50 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20  ounter \"" \..
1dd60 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63            [objec
1dd70 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65  t invoke $counte 1dd80 72 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 r(2) CounterName 1dd90 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 ] "\" value is " 1dda0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ddb0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
1ddc0 63 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61  counter(2) RawVa
1ddd0 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  lue] \n]....
1dde0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1ddf0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1de00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 1de10 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 --- "$prefix "
1de20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20  counter \"" \..
1de30 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65             [obje
1de40 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74  ct invoke $count 1de50 65 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d er(3) CounterNam 1de60 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 e] "\" value is 1de70 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1de80 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 1de90 24 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56$counter(3) RawV
1dea0 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  alue] \n]..
1deb0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
1dec0 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61    proc collectGa
1ded0 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20  rbage { channel
1dee0 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30  {milliseconds 10
1def0 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d  00} {quiet true}
1df00 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
1df10 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
1df20 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
1df30 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
1df40 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1df50 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1df60 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
1df70 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ry false..
1df80 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30    } result] == 0
1df90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1dfa0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1dfb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1dfc0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1dfd0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1dfe0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1dff0 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20     "---- memory
1e000 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c  in use by the CL
1e010 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74  R before collect
1e020 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  ion... " \..
1e030 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res 1e040 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ult " bytes\n"]. 1e050 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1e060 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1e070 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1e080 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1e090 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1e0a0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1e0b0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1e0c0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1e0d0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1e0e0 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 o get CLR memory 1e0f0 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 usage, error: " 1e100 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e110 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 \n\t$result
1e120 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1e130 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
1e140 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
1e150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e190 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
1e1a0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1e1b0 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 74  E: Repeatedly at
1e1c0 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74  tempt to collect
1e1d0 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74   garbage until t
1e1e0 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62  he allotted numb
1e1f0 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  er..      #
1e200 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64    of millisecond
1e210 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20  s has elapsed.
1e220 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 74  Always attempt t
1e230 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67  o collect garbag
1e240 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
1e250 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d   at least once..
1e260 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1e270 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
1e280 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
1e290 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
1e2a0 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20  et start [clock
1e2b0 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20  seconds]..
1e2c0 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72    set stop [expr
1e2d0 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c   {$start + ($mil
1e2e0 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30  liseconds / 1000
1e2f0 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64  )}]....        d
1e300 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  o {..          #
1e310 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1e320 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66  TE: Attempt to f
1e330 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62  orce a full garb
1e340 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e  age collection n
1e350 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d  ow.  Report any.
1e360 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
1e370 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 73     error that is
1e380 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20   encountered if
1e390 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20  we fail...
1e3a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1e3b0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
1e3c0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
1e3d0 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54  t invoke GC GetT
1e3e0 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d  otalMemory true.
1e3f0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72  .          } err
1e400 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
1e410 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1e420 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1e430 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1e440 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1e450 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1e460 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1e470 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1e480 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63  d full garbage c
1e490 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72  ollection, error
1e4a0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
1e4b0 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65           \n\t $e 1e4c0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 1e4d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1e4e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1e4f0 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b set now [clock 1e500 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 seconds].. 1e510 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 } while {$sta
1e520 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e  rt <= $now &&$n
1e530 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20  ow < $stop}.. 1e540 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 }.... ## 1e550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e590 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... 1e5a0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 1e5b0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 ObjectCommand]} 1e5c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1e5d0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 1e5e0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 1e5f0 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 nvoke GC GetTota 1e600 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 lMemory false.. 1e610 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 1e620 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1e630 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1e640 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1e650 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1e660 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1e670 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1e680 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 "---- me 1e690 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 mory in use by t 1e6a0 68 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c he CLR after col 1e6b0 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a lection... " \.. 1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e6d0 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c$result " bytes\
1e6e0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
1e6f0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1e700 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1e710 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1e720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1e730 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1e740 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1e760 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
1e770 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65  ed to get CLR me
1e780 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f  mory usage, erro
1e790 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
1e7a0 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 1e7b0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1e7c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1e7d0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1e7e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 1e7f0 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 tSQLiteHandleCou 1e800 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 nts { channel {q 1e810 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. 1e820 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 1e830 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 t [list].... 1e840 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 1e850 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 eObjectCommand] 1e860 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1e870 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e [haveSQLiteDefin 1e880 65 43 6f 6e 73 74 61 6e 74 20 43 4f 55 4e 54 5f eConstant COUNT_ 1e890 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d HANDLE]} then {. 1e8a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1e8b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add 1e8c0 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 each critical ha 1e8d0 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 ndle count to th 1e8e0 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 e resulting list 1e8f0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1e900 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na 1e910 6d 65 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 me [list \.. 1e920 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 connecti 1e930 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e onCount statemen 1e940 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 tCount backupCou 1e950 6e 74 20 62 6c 6f 62 43 6f 75 6e 74 5d 20 7b 0d nt blobCount] {. 1e960 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 1e970 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1e980 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1e990 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1e9a0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1e9b0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1e9c0 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 ata.SQLite.Debug 1e9d0 44 61 74 61 20 24 6e 61 6d 65 0d 0a 20 20 20 20 Data$name..
1e9e0 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d        } value] =
1e9f0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1ea00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1ea10 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1ea20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1ea30 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1ea40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1ea60 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  - critical handl
1ea70 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d  e count \"" $nam 1ea80 65 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 e "\" is "$valu
1ea90 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
1eaa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1eab0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
1eac0 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20  lt $value.. 1ead0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1eae0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1eaf0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1eb10 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1eb20 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1eb40 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1eb50 6c 65 64 20 74 6f 20 67 65 74 20 63 72 69 74 69 led to get criti 1eb60 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 cal handle count 1eb70 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 1eb80 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20$name
1eb90 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
1eba0 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20  \t $value \n].. 1ebb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1ebc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1ebd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 1ebe0 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 seif {!$quiet} t
1ebf0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1ec00 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1ec10 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e  : The actual han
1ec20 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e  dle counts are n
1ec30 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68  ot available; th
1ec40 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20  erefore, just..
1ec50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
1ec60 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c  eturn an empty l
1ec70 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ist...        #.
1ec80 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1ec90 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 channel "---- cr 1eca0 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f itical handle co 1ecb0 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 unts unavailable 1ecc0 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n".. }.... 1ecd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
1ece0 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
1ecf0 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77      proc shutdow
1ed00 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65  nSQLite { channe
1ed10 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20  l {force false}
1ed20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
1ed30 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1ed40 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
1ed50 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20  ure that SQLite
1ed60 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
1ed70 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64  completely shutd
1ed80 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20  own.  This..
1ed90 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65    #       is use
1eda0 64 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20  d by tests that
1edb0 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61  change configura
1edc0 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64  tion options and
1edd0 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20  /or those..
1ede0 20 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65   #       that ne
1edf0 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure
1ee00 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69  logging is initi
1ee10 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73  alized (i.e. jus
1ee20 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20  t in case..
1ee30 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c   #       the SQL
1ee40 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
1ee50 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64   was initialized
1ee60 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20   in the process
1ee70 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20  prior to..
1ee80 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
1ee90 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e  teLog class bein
1eea0 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20  g able to setup
1eeb0 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c  its logging call
1eec0 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20  back)...      #
1eed0 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20        Normally,
1eee0 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79  this should only
1eef0 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66   be performed if
1ef00 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65   SQLite is loade
1ef10 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20  d and..      #
1ef20 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75       ready for u
1ef30 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
1ef40 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uite...      #..
1ef50 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65        if {$force 1ef60 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 || [isSQLiteRea 1ef70 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 dy]} then {.. 1ef80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1ef90 23 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 # BUGFIX: Make s 1efa0 75 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c 65 ure that any "le 1efb0 61 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69 6f aked" transactio 1efc0 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 ns and/or connec 1efd0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 tions.. # 1efe0 20 20 20 20 20 20 20 20 20 61 72 65 20 63 6c 65 are cle 1eff0 61 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20 63 aned up before c 1f000 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 alling the nativ 1f010 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 e shutdown funct 1f020 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ion... #. 1f030 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 1f040 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e transaction [in 1f050 66 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d fo transactions] 1f060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1f070 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 1f080 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f090 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c System#Data#SQL 1f0a0 69 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73 61 ite#SQLiteTransa 1f0b0 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 ction#*$transac
1f0c0 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tion]} then {..
1f0d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
1f0e0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1f0f0 20 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e 73         sql trans
1f100 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  action rollback
1f110 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20  $transaction.. 1f120 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f } erro 1f130 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d r] == 0} then {. 1f140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 1f150 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1f160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1f170 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1f180 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1f190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f1a0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c "---- roll 1f1b0 65 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 ed back leaked t 1f1c0 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c ransaction \"" \ 1f1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f1e0 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69$transacti
1f1f0 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  on \"\n]..
1f200 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1f210 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1f220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1f230 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1f240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f250 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1f260 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1f270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f280 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1f290 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
1f2a0 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 74  ollback leaked t
1f2b0 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c  ransaction \"" \
1f2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f2d0 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69        $transacti 1f2e0 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 on "\", error: " 1f2f0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
1f300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f310 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1f320 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1f330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1f340 20 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 5b      foreach db [
1f350 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  info connections
1f360 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ] {..          i
1f370 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  f {[string match
1f380 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f390 20 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51    System#Data#SQ
1f3a0 4c 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite#SQLiteConne
1f3b0 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68  ction#* $db]} th 1f3c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1f3d0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 if {[catch {sq 1f3e0 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 l close$db} err
1f3f0 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
1f400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f410 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1f420 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1f430 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1f440 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1f450 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1f460 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f         "---- clo
1f470 73 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 62  sed leaked datab
1f480 61 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e  ase \"" $db \"\n 1f490 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 1f4a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1f4b0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1f4c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1f4d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1f4f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1f500 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1f520 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1f530 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 iled to close le 1f540 61 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 aked database \" 1f550 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1f560 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22$db "\"
1f570 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
1f580 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 1f590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1f5a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1f5b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f5c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 1f5d0 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 . # BUGFI 1f5e0 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e X: Before callin 1f5f0 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 g the native shu 1f600 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 tdown function, 1f610 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a make sure both.. 1f620 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1f630 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 of the PRAGMA 1f640 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 related director 1f650 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 y names are free 1f660 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 1f670 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 1f680 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 1f690 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a$channel true..
1f6a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1f6b0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1f6c0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1f6d0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
1f6e0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
1f6f0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1f700 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
1f710 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65  veMethods sqlite
1f720 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20  3_shutdown..
1f730 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
1f740 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1f750 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1f760 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1f770 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1f780 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1f790 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1f7a0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
1f7b0 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
1f7c0 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73  ()... ok: " $res 1f7d0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 1f7e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 1f7f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1f800 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1f810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f820 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1f830 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1f840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f850 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 1f860 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e te3_shutdown().. 1f870 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 1f880 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
1f890 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f8a0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
1f8b0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1f8c0 20 67 65 74 53 65 74 74 69 6e 67 52 65 61 64 43   getSettingReadC
1f8d0 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7b 76 69 61  ount { name {via
1f8e0 46 69 6c 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  File false} } {.
1f8f0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
1f900 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64  Constraint build
1f910 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  Configuration.De
1f920 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b  bug] && [catch {
1f930 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
1f940 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1f950 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73  NonPublic -alias
1f960 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f970 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1f980 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 74  te.DebugData Get
1f990 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74  SettingReadCount
1f9a0 73 20 24 76 69 61 46 69 6c 65 0d 0a 20 20 20 20  s $viaFile.. 1f9b0 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64 43 } settingReadC 1f9c0 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 ounts] == 0} the 1f9d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 1f9e0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 1f9f0 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e$name] > 0} then
1fa00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1fa10 20 7b 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43   {[$settingReadC 1fa20 6f 75 6e 74 73 20 54 72 79 47 65 74 56 61 6c 75 ounts TryGetValu 1fa30 65 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 e$name value]}
1fa40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1fa50 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1fa60 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1fa70 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1fa80 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 1fa90 65 74 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d 65 etting \""$name
1faa0 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20   "\" was read "
1fab0 24 76 61 6c 75 65 20 22 20 74 69 6d 65 73 22 20  $value " times" 1fac0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1fad0 20 20 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 [expr {$viaFi
1fae0 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 20  le ? " from the
1faf0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
1fb00 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a  le" : ""}] \n]..
1fb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1fb20 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20  turn $value.. 1fb30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1fb40 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1fb50 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f set nameCo 1fb60 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 65 61 unt [$settingRea
1fb70 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a  dCounts Count]..
1fb80 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61            set va
1fb90 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20  lueCount 0....
1fba0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
1fbb0 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61  oreach -alias pa
1fbc0 69 72 20 24 73 65 74 74 69 6e 67 52 65 61 64 43  ir $settingReadC 1fbd0 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 ounts {.. 1fbe0 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 incr valueC 1fbf0 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 ount [$pair Valu
1fc00 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
1fc10 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1fc20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1fc30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1fc40 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 "---- set 1fc50 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20 ting \"" [$pair
1fc60 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61  Key] "\" was rea
1fc70 64 20 22 20 5b 24 70 61 69 72 20 56 61 6c 75 65  d " [$pair Value 1fc80 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 1fc90 20 20 20 20 20 22 20 74 69 6d 65 73 22 20 5b 65 " times" [e 1fca0 78 70 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 xpr {$viaFile ?
1fcb0 22 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69  " from the confi
1fcc0 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 22 20 3a  guration file" :
1fcd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1fce0 20 20 20 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20 20      ""}] \n]..
1fcf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1fd00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
1fd10 69 73 74 20 24 6e 61 6d 65 43 6f 75 6e 74 20 24  ist $nameCount$
1fd20 76 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20 20 20  valueCount]..
1fd30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1fd40 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
1fd50 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d  ring length $nam 1fd60 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 1fd70 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1fd80 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1fd90 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1fda0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
1fdb0 65 74 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d 65  etting \"" $name 1fdc0 20 22 5c 22 20 77 61 73 20 6e 6f 74 20 72 65 61 "\" was not rea 1fdd0 64 22 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 d" [expr {$viaFi
1fde0 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20  le ? \..
1fdf0 20 20 20 20 22 20 66 72 6f 6d 20 74 68 65 20 63      " from the c
1fe00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
1fe10 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20  e" : ""}] \n]..
1fe20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1fe30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1fe40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1fe50 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1fe60 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6e 6f "---- no 1fe70 20 73 65 74 74 69 6e 67 73 20 77 65 72 65 20 72 settings were r 1fe80 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76 69 61 ead" [expr {$via
1fe90 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20  File ? \..
1fea0 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74 68 65        " from the
1feb0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
1fec0 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d  ile" : ""}] \n].
1fed0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1fee0 20 20 72 65 74 75 72 6e 20 2d 31 0d 0a 20 20 20    return -1..
1fef0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1ff00 67 65 74 4f 74 68 65 72 43 6f 75 6e 74 20 7b 20  getOtherCount {
1ff10 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  name } {..
1ff20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61  if {[haveConstra
1ff30 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75  int buildConfigu
1ff40 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26  ration.Debug] &&
1ff50 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..
1ff60 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1ff70 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
1ff80 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  ic -alias \..
1ff90 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1ffa0 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75  Data.SQLite.Debu
1ffb0 67 44 61 74 61 20 47 65 74 4f 74 68 65 72 43 6f  gData GetOtherCo
1ffc0 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 6f 74  unts..      } ot
1ffd0 68 65 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d  herCounts] == 0}
1ffe0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1fff0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
20000 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20  gth $name] > 0} 20010 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 20020 20 20 69 66 20 7b 5b 24 6f 74 68 65 72 43 6f 75 if {[$otherCou
20030 6e 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 20  nts TryGetValue
20040 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74 68  $name value]} th 20050 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20060 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
20070 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
20080 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
20090 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68         "---- oth
200a0 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 24  er counter \"" $200b0 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 76 61 6c name "\" has val 200c0 75 65 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d ue "$value \n].
200d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
200e0 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20  eturn $value.. 200f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 20100 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 20110 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 set nameC 20120 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 6e ount [$otherCoun
20130 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20  ts Count]..
20140 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f       set valueCo
20150 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20  unt 0....
20160 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
20170 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 6f  h -alias pair $o 20180 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 therCounts {.. 20190 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 incr v 201a0 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 alueCount [$pair
201b0 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20   Value]....
201c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 201d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 201e0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 201f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20200 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 - other counter 20210 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 \"" [$pair Key]
20220 22 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20  "\" has value "
20230 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20240 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d     [$pair Value] 20250 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 20260 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 }.... r 20270 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d eturn [list$nam
20280 65 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75  eCount $valueCou 20290 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a nt].. }.. 202a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 202b0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 202c0 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 gth$name] > 0}
202d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
202e0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 202f0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 20300 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 20310 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 "---- other cou 20320 6e 74 65 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 nter \""$name "
20330 5c 22 20 68 61 73 20 6e 6f 20 76 61 6c 75 65 5c  \" has no value\
20340 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  n"]..      } els
20350 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
20360 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 20370 65 6c 20 22 2d 2d 2d 2d 20 74 68 65 72 65 20 61 el "---- there a 20380 72 65 20 6e 6f 20 6f 74 68 65 72 20 63 6f 75 6e re no other coun 20390 74 65 72 73 5c 6e 22 0d 0a 20 20 20 20 20 20 7d ters\n".. } 203a0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 203b0 20 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 -1.. }..... 203c0 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 proc reportSQ 203d0 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d LiteResources {. 203e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 . cha 203f0 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 nnel {quiet fals 20400 65 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 e} {reset true} 20410 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d {collect true} } 20420 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 20430 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 70 6f # NOTE: If po 20440 73 73 69 62 6c 65 2c 20 61 6c 77 61 79 73 20 72 ssible, always r 20450 65 73 65 74 20 74 68 65 20 63 61 63 68 65 64 20 eset the cached 20460 61 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f assembly directo 20470 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ry.. # 20480 20 20 61 6e 64 20 74 68 65 20 63 61 63 68 65 64 and the cached 20490 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 XML configurati 204a0 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 on file name... 204b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 204c0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 204d0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 204e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 204f0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 20500 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 20510 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 20520 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 20530 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 20540 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 20550 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 Re 20570 73 65 74 43 61 63 68 65 64 41 73 73 65 6d 62 6c setCachedAssembl 20580 79 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 yDirectory.. 20590 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 } error] == 205a0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 205b0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
205c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
205d0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 205e0 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 nnel "---- reset 205f0 20 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79 cached assembly 20600 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 0d 0a 20 directory\n".. 20610 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 20620 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 20630 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
20640 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
20650 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $20660 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20670 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 20680 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 20690 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 206a0 72 65 73 65 74 20 63 61 63 68 65 64 20 61 73 73 reset cached ass 206b0 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79 2c embly directory, 206c0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 206d0 20 20 20 20 20 20 22 65 72 72 6f 72 3a 20 22 20 "error: " 206e0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
206f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
20700 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
20710 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
20720 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
20730 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
20740 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
20750 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
20760 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
20770 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
20780 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
20790 20 20 20 20 52 65 73 65 74 43 61 63 68 65 64 58      ResetCachedX
207a0 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  mlConfigFileName
207b0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f  ..        } erro
207c0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  r] == 0} then {.
207d0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
207e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 207f0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 20800 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
20810 20 72 65 73 65 74 20 63 61 63 68 65 64 20 58 4d   reset cached XM
20820 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  L configuration
20830 66 69 6c 65 20 6e 61 6d 65 5c 6e 22 0d 0a 20 20  file name\n"..
20840 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20850 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
20860 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 20870 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 20880 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
20890 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
208a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
208b0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
208c0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
208d0 65 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c 20  eset cached XML
208e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 20  configuration "
208f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20900 20 20 20 22 66 69 6c 65 20 6e 61 6d 65 2c 20 65     "file name, e
20910 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 20920 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 20930 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 20940 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 20950 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 20960 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c E: If available, 20970 20 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 report on (and 20980 70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 possibly reset) 20990 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 the runtime.. 209a0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 # confi 209b0 67 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 guration statist 209c0 69 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ics... #.. 209d0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 209e0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 209f0 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 d] && \.. 20a00 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 [haveConstrai 20a10 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 nt buildConfigur 20a20 61 74 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74 68 ation.Debug]} th 20a30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 20a40 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 20a50 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 20a60 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 20a70 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 20a90 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 20aa0 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 53 65 .DebugData GetSe 20ab0 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 ttingReadCounts 20ac0 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d false.. } 20ad0 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e settingReadCoun 20ae0 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ts] == 0} then { 20af0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 20b00 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 nameCount [$sett
20b10 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f  ingReadCounts Co
20b20 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  unt]..
20b30 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30  set valueCount 0
20b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  ....          ob
20b50 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
20b60 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69 6e  ias pair $settin 20b70 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 gReadCounts {.. 20b80 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 incr 20b90 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 valueCount [$pai
20ba0 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20  r Value]....
20bb0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 20bc0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 20bd0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 20be0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
20bf0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
20c00 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
20c10 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70   setting \"" [$p 20c20 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 air Key] "\" was 20c30 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 read " \.. 20c40 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 [$p
20c50 61 69 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d  air Value] " tim
20c60 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
20c70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
20c80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
20c90 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e  if {$reset} then 20ca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20cb0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 20cc0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 20cd0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 20ce0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 +NonPublic -ali 20cf0 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 as \.. 20d00 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 20d10 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 ata.SQLite.Debug 20d20 44 61 74 61 20 43 6c 65 61 72 53 65 74 74 69 6e Data ClearSettin 20d30 67 52 65 61 64 43 6f 75 6e 74 73 20 66 61 6c 73 gReadCounts fals 20d40 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 20d50 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 error] == 0} th 20d60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20d70 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
20d80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
20d90 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $20da0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20db0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 20dc0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 20dd0 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 reset setting s 20de0 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 tatistics for th 20df0 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a e previous " \.. 20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20e10 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22$nameCount "
20e20 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61   names and " $va 20e30 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 lueCount " value 20e40 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 s read\n"].. 20e50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 20e60 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 20e70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20e80 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
20e90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
20ea0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 20eb0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 20ec0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20ed0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 20ee0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 20ef0 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 reset setting s 20f00 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 22 20 tatistics for " 20f10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20f20 20 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76 "the prev 20f30 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e ious "$nameCoun
20f40 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20  t " names and "
20f50 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20  $valueCount \.. 20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20f70 20 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 " values read 20f80 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 20f90 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
20fa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
20fb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
20fc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
20fd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
20fe0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
20ff0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
21000 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
21010 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a  ublic -alias \..
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
21030 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
21040 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 53 65  .DebugData GetSe
21050 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20  ttingReadCounts
21060 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 20  true..        }
21070 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43  settingFileReadC
21080 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65  ounts] == 0} the
21090 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
210a0 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73  et nameCount [$s 210b0 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f ettingFileReadCo 210c0 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 unts Count].. 210d0 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 set value 210e0 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 Count 0.... 210f0 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 21100 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 ach -alias pair 21110 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64$settingFileRead
21120 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20  Counts {..
21130 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65        incr value
21140 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c  Count [$pair Val 21150 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ue].... 21160 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
21170 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
21180 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 21190 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 211a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 211b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 "---- sett 211c0 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b ing \"" [$pair K
211d0 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64  ey] "\" was read
211e0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
211f0 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 56          [$pair V 21200 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 20 66 72 alue] " times fr 21210 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 om the configura 21220 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 tion file\n"].. 21230 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 21240 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 21250 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 if {$rese
21260 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
21270 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
21280 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
21290 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
212a0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
212b0 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  ic -alias \..
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
212d0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
212e0 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65 61  e.DebugData Clea
212f0 72 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  rSettingReadCoun
21300 74 73 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  ts true..
21310 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d       } error] ==
21320 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
21330 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$21340 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 21360 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
21370 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21390 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 74   "---- reset set
213a0 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 20  ting statistics
213b0 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73  for the previous
213c0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
213d0 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43            $nameC 213e0 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 ount " names and 213f0 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 "$valueCount "
21400 20 76 61 6c 75 65 73 20 72 65 61 64 20 22 20 5c   values read " \
21410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21420 20 20 20 20 20 20 22 66 72 6f 6d 20 74 68 65 20        "from the
21430 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
21440 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  le\n"]..
21450 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21460 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
21480 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 21490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 214a0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
214b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
214d0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
214e0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73  G: failed to res
214f0 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69  et setting stati
21500 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20  stics for " \..
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21520 20 20 20 22 74 68 65 20 70 72 65 76 69 6f 75 73     "the previous
21530 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20   " $nameCount " 21540 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c names and "$val
21550 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20  ueCount \..
21560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21570 20 76 61 6c 75 65 73 20 72 65 61 64 20 66 72 6f   values read fro
21580 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  m the configurat
21590 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f 72 3a  ion file, error:
215a0 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 20   " \n\t \..
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $215c0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 215d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 215e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 215f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 21600 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 21610 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 21620 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 21630 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 21640 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 blic -alias \.. 21650 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 21660 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 21670 44 65 62 75 67 44 61 74 61 20 47 65 74 4f 74 68 DebugData GetOth 21680 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 erCounts.. 21690 20 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d } otherCounts] 216a0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 216b0 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d set nam 216c0 65 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f eCount [$otherCo
216d0 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20  unts Count]..
216e0 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65         set value
216f0 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20  Count 0....
21700 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
21710 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20  ach -alias pair
21720 24 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a  $otherCounts {.. 21730 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 incr 21740 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 valueCount [$pa
21750 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20  ir Value]....
21760 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 21770 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 21780 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 21790 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
217a0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
217b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
217c0 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20  - other counter
217d0 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20  \"" [$pair Key] 217e0 22 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 "\" has value " 217f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21800 20 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 [$pair Valu
21810 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  e] \n]..
21820 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
21830 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
21840 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e  if {$reset} then 21850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21860 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 21870 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 21880 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 21890 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 +NonPublic -ali 218a0 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 as \.. 218b0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 218c0 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 ata.SQLite.Debug 218d0 44 61 74 61 20 43 6c 65 61 72 4f 74 68 65 72 43 Data ClearOtherC 218e0 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 ounts.. 218f0 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 21900 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 21910 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
21920 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
21940 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 21950 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 21970 2d 2d 2d 2d 20 72 65 73 65 74 20 6f 74 68 65 72 ---- reset other 21980 20 63 6f 75 6e 74 65 72 73 20 66 6f 72 20 74 68 counters for th 21990 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a e previous " \.. 219a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 219b0 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22$nameCount "
219c0 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61   names and " $va 219d0 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 lueCount " value 219e0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 s\n"].. 219f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 21a00 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 21a10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 21a20 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
21a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21a40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 21a50 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 21a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21a70 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 21a80 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 : failed to rese 21a90 74 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 73 t other counters 21aa0 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 for " \.. 21ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 "t 21ac0 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e he previous "$n
21ad0 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73  ameCount " names
21ae0 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75   and " $valueCou 21af0 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 nt \.. 21b00 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 " valu 21b10 65 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c es, error: " \n\ 21b20 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
21b30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
21b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
21b50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
21b60 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
21b70 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
21b80 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
21b90 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  and] && \..
21ba0 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65       [haveSQLite
21bb0 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49  DefineConstant I
21bc0 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
21bd0 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ABLE] && \..
21be0 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74        [haveSQLit
21bf0 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
21c00 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
21c10 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ES]} then {..
21c20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 21c30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 21c40 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
21c50 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74  el "---- current
21c60 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
21c70 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e  y SQLiteMemory..
21c80 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  . "..        }..
21c90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
21ca0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
21cb0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
21cc0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
21cd0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
21ce0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
21cf0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f  QLite.SQLiteMemo
21d00 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65  ry bytesAllocate
21d10 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  d..        } mem
21d20 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
21d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
21d40 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 21d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 21d60 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
21d70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 21d80 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 21d90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21da0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 21db0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 21dc0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 21dd0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
21de0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
21df0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 21e00 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 21e10 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
21e20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
21e30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21e40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 21e50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 21e60 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
21e70 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65  "---- maximum me
21e80 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
21e90 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22  QLiteMemory... "
21ea0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
21eb0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
21ec0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
21ed0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
21ee0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
21ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21f00 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
21f10 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20  te.SQLiteMemory
21f20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f  maximumBytesAllo
21f30 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d  cated..        }
21f40 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
21f50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
21f60 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 21f70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 21f80 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
21f90 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 21fa0 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d mory " bytes\n"] 21fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 21fc0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 21fd0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d . set m 21fe0 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 21ff0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 22000 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
22010 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
22020 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 22030 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
22040 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
22050 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
22060 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
22070 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 22080 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 22090 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
220a0 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
220b0 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e   use by SQLite..
220c0 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  . "..      }....
220d0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
220e0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
220f0 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
22100 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
22110 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
22120 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
22130 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
22150 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
22160 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
22170 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d  hods sqlite3_mem
22180 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 20  ory_used..
22190 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30    } memory] == 0
221a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
221b0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 221c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 221d0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
221e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
221f0 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c  $memory " bytes\ 22200 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } 22210 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 22220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 22230 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 22240 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c E: Maybe the SQL 22250 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 22260 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f is unavailable? 22270 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 22280 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 22290 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 222a0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
222b0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
222c0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
222d0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 222e0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
222f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
22300 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
22310 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
22320 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61    set memory una
22330 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20  vailable....
22340 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 22350 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22360 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
22370 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 22380 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 22390 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 223a0 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 223b0 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 t$memory; # NOT
223c0 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79  E: Return memory
223d0 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63   in-use to our c
223e0 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20  aller.....
223f0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 22400 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 22410 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
22420 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79  - maximum memory
22430 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74   in use by SQLit
22440 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d  e... "..      }.
22450 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
22460 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
22470 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
22480 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
22490 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
224a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
224b0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
224c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
224d0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
224e0 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
224f0 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..
22500 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
22510 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
22520 72 20 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d  r 0..        } m
22530 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
22540 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
22550 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 22560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22570 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
22580 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 22590 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 225a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 225b0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 225c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 225d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 225e0 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 ybe the SQLite c 225f0 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 ore library is u 22600 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 navailable?.. 22610 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22620 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 22630 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 22640 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
22650 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
22660 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 22670 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22680 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
22690 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
226a0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
226b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
226c0 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61   memory unavaila
226d0 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ble....        i
226e0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 226f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 22700 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
22710 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 22720 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 22730 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 22740 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 if {$collect}
22750 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
22760 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24  collectGarbage $22770 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d channel.. } 22780 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 .... if {!$
22790 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
227a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 227b0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 annel "---- curr 227c0 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 ent memory in us 227d0 65 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 e by the CLR... 227e0 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 227f0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 22800 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 22810 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 22820 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 22830 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 22840 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 22850 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false 22860 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f .. } memo 22870 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { 22880 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 22890 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 [string is integ 228a0 65 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f er -strict$memo
228b0 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
228c0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 228d0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 228e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 228f0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
22900 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 22910 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 22920 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 22930 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 22940 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d set m 22950 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d emory invalid... 22960 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 22970 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
22980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22990 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 229a0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
229b0 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
229c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
229d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
229e0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
229f0 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
22a00 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
22a10 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 22a20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 22a30 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
22a40 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 22a50 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 22a60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 22a70 0a 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 73 65 74 20 6d 65 6d . set mem 22a90 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d ory unavailable. 22aa0 0a 0d 0a 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 74 70 75 74 73 20            tputs
22ad0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 22ae0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
22af0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
22b00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
22b10 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 22b20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 22b30 20 72 65 73 65 74 53 51 4c 69 74 65 44 69 72 65 resetSQLiteDire 22b40 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 ctories { channe 22b50 6c 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 l native } {.. 22b60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 22b70 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 22b80 75 73 65 20 74 68 65 20 6e 61 74 69 76 65 20 41 use the native A 22b90 50 49 20 28 76 69 61 20 74 68 65 20 6d 61 6e 61 PI (via the mana 22ba0 67 65 64 20 61 73 73 65 6d 62 6c 79 29 3f 0d 0a ged assembly)?.. 22bb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 22bc0 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e f {$native} then
22bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
22be0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
22bf0 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  ow make sure the
22c00 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65   database and te
22c10 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
22c20 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  ies are..
22c30 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74   #       reset t
22c40 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c  heir default val
22c50 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c  ues, which shoul
22c60 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f  d be null for bo
22c70 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  th...        #
22c80 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73       Since the s
22c90 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
22ca0 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
22cb0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
22cc0 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
22cd0 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20     use it...
22ce0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66      #..        f
22cf0 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d  or {set index 1}
22d00 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69   {$index < 3} {i 22d10 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 ncr index} {.. 22d20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 22d30 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 22d40 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 22d50 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 22d60 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 22d70 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 22d80 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 22d90 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 tiveMethods \.. 22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s 22db0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 22dc0 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64 65 _directory$inde
22dd0 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  x null..
22de0 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30    } result] == 0
22df0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
22e00 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 22e10 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 22e20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22e30 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 22e40 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 22e50 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e _directory("$in
22e60 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dex \..
22e70 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e         ", null).
22e80 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74  .. ok: " $result 22e90 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 22ea0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 22eb0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
22ec0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22ed0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22ee0 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
22ef0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
22f00 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e  _directory(" $in 22f10 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 dex \.. 22f20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e ", null). 22f30 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 .. error: " \n\t 22f40 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
22f50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
22f60 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
22f70 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
22f80 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
22f90 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74   Now make sure t
22fa0 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and
22fb0 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
22fc0 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20  ories are..
22fd0 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74     #       reset
22fe0 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
22ff0 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f  alues, which sho
23000 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20  uld be null for
23010 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 23  both...        #
23020 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65         Since the
23030 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
23040 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e  et_directory fun
23050 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a  ction does not..
23060 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
23070 61 70 70 65 61 72 20 74 6f 20 62 65 20 61 76 61  appear to be ava
23080 69 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20  ilable, use the
23090 61 73 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d  associated PRAGM
230a0 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20  A commands..
230b0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74      #       inst
230c0 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ead...        #.
230d0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
230e0 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74   directory [list
230f0 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
23100 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65  ctory temp_store
23110 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20  _directory] {..
23120 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c           set sql
23130 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52   [appendArgs "PR
23140 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72  AGMA " $director 23150 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d y " = \"\";"]... 23160 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 23170 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 catch {executeSq 23180 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 l$sql} result]
23190 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
231a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
231b0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 231c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 231d0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 "---- ex 231e0 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 ecute PRAGMA "$
231f0 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f  directory "... o
23200 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  k: \"" \..
23210 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c            $resul 23220 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 t \"\n].. 23230 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 23240 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
23250 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
23260 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
23270 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65         "---- exe
23280 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64  cute PRAGMA " $d 23290 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 irectory "... er 232a0 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. 232b0 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
232c0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
232d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
232e0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
232f0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
23300 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
23310 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e  rectories { chan
23320 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 65  nel {reset false
23330 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
23340 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
23350 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74  eck if the sqlit
23360 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
23370 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20  ectory function
23380 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  is available...
23390 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70       #..      tp
233a0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a  uts $channel \.. 233b0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 233c0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e checking for fun 233d0 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 ction sqlite3_wi 233e0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 233f0 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 23400 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 23410 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 This call to th 23420 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f e sqlite3_win32_ 23430 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 set_directory fu 23440 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 0d nction uses the. 23450 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 23460 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20 66 nvalid value 0 f 23470 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72 67 or the first arg 23480 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 ument. This cod 23490 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 e is designed.. 234a0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 234b0 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 check if calling 234c0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 the function wi 234d0 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63 65 ll raise an exce 234e0 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 ption (i.e... 234f0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 61 # the a 23500 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 ctual result of 23510 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 the function doe 23520 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 20 s not matter as 23530 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 long as no.. 23540 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 23550 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29 2e ory is changed). 23560 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 23570 20 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d if {[isWindows] 23580 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. 23590 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 235a0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 235b0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 235c0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 235d0 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 235e0 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 tiveMethods \.. 235f0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 sqlit 23600 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 23610 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a 20 ectory 0 null.. 23620 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th 23630 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 23640 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 23650 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c Calling the sql 23660 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 23670 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio 23680 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 n does not.. 23690 20 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73 # caus 236a0 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 e an exception; 236b0 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 therefore, it mu 236c0 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 st be available 236d0 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 (i.e... # 236e0 20 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 even thou 236f0 67 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 gh it should ret 23700 75 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 urn a failure re 23710 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 turn code in thi 23720 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 23730 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 case)... 23740 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 #.. ad 23750 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 dConstraint sqli 23760 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 23770 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 rectory.... 23780 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
23790 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20  l yes\n....
237a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
237b0 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63  NOTE: Does our c
237c0 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65  aller want to re
237d0 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72  set the director
237e0 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d  ies?..        #.
237f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65  .        if {$re 23800 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 set} then {.. 23810 20 20 20 20 20 20 20 72 65 73 65 74 53 51 4c 69 resetSQLi 23820 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 teDirectories$c
23830 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20  hannel true..
23840 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
23850 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
23860 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n 23870 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 o\n.... # 23880 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 23890 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 : Does our calle 238a0 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 r want to reset 238b0 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f the directories? 238c0 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d This can only. 238d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 238e0 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 be performed if 238f0 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 SQLite is loade 23900 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 d and ready for 23910 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d use by the test. 23920 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 23930 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 suite... 23940 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 23950 24 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c$reset && [isSQL
23960 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20  iteReady]} then
23970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73  {..          res
23980 65 74 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  etSQLiteDirector
23990 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 66 61 6c  ies $channel fal 239a0 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 se.. }.. 239b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 239c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 239d0 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 Finally, show t 239e0 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 he current value 239f0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 of the database 23a00 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a and temporary.. 23a10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 23a20 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 rectories. This 23a30 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 can only be per 23a40 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 formed if SQLite 23a50 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 is loaded.. 23a60 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 # and re 23a70 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 ady for use by t 23a80 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a he test suite... 23a90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 23aa0 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 f {[isSQLiteRead 23ab0 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 23ac0 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 foreach dire 23ad0 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 ctory [list data 23ae0 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 _store_directory 23af0 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 temp_store_dire 23b00 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 ctory] {.. 23b10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
23b20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
23b30 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20  ---- checking "
23b40 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20  $directory "... 23b50 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 23b60 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 set sql [appendA 23b70 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 rgs "PRAGMA "$d
23b80 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a  irectory \;]....
23b90 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
23ba0 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c  atch {executeSql
23bb0 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65   $sql scalar} re 23bc0 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 23bd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23be0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
23bf0 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20  appendArgs "ok:
23c00 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e  \"" $result \"\n 23c10 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 23c20 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 23c30 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
23c40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65  l [appendArgs "e
23c50 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 23c60 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 23c70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 23c80 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 23c90 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f ..... proc lo 23ca0 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 adSQLiteTestSett 23cb0 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b ings { channel { 23cc0 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 suffix ""} {quie 23cd0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 23ce0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 23cf0 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e OTE: Skip loadin 23d00 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 g the settings i 23d10 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61 f their usage ha 23d20 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e s been disabled. 23d30 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 23d40 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 23d50 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 ts ::no(sqliteTe 23d60 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 stSettings)]} th 23d70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 23d80 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 23d90 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 Load custom per 23da0 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 -user and/or per 23db0 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 -host test setti 23dc0 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ngs now... 23dd0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 23de0 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 23df0 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 tcl_platform(use 23e00 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 r)]} then {.. 23e10 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53 set userS 23e20 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 23e30 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 [file join [getC 23e40 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 ommonDirectory] 23e50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23e60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 [appendArgs set 23e70 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 tings$suffix .
23e80 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( 23e90 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a user) .eagle]].. 23ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 23eb0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 [file exists$us
23ec0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
23ed0 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
23ee0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 23ef0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 23f00 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 23f10 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
23f20 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
23f30 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
23f40 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73  - loading per-us
23f50 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  er test settings
23f60 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $23f80 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 23f90 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 Name \"...\n].. 23fa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 23fb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 23fc0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 23fd0 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 23fe0 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 1 [list source$
23ff0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
24000 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20  Name]..
24010 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65     } error]} the
24020 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
24030 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 24040 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 24050 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
24060 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
24070 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
24080 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
24090 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
240a0 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72  to load per-user
240b0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
240c0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
240d0 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53            $userS 240e0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 240f0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 24100 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
24130 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
24140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
24150 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 24160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24170 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
24180 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
241a0 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
241b0 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72  loading per-user
241c0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66   test settings f
241d0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73               $us 241f0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 24200 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 me "\", it does 24210 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. 24220 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 24230 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 24240 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 24250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24290 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... 242a0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 242b0 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f sts ::tcl_platfo 242c0 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 rm(host)]} then 242d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 242e0 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c hostSettingsFil 242f0 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e eName [file join 24300 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 [getCommonDirec 24310 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 tory] \.. 24320 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 [appendAr 24330 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 gs settings$suf
24340 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61  fix . $::tcl_pla 24350 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 tform(host) .eag 24360 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 le]].... 24370 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis 24380 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 ts$hostSettings
24390 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  FileName]} then
243a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
243b0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 243c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 243d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
243e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24400 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20    "---- loading
24410 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65  per-host test se
24420 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
24430 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
24440 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e       $hostSettin 24450 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e gsFileName \"... 24460 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 24470 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 24480 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70 up 244a0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f level 1 [list so 244b0 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e urce$hostSettin
244c0 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20  gsFileName]..
244d0 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72           } error
244e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
244f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 24500 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 24520 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
24530 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24550 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
24560 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65  ailed to load pe
24570 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20  r-host settings
24580 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  file \"" \..
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
245a0 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c  $hostSettingsFil 245b0 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 eName "\", error 245c0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
245d0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
245e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
245f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
24600 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
24610 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 24620 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 24630 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
24640 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
24650 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
24660 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
24670 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65  ipped loading pe
24680 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74  r-host test sett
24690 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d  ings file \"" \.
246a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
246b0 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73     $hostSettings 246c0 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 FileName "\", it 246d0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ 246e0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. 246f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 24700 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 24710 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 24720 20 20 20 70 72 6f 63 20 63 6f 70 79 53 61 6d 70 proc copySamp 24730 6c 65 44 61 74 61 62 61 73 65 46 69 6c 65 73 20 leDatabaseFiles 24740 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 {} {.. uple 24750 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 vel 1 {.. 24760 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 24770 54 45 3a 20 43 6f 70 79 20 28 6f 72 20 72 65 2d TE: Copy (or re- 24780 63 6f 70 79 29 20 74 68 65 20 72 65 66 65 72 65 copy) the refere 24790 6e 63 65 20 64 61 74 61 62 61 73 65 20 66 69 6c nce database fil 247a0 65 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 0d e used for this. 247b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 247c0 20 75 6e 69 74 20 74 65 73 74 20 74 6f 20 74 68 unit test to th 247d0 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 247e0 79 20 69 6e 20 63 61 73 65 20 69 74 20 68 61 73 y in case it has 247f0 20 62 65 65 6e 20 63 68 61 6e 67 65 64 0d 0a 20 been changed.. 24800 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 24810 79 20 61 20 70 72 65 76 69 6f 75 73 20 74 65 73 y a previous tes 24820 74 20 72 75 6e 2e 0d 0a 20 20 20 20 20 20 20 20 t run... 24830 23 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 #.. file 24840 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 6e 6f 72 copy -force$nor
24850 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5c  thwindEfDbFile \
24860 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c  ..          [fil
24870 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64  e join [getBuild
24880 44 69 72 65 63 74 6f 72 79 20 66 61 6c 73 65 5d  Directory false]
24890 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72   [file tail $nor 248a0 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d thwindEfDbFile]] 248b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 248c0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 ..... proc ru 248d0 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f nSQLiteTestProlo 248e0 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 gue {} {.. 248f0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 24900 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 Skip running ou 24910 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 r custom prologu 24920 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e e if the main on 24930 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 e has been.. 24940 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 # skippe 24950 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 24960 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 24970 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 ists ::no(prolog 24980 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e ue.eagle)]} then 24990 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 249a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c # NOTE: L 249b0 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 65 2d oad the "before- 249c0 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 constraints" cus 249d0 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 tom per-user and 249e0 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 /or per-host.. 249f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te 24a00 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e st settings now. 24a10 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 24a20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b uplevel 1 [ 24a30 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 list loadSQLiteT 24a40 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 estSettings$::t
24a50 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66  est_channel .bef
24a60 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ore]....
24a70 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
24a80 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
24a90 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64  [object] command
24aa0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 3b 20 69   is available; i
24ab0 66 20 6e 6f 74 2c 20 61 64 64 20 73 6f 6d 65 0d  f not, add some.
24ac0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
24ad0 20 73 68 69 6d 73 20 74 6f 20 6d 61 6b 65 20 74   shims to make t
24ae0 68 65 20 74 65 73 74 20 73 75 69 74 65 20 72 75  he test suite ru
24af0 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a 20 20 20  n smoother...
24b00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24b10 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62  checkForSQLiteOb
24b20 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 24 3a 3a 74  jectCommand $::t 24b30 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 24b40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 24b50 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d # NOTE: Determ 24b60 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 ine the names of 24b70 20 74 68 65 20 6e 61 74 69 76 65 20 70 6c 61 74 the native plat 24b80 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 form and archite 24b90 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 cture... 24ba0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 #.. set p 24bb0 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c latform [getBuil 24bc0 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 5d 0d dPlatform true]. 24bd0 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 72 63 . set arc 24be0 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 68 69 hitecture [archi 24bf0 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 66 6f tectureForPlatfo 24c00 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d rm$platform]...
24c10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
24c20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
24c30 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e   the platform an
24c40 64 20 61 72 63 68 69 74 65 63 74 75 72 65 20 75  d architecture u
24c50 73 65 64 20 74 6f 20 68 65 6c 70 20 6c 6f 63 61  sed to help loca
24c60 74 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  te the..
24c70 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 62  #       native b
24c80 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a 20 20 20  uild files...
24c90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24ca0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 24cb0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 24cc0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 24cd0 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 "---- platform 24ce0 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 for locating nat 24cf0 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 ive build files 24d00 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 is \"" \.. 24d10 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20$platform
24d20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
24d30 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 24d40 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 24d50 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 24d60 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69 74 65 63 "---- architec 24d70 74 75 72 65 20 66 6f 72 20 6c 6f 63 61 74 69 6e ture for locatin 24d80 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 g native build f 24d90 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 iles is \"" \.. 24da0 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
24db0 69 74 65 63 74 75 72 65 20 5c 22 5c 6e 5d 0d 0a  itecture \"\n]..
24dc0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
24dd0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
24de0 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6e  ld a list of con
24df0 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
24e00 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
24e10 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
24e20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 46       set configF
24e30 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c  ileNames [list \
24e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
24e50 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
24e60 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a  .dll.config]....
24e70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24e80 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
24e90 20 61 20 6c 69 73 74 20 6f 66 20 61 75 78 69 6c   a list of auxil
24ea0 69 61 72 79 20 4d 61 6e 61 67 65 64 20 44 65 62  iary Managed Deb
24eb0 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74  ugging Assistant
24ec0 73 20 28 4d 44 41 29 0d 0a 20 20 20 20 20 20 20  s (MDA)..
24ed0 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75   #       configu
24ee0 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61  ration files tha
24ef0 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  t we handle...
24f00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
24f10 20 73 65 74 20 6d 64 61 43 6f 6e 66 69 67 46 69   set mdaConfigFi
24f20 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
24f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 61 67  .            Eag
24f40 6c 65 53 68 65 6c 6c 33 32 2e 65 78 65 2e 6d 64  leShell32.exe.md
24f50 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74 61 6c 6c  a.config Install
24f60 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  er.exe.mda.confi
24f70 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g \..
24f80 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f   test.exe.mda.co
24f90 6e 66 69 67 20 74 65 73 74 6c 69 6e 71 2e 65 78  nfig testlinq.ex
24fa0 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a  e.mda.config \..
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
24fc0 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ef6.exe.mda.conf
24fd0 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ig]....        #
24fe0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
24ff0 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74  : Build the list
25000 20 6f 66 20 65 78 74 65 72 6e 61 6c 20 66 69 6c   of external fil
25010 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
25020 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a 20 20 20  e.  Some of..
25030 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
25040 73 65 20 66 69 6c 65 73 20 6d 61 79 20 62 65 20  se files may be
25050 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 20 6d 61  native and/or ma
25060 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73  naged assemblies
25070 20 74 68 61 74 20 61 72 65 0d 0a 20 20 20 20 20   that are..
25080 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69     #       requi
25090 72 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 76  red to perform v
250a0 61 72 69 6f 75 73 20 74 65 73 74 73 2e 0d 0a 20  arious tests...
250b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
250c0 20 20 73 65 74 20 65 78 74 65 72 6e 61 6c 46 69    set externalFi
250d0 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
250e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
250f0 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74 79 46 72  le join EntityFr
25100 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b 73 74 72  amework lib [str
25110 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 46 78  ing map [list Fx
25120 20 22 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20   ""] \..
25130 20 20 20 20 5b 73 74 72 69 6e 67 20 6d 61 70 20      [string map
25140 5b 6c 69 73 74 20 6e 65 74 46 78 34 35 31 20 6e  [list netFx451 n
25150 65 74 46 78 34 35 20 6e 65 74 46 78 34 35 32 20  etFx45 netFx452
25160 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 20  netFx45 netFx46
25170 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  \..            n
25180 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 31 20  etFx45 netFx461
25190 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 32  netFx45 netFx462
251a0 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 37   netFx45 netFx47
251b0 20 6e 65 74 46 78 34 35 20 5c 0d 0a 20 20 20 20   netFx45 \..
251c0 20 20 20 20 20 20 20 20 6e 65 74 46 78 34 37 31          netFx471
251d0 20 6e 65 74 46 78 34 35 5d 20 5b 67 65 74 42 75   netFx45] [getBu
251e0 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 6e 74 69  ildNetFx]]] Enti
251f0 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d  tyFramework.dll]
25200 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
25210 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
25220 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f  Build the list o
25230 66 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c  f native assembl
25240 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  y files that we
25250 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20  handle...
25260 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
25270 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
25280 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  [list]....
25290 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e    eval lappend n
252a0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b  ativeFileNames [
252b0 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79  getNativeLibrary
252c0 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a  FileNamesOnly]..
252d0 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70          eval lap
252e0 70 65 6e 64 20 6e 61 74 69 76 65 46 69 6c 65 4e  pend nativeFileN
252f0 61 6d 65 73 20 5b 67 65 74 49 6e 74 65 72 6f 70  ames [getInterop
25300 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65  AssemblyFileName
25310 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20  sOnly]....
25320 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
25330 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c  OTE: Build the l
25340 69 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64  ist of mixed-mod
25350 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73  e assembly files
25360 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
25370 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
25380 20 20 20 20 20 73 65 74 20 6d 69 78 65 64 46 69       set mixedFi
25390 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a  leNames [list]..
253a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
253b0 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  asRuntimeOption
253c0 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d  native]} then {.
253d0 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
253e0 6e 64 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65  nd mixedFileName
253f0 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
25400 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Lite.dll..
25410 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
25420 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
25430 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74  : Build the list
25440 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73 65   of managed asse
25450 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20  mbly files that
25460 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
25470 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
25480 65 74 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  et managedFileNa
25490 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
254a0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
254b0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
254c0 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61  .dll System.Data
254d0 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d  .SQLite.EF6.dll]
254e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
254f0 21 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69  ![hasRuntimeOpti
25500 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  on native]} then
25510 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61   {..          la
25520 70 70 65 6e 64 20 6d 61 6e 61 67 65 64 46 69 6c  ppend managedFil
25530 65 4e 61 6d 65 73 20 53 79 73 74 65 6d 2e 44 61  eNames System.Da
25540 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20  ta.SQLite.dll..
25550 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
25560 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
25570 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20   NOTE: Show the
25580 76 61 72 69 6f 75 73 20 6c 69 73 74 73 20 6f 66  various lists of
25590 20 66 69 6c 65 20 6e 61 6d 65 73 20 74 68 61 74   file names that
255a0 20 61 72 65 20 68 61 6e 64 6c 65 64 20 62 79 20   are handled by
255b0 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  this..        #
255c0 20 20 20 20 20 20 70 72 6f 63 65 64 75 72 65 2e        procedure.
255d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
255e0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 255f0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 25600 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 25610 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 "---- list 25620 20 6f 66 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 of \"configurat 25630 69 6f 6e 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 ion\" file names 25640 20 69 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 is: " \.. 25650 20 20 20 20 20 20 24 63 6f 6e 66 69 67 46 69 6c$configFil
25660 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20  eNames \n]....
25670 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 25680 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 25690 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 256a0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 "---- lis 256b0 74 20 6f 66 20 5c 22 4d 44 41 20 63 6f 6e 66 69 t of \"MDA confi 256c0 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 20 guration\" file 256d0 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20 names is: " \.. 256e0 20 20 20 20 20 20 20 20 20 20 20 24 6d 64 61 43$mdaC
256f0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5c  onfigFileNames \
25700 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70  n]....        tp
25710 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 25720 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 25730 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 25740 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 65 ---- list of \"e 25750 78 74 65 72 6e 61 6c 5c 22 20 66 69 6c 65 20 6e xternal\" file n 25760 61 6d 65 73 20 69 73 3a 20 22 20 24 65 78 74 65 ames is: "$exte
25770 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5c 6e  rnalFileNames \n
25780 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  ]....        tpu
25790 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 257a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 257b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 257c0 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6e 61 --- list of \"na 257d0 74 69 76 65 5c 22 20 66 69 6c 65 20 6e 61 6d 65 tive\" file name 257e0 73 20 69 73 3a 20 22 20 24 6e 61 74 69 76 65 46 s is: "$nativeF
257f0 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a  ileNames \n]....
25800 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 25810 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 25820 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 25830 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 25840 69 73 74 20 6f 66 20 5c 22 6d 69 78 65 64 5c 22 ist of \"mixed\" 25850 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 file names is: 25860 22 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 "$mixedFileName
25870 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  s \n]....
25880 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 25890 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 258a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 258b0 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 "---- list of 258c0 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 6c 65 \"managed\" file 258d0 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 6d 61 names is: "$ma
258e0 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5c  nagedFileNames \
258f0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
25900 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
25910 20 52 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74   Remove any test
25920 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61   constraints tha
25930 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e  t refer to the n
25940 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20  ative and/or..
25950 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61        #       ma
25960 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66  naged assembly f
25970 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
25980 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69  dle unless forbi
25990 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20  dden from..
259a0 20 20 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67     #       doing
259b0 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   so...        #.
259c0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
259d0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
259e0 73 71 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73  sqliteRemoveCons
259f0 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20  traints)]} then
25a00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  {..          for
25a10 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63  each fileName $c 25a20 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 25a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 25a40 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 25a50 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 25a60 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
25a70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
25a80 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
25a90 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69  leName $mdaConfi 25aa0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 gFileNames {.. 25ab0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 25ac0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 25ad0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 ndArgs file_$fi
25ae0 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
25af0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
25b00 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
25b10 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65  me $externalFile 25b20 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 25b30 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 25b40 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 25b50 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 s file_ [file ta 25b60 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a il$fileName]]..
25b70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
25b80 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
25b90 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 25ba0 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 25bb0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 25bc0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 25bd0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 ndArgs file_$fi
25be0 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
25bf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
25c00 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
25c10 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  me $mixedFileNam 25c20 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 25c30 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 25c40 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 25c50 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ile_$fileName].
25c60 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
25c70 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
25c80 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61  h fileName $mana 25c90 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a gedFileNames {.. 25ca0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f remo 25cb0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 25cc0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 pendArgs file_$
25cd0 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
25ce0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
25cf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
25d00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
25d10 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e  Skip all System.
25d20 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61  Data.SQLite rela
25d30 74 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e  ted file handlin
25d40 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20  g (deleting,..
25d50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
25d60 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69  pying, and loadi
25d70 6e 67 29 20 69 66 20 69 6e 73 74 72 75 63 74 65  ng) if instructe
25d80 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
25d90 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
25da0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71  o exists ::no(sq
25db0 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  liteFiles)]} the
25dc0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
25dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
25de0 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
25df0 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69  to delete any fi
25e00 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65  les if instructe
25e10 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  d...          #.
25e20 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
25e30 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
25e40 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 46 69  o(deleteSqliteFi
25e50 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
25e60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
25e70 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
25e80 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 43 6f  o(deleteSqliteCo
25e90 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65  nfigFiles)]} the
25ea0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
25eb0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
25ec0 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e  ame $configFileN 25ed0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 25ee0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 25ef0 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c eBinaryFile$fil
25f00 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
25f10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
25f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
25f30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
25f40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
25f50 74 65 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c  teSqliteExternal
25f60 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
25f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66  .              f
25f80 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
25f90 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61  $mdaConfigFileNa 25fa0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 25fb0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 25fc0 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e BuildFile$fileN
25fd0 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  ame false..
25fe0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
26000 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78  ach fileName $ex 26010 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 ternalFileNames 26020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 26030 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 tryDeleteBina 26040 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ryFile$fileName
26050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
26060 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
26070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
26080 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
26090 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
260a0 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d  iteNativeFiles)]
260b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
260c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
260d0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
260e0 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c 69  eleteSqliteImpli
260f0 63 69 74 4e 61 74 69 76 65 46 69 6c 65 73 29 5d  citNativeFiles)]
26100 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
26110 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
26120 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69  h fileName $nati 26130 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 veFileNames {.. 26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26150 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 tryDeleteAssemb 26160 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 ly$fileName..
26170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
26180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
26190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
261a0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
261b0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
261c0 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74  qliteNonImplicit
261d0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
261e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
261f0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
26200 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
26210 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65  litePlatformFile
26220 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
26240 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 26250 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 26260 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 26270 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 26280 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
26290 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
262b0 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
262c0 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  y $fileName$pla
262d0 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
262e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
262f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26310 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
26320 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
26330 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65  liteArchitecture
26340 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Files)] && \..
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26360 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
26370 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20   $architecture] 26380 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 263a0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 263b0 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
263c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
263d0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
263e0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 263f0 61 6d 65 20 24 61 72 63 68 69 74 65 63 74 75 72 ame$architectur
26400 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
26410 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
26420 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
26430 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
26440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
26450 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
26460 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
26470 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 69 78 65  deleteSqliteMixe
26480 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  dFiles)]} then {
26490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
264a0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
264b0 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
264c0 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65  "native" runtime
264d0 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20   option is set,
264e0 64 65 6c 65 74 65 20 69 6d 70 6c 69 63 69 74 0d  delete implicit.
264f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
26500 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64         mixed-mod
26510 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73  e assembly files
26520 20 61 73 20 77 65 6c 6c 2e 20 20 54 68 69 73 20   as well.  This
26530 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 0d 0a  runtime option..
26540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
26550 20 20 20 20 20 20 63 68 65 63 6b 20 69 73 20 68        check is h
26560 61 6e 64 6c 65 64 20 77 68 65 6e 20 62 75 69 6c  andled when buil
26570 64 69 6e 67 20 74 68 65 20 6c 69 73 74 20 6f 66  ding the list of
26580 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a 20 20 20   mixed-mode..
26590 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
265a0 20 20 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65     assembly file
265b0 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20 20 20 20   names...
265c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
265d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
265e0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
265f0 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c 69  eleteSqliteImpli
26600 63 69 74 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d  citMixedFiles)]}
26610 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
26620 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
26630 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64   fileName $mixed 26640 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 26660 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 26670 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
26680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
266a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
266b0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
266c0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
266d0 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
266e0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26700 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
26710 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
26720 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29  tePlatformFiles)
26730 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
26740 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
26750 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 26760 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 26770 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 26780 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 26790 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 eName$mixedFile
267a0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
267c0 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24  DeleteAssembly $267d0 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
267e0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..
267f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
26800 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26820 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
26830 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
26840 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c  eArchitectureFil
26850 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
26870 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61  string length $a 26880 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 rchitecture] > 0 26890 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 268a0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 268b0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 ach fileName$mi
268c0 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  xedFileNames {..
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
268e0 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73      tryDeleteAss
268f0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20  embly $fileName 26900 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20$architecture..
26910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26920 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
26930 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
26940 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
26950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
26960 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
26970 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
26980 74 65 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46  teSqliteManagedF
26990 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
269b0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $269c0 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 269d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 269e0 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 269f0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d embly$fileName.
26a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
26a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26a20 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
26a30 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
26a40 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
26a50 68 65 63 6b 20 66 6f 72 20 74 68 65 20 22 61 75  heck for the "au
26a60 74 6f 53 65 6c 65 63 74 22 20 72 75 6e 74 69 6d  toSelect" runtim
26a70 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 72  e option.  If pr
26a80 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  esent,..
26a90 20 20 23 20 20 20 20 20 20 20 61 74 74 65 6d 70    #       attemp
26aa0 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c  t to automatical
26ab0 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69  ly select the fi
26ac0 72 73 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20  rst available..
26ad0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
26ae0 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65   build (or "rele
26af0 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20  ase") of SQLite
26b00 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  and System.Data.
26b10 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20  SQLite..
26b20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 73    #       for us
26b30 65 20 77 69 74 68 20 74 68 65 20 74 65 73 74 20  e with the test
26b40 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
26b50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
26b60 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  f {[hasRuntimeOp
26b70 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d  tion autoSelect]
26b80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
26b90 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68 65 63        if {![chec
26ba0 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73  kForSQLiteBuilds
26bb0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 26bc0 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a true]} then {.. 26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 ch 26be0 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 eckForSQLiteRele 26bf0 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ases$::test_cha
26c00 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20  nnel true..
26c10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
26c20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
26c30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
26c40 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
26c50 69 6e 67 20 74 6f 20 76 65 72 69 66 79 20 74 68  ing to verify th
26c60 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
26c70 79 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 3b  y if instructed;
26c80 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
26c90 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6d      otherwise, m
26ca0 61 6b 65 20 73 75 72 65 20 69 74 20 61 63 74 75  ake sure it actu
26cb0 61 6c 6c 79 20 65 78 69 73 74 73 20 6f 72 20 68  ally exists or h
26cc0 61 6c 74 20 74 68 65 20 65 6e 74 69 72 65 0d 0a  alt the entire..
26cd0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
26ce0 20 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73    testing proces
26cf0 73 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  s if it does not
26d00 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20   exist...
26d10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
26d20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
26d30 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69  s ::no(verifyBui
26d40 6c 64 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74  ldDirectory)]} t
26d50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
26d60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
26d70 20 20 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69    # NOTE: At thi
26d80 73 20 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69  s point, the bui
26d90 6c 64 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53  ld directory MUS
26da0 54 20 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20  T exist as a..
26db0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
26dc0 20 20 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72    valid director
26dd0 79 20 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e  y for the testin
26de0 67 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e  g process to con
26df0 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  tinue...
26e00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
26e10 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
26e20 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74   [getBuildDirect
26e30 6f 72 79 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20  ory false]....
26e40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
26e50 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72  file exists $dir 26e60 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 ectory] || \.. 26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b ![ 26e80 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory 26e90 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68$directory]} th
26ea0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
26eb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
26ec0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73       # NOTE: Jus
26ed0 74 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75 61  t prior to actua
26ee0 6c 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65 20  lly halting the
26ef0 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2c  testing process,
26f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
26f10 23 20 20 20 20 20 20 20 61 64 64 20 61 6e 20 65  #       add an e
26f20 72 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73 74  rror to the test
26f30 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20   log file...
26f40 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
26f50 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
26f60 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 26f70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26f90 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f "---- could no 26fa0 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 t verify build d 26fb0 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 irectory \""$di
26fc0 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
26fe0 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61  , all testing ha
26ff0 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20  lted\n"]....
27000 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
27010 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
27020 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72  E: Raising a scr
27030 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74  ipt error from t
27040 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64  his point should
27050 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20   halt..
27060 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
27070 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
27080 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
27090 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
270a0 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41    error [appendA
270b0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
270c0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could
270d0 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64  not verify build
270e0 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24   directory \"" $270f0 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 directory \.. 27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 27110 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 \", all testing 27120 68 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 halted"].. 27130 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 27140 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 27150 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 27160 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 NOTE: Skip tryi 27170 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 ng to copy any f 27180 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 iles if instruct 27190 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 271a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 271b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 271c0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 69 6c no(copySqliteFil 271d0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 271e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 271f0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 27200 28 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66 69 (copySqliteConfi 27210 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b gFiles)]} then { 27220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27230 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
27240 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
27250 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
27260 20 63 6f 70 79 69 6e 67 20 5c 22 63 6f 6e 66 69   copying \"confi
27270 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 73  guration\" files
27280 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20  ...\n"....
27290 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
272a0 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67  fileName $config 272b0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 272c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 272d0 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66 CopyBuildFile$f
272e0 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20  ileName false..
272f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27310 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
27320 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
27330 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 78  :no(copySqliteEx
27340 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74  ternalFiles)]} t
27350 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
27360 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27370 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f        # NOTE: Co
27380 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 44  py the Managed D
27390 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61  ebugging Assista
273a0 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 67  nts (MDA) config
273b0 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  uration..
273c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
273d0 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c  ile for the Eagl
273e0 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62  e shell to the b
273f0 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65  uild output dire
27400 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..
27410 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68        #       wh
27420 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 6f  ile using each o
27430 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74  f the names of t
27440 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 63  he various legac
27450 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  y test..
27460 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78        #       ex
27470 65 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 73  ecutables.  This
27480 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61   will help to ma
27490 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c  ke sure that all
274a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..
274b0 20 20 20 20 23 20 20 20 20 20 20 20 6c 65 67 61      #       lega
274c0 63 79 20 74 65 73 74 73 20 72 75 6e 20 77 69 74  cy tests run wit
274d0 68 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  h exactly the sa
274e0 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 65  me set of Manage
274f0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..
27500 20 23 20 20 20 20 20 20 20 44 65 62 75 67 67 69   #       Debuggi
27510 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 63 6f  ng Assistants co
27520 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 20  nfigured...
27530 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
27540 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
27550 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 27560 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27570 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 "---- copyi 27580 6e 67 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67 75 ng \"MDA configu 27590 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 73 2e 2e ration\" files.. 275a0 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n".... 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 64 61 43 6f 6e 66 69 leName$mdaConfi
275d0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
275f0 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20  yCopyBinaryFile
27600 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d  EagleShell.exe.m
27610 64 61 2e 63 6f 6e 66 69 67 20 74 72 75 65 20 22  da.config true "
27620 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  " $fileName.. 27630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 27640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 27650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 27660 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 NOTE: Copy the 27670 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 external binarie 27680 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 s, if any, to th 27690 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 e directory that 276a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 276b0 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 # contains 276c0 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c the Eagle shell 276d0 2e 20 20 54 68 69 73 20 69 73 20 74 79 70 69 63 . This is typic 276e0 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d 61 6b ally used to mak 276f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 27700 20 23 20 20 20 20 20 20 20 73 75 72 65 20 61 73 # sure as 27710 73 65 6d 62 6c 69 65 73 20 72 65 66 65 72 65 6e semblies referen 27720 63 65 64 20 62 79 20 74 68 65 20 6f 6e 65 73 20 ced by the ones 27730 62 65 69 6e 67 20 74 65 73 74 65 64 20 61 72 65 being tested are 27740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27750 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c # availabl 27760 65 20 64 75 72 69 6e 67 20 74 68 65 20 74 65 73 e during the tes 27770 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 ting process... 27780 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 27790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 277a0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
277b0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e  nel "---- copyin
277c0 67 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 66  g \"external\" f
277d0 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
277e0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
277f0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78  ach fileName $ex 27800 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 ternalFileNames 27810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 27820 20 20 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e tryCopyExtern 27830 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 alFile$fileName
27840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
27850 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
27870 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
27880 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
27890 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20  eNativeFiles)]}
278a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
278b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
278c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
278d0 66 20 74 68 65 20 74 65 73 74 20 70 6c 61 74 66  f the test platf
278e0 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79 20 74 68  orm is likely th
278f0 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68  e default for th
27900 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..
27910 20 20 23 20 20 20 20 20 20 20 6d 61 63 68 69 6e    #       machin
27920 65 2c 20 61 6c 73 6f 20 74 72 79 20 74 6f 20 63  e, also try to c
27930 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 66  opy the native f
27940 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20  iles to the..
27950 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
27960 20 20 20 62 69 6e 61 72 79 20 6c 6f 63 61 74 69     binary locati
27970 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on...
27980 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
27990 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
279a0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
279b0 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74  qliteImplicitNat
279c0 69 76 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  iveFiles)] && \.
279d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
279e0 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42 75 69     [isDefaultBui
279f0 6c 64 50 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65  ldPlatform]} the
27a00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
27a10 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 27a20 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 27a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27a40 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 "---- copying 27a50 69 6d 70 6c 69 63 69 74 20 5c 22 6e 61 74 69 76 implicit \"nativ 27a60 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d e\" files...\n". 27a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 27a80 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 27a90 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e ame$nativeFileN
27aa0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
27ab0 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70            tryCop
27ac0 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  yAssembly $fileN 27ad0 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 ame false.. 27ae0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 27af0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 27b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 27b10 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 27b20 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 27b30 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 NonImplicitFiles 27b40 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 27b50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 27b60 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 27b70 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 no(copySqlitePla 27b80 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 tformFiles)] && 27b90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27ba0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 27bb0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
27bc0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
27bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27be0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 27bf0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 27c00 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 27c10 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 27c20 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76 copying \"nativ 27c30 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 70 6c e\" files for pl 27c40 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20 20 atform \"" \.. 27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27c60 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22$platform \"
27c70 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  ...\n]....
27c80 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
27c90 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 27ca0 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 27cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 27cc0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 tryCopyAsse 27cd0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 mbly$fileName f
27ce0 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  alse $platform.. 27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27d00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 27d10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 27d20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 27d30 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 27d40 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69 (copySqliteArchi 27d50 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 27d60 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 27d70 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 27d80 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
27d90 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
27da0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
27db0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 27dc0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 27dd0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27df0 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c "---- copying \ 27e00 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 73 20 "native\" files 27e10 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 for architecture 27e20 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61$a
27e40 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e 2e  rchitecture \"..
27e50 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .\n]....
27e60 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
27e70 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69  h fileName $nati 27e80 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 veFileNames {.. 27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27ea0 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 27eb0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c ly$fileName fal
27ec0 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65  se $architecture 27ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27ee0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 27ef0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 27f00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 27f10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 27f20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 27f30 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 27f40 6f 70 79 53 71 6c 69 74 65 4d 69 78 65 64 46 69 opySqliteMixedFi 27f50 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 27f60 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 27f80 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 NOTE: If the "na 27f90 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 tive" runtime op 27fa0 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 63 6f 70 tion is set, cop 27fb0 79 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 y implicit.. 27fc0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 27fd0 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 mixed-mode ass 27fe0 65 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 embly files as w 27ff0 65 6c 6c 2e 20 20 54 68 65 20 72 75 6e 74 69 6d ell. The runtim 28000 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 e option.. 28010 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 28020 63 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 check is handled 28030 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 when building t 28040 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 he list of mixed 28050 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 -mode.. 28060 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 28070 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 embly file names 28080 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 28090 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 280a0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 280b0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 280c0 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 iteImplicitMixed 280d0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 280e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 280f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
28100 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
28110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
28120 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c  --- copying impl
28130 69 63 69 74 20 5c 22 6d 69 78 65 64 5c 22 20 66  icit \"mixed\" f
28140 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
28160 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $28170 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b mixedFileNames { 28180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 28190 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 281a0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 bly$fileName fa
281b0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..
281c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
281d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
281e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
281f0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
28200 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70  copySqliteNonImp
28210 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68  licitFiles)]} th
28220 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
28230 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
28240 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
28250 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  ySqlitePlatformF
28260 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
28270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28280 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
28290 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 282a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 282b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 282c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
282d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
282f0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69       "---- copyi
28300 6e 67 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c  ng \"mixed\" fil
28310 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20  es for platform
28320 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c               $pl 28340 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d atform \"...\n]. 28350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 28360 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 28370 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 eName$mixedFile
28380 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
283a0 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 283b0 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70 6c leName false$pl
283c0 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
283d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
283e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
283f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
28400 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
28410 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
28420 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
28430 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28450 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
28460 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e  $architecture] > 28470 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 28480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 28490 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
284a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
284b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
284c0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
284d0 6f 70 79 69 6e 67 20 5c 22 6d 69 78 65 64 5c 22  opying \"mixed\"
284e0 20 66 69 6c 65 73 20 66 6f 72 20 61 72 63 68 69   files for archi
284f0 74 65 63 74 75 72 65 20 5c 22 22 20 5c 0d 0a 20  tecture \"" \..
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28510 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 28520 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 re \"...\n].... 28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28540 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 28550 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 e$mixedFileName
28560 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
28570 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
28580 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 28590 6d 65 20 66 61 6c 73 65 20 24 61 72 63 68 69 74 me false$archit
285a0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
285b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
285e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
285f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28600 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
28610 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d  ::no(copySqliteM
28620 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74  anagedFiles)]} t
28630 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
28640 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 28650 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d st_channel "---- 28660 20 63 6f 70 79 69 6e 67 20 5c 22 6d 61 6e 61 67 copying \"manag 28670 65 64 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 ed\" files...\n" 28680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 28690 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 286a0 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e me$managedFileN
286b0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
286c0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41          tryCopyA
286d0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 286e0 65 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 e true.. 286f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 28700 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 28710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 28720 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 28730 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 28740 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 g to load any fi 28750 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 les if instructe 28760 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 28770 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 28780 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 28790 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 o(loadSqliteFile 287a0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 287b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 287c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 287d0 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 loadSqliteImplic 287e0 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 itFiles)]} then 287f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 28800 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 tryLoadAssembly 28810 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 28820 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 ite.dll.. 28830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 28840 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 28850 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 28860 64 53 71 6c 69 74 65 4c 69 6e 71 46 69 6c 65 73 dSqliteLinqFiles 28870 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 28880 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 28890 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 288a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin 288b0 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 q.dll.. 288c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 288d0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 288e0 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 288f0 71 6c 69 74 65 45 66 36 46 69 6c 65 73 29 5d 7d qliteEf6Files)]} 28900 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 28910 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 tryLoadAs 28920 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 sembly System.Da 28930 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c ta.SQLite.EF6.dl 28940 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 28950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 28960 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 28970 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 s ::no(loadSqlit 28980 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 eNonImplicitFile 28990 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 289a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 289b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 289c0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 6c 61 74 o(loadSqlitePlat 289d0 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c formFiles)] && \ 289e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 289f0 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 28a00 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
28a10 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
28a20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f             tryLo
28a30 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65  adAssembly Syste
28a40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
28a50 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  l $platform.. 28a60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 28a80 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 28a90 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 41 ::no(loadSqliteA 28aa0 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 rchitectureFiles 28ab0 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 28ac0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 28ad0 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 ng length$archi
28ae0 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68  tecture] > 0} th
28af0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
28b00 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
28b10 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
28b20 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72  a.SQLite.dll $ar 28b30 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 chitecture.. 28b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 28b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 28b60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 28b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f }.... fo 28b80 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 28b90 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 ly$nativeFileNa
28ba0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
28bb0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
28bc0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 28bd0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 28be0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 28bf0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 28c00 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 28c10 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e \""$fileNameOn
28c20 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d  ly "\"... \"" \.
28c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
28c40 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b   [file version [
28c50 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
28c60 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  e $fileNameOnly] 28c70 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ] \"\n].. 28c80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 28c90 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 ... forea 28ca0 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 ch fileNameOnly 28cb0 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20$mixedFileNames
28cc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74  {..          cat
28cd0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
28ce0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 28cf0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 28d00 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 28d10 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 28d20 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 28d30 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22$fileNameOnly "
28d40 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20  \"... \"" \..
28d50 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
28d60 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42  le version [getB
28d70 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 28d80 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 ileNameOnly]] \" 28d90 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 28da0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 28db0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 28dc0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 61 6e ileNameOnly$man
28dd0 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  agedFileNames {.
28de0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
28df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
28e00 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 28e10 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 28e20 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 28e30 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 28e40 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
28e50 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22  fileNameOnly "\"
28e60 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ... \"" \..
28e70 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
28e80 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e   version [getBin
28e90 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  aryFileName $fil 28ea0 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e eNameOnly]] \"\n 28eb0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 28ec0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 28ed0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 28ee0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
28ef0 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  m] > 0} then {..
28f00 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
28f10 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24  h fileNameOnly $28f20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 28f30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 {.. c 28f40 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 28f50 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
28f60 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
28f70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
28f90 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
28fa0 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d  of \"" $platform 28fb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28fc0 20 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d /$fileNam
28fd0 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22  eOnly "\"... \""
28fe0 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c   [file version \
28ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29000 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69      [getBinaryFi
29010 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 29020 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d Only$platform]]
29030 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20   \"\n]..
29040 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
29050 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
29060 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
29070 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 4e  Only $mixedFileN 29080 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 29090 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 290a0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 290b0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
290c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
290d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
290e0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
290f0 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61  sion of \"" $pla 29100 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 tform \.. 29110 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 /$fi
29120 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e  leNameOnly "\"..
29130 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73  . \"" [file vers
29140 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
29150 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e           [getBin
29160 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  aryFileName $fil 29170 65 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74 66 eNameOnly$platf
29180 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20  orm]] \"\n]..
29190 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
291a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
291b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
291c0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
291d0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20   $architecture] 291e0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 291f0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 29200 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 ileNameOnly$nat
29210 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
29220 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
29230 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
29240 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 29250 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 29260 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 29270 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 29280 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 29290 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72 \""$architectur
292a0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
292b0 20 20 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61         / $fileNa 292c0 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 meOnly "\"... \" 292d0 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 " [file version 292e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 292f0 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 [getBinaryF 29300 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
29310 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 65 63 74  eOnly $architect 29320 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 ure]] \"\n].. 29330 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 29340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 29350 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 29360 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 eNameOnly$mixed
29370 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
29380 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
29390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
293a0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 293b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 293c0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 293d0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 293e0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 293f0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c$architecture \
29400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29410 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f      / $fileNameO 29420 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b nly "\"... \"" [ 29430 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 29440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29450 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 [getBinaryFile 29460 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e Name$fileNameOn
29470 6c 79 20 24 61 72 63 68 69 74 65 63 74 75 72 65  ly $architecture 29480 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 ]] \"\n].. 29490 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 294a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 294b0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 294c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 # NOTE: Gr 294d0 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d ab the list of m 294e0 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 294f0 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e s for the curren 29500 74 20 70 72 6f 63 65 73 73 0d 0a 20 20 20 20 20 t process.. 29510 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 # and r 29520 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 eport on the Sys 29530 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 29540 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 related ones... 29550 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 29560 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 29570 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 29580 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 29590 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 set assemblie 295a0 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 s [object invoke 295b0 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 AppDomain.Curre 295c0 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 ntDomain GetAsse 295d0 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 mblies].... 295e0 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 295f0 61 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61 73 ach assembly$as
29600 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20  semblies {..
29610 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
29620 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 74  ing match \{Syst
29630 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a 20  em.Data.SQLite*
29640 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e  $assembly]} then 29650 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 29660 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
29670 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
29680 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
29690 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
296a0 6f 75 6e 64 20 6c 6f 61 64 65 64 20 61 73 73 65  ound loaded asse
296b0 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c  mbly: " $assembl 296c0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 296d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 296e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 296f0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 29700 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 29710 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
29720 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29730 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63    "---- define c
29740 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 53  onstants for \"S
29750 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
29760 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  e\"... "....
29770 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
29780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
29790 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
297a0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
297b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
297c0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
297d0 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65  QLite.SQLite3 De
297e0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  fineConstants..
297f0 20 20 20 20 20 20 20 20 20 7d 20 64 65 66 69 6e           } defin
29800 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30  eConstants] == 0
29810 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
29820 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 29830 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 29840 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c endArgs [formatL 29850 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 ist [lsort \.. 29860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64$d
29870 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20  efineConstants]
29880 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20  <none>] \n]..
29890 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
298a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
298b0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 298c0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 el unknown\n.. 298d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 298e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 298f0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 29900 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
29910 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
29920 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
29930 73 6f 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6f  source version o
29940 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  f \"System.Data.
29950 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20  SQLite.dll\"...
29960 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
29970 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
29980 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
29990 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
299a0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
299b0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
299c0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
299d0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection
299e0 50 72 6f 76 69 64 65 72 56 65 72 73 69 6f 6e 0d  ProviderVersion.
299f0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 76 65 72  .          } ver
29a00 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
29a10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
29a20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
29a30 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20  th $version] == 29a40 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 29a50 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 set ver 29a60 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 sion null.. 29a70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 29a80 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
29a90 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
29aa0 65 6e 64 41 72 67 73 20 24 76 65 72 73 69 6f 6e  endArgs $version 29ab0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 29ac0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 29ad0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
29ae0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e  est_channel unkn
29af0 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20  own\n..
29b00 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
29b10 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
29b20 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
29b30 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 29b40 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 29b50 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 "---- source 29b60 63 68 65 63 6b 6f 75 74 20 6f 66 20 5c 22 53 79 checkout of \"Sy 29b70 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 29b80 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 .dll\"... ".... 29b90 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 29ba0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 29bb0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 29bc0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 29bd0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 29be0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 29bf0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 a.SQLite.SQLiteC 29c00 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 onnection Provid 29c10 65 72 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 erSourceId.. 29c20 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 } sourceId 29c30 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 29c40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 29c50 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
29c60 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
29c70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
29c80 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
29c90 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  Id null..
29ca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
29cb0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 29cc0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 29cd0 64 41 72 67 73 20 24 73 6f 75 72 63 65 49 64 20 dArgs$sourceId
29ce0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
29cf0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
29d00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 29d10 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 29d20 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 29d30 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 29d40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 29d50 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 73 65 74 # NOTE: Reset 29d60 20 63 61 63 68 65 64 20 22 62 72 65 61 6b 20 69 cached "break i 29d70 6e 74 6f 20 64 65 62 75 67 67 65 72 22 20 73 65 nto debugger" se 29d80 74 74 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74 tting so that it 29d90 20 63 61 6e 20 62 65 0d 0a 20 20 20 20 20 20 20 can be.. 29da0 20 23 20 20 20 20 20 20 20 75 73 65 64 20 64 75 # used du 29db0 72 69 6e 67 20 74 68 65 20 74 65 73 74 20 66 69 ring the test fi 29dc0 6c 65 2c 20 69 66 20 6e 65 65 64 65 64 2e 0d 0a le, if needed... 29dd0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 29de0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 29df0 69 73 74 73 20 3a 3a 6e 6f 28 72 65 73 65 74 42 ists ::no(resetB 29e00 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 reakIntoDebugger 29e10 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 29e20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 [haveSQLite 29e30 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 ObjectCommand]} 29e40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 29e50 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 29e60 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 29e70 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 29e80 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 29e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 29ea0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 29eb0 65 2e 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 20 e.HelperMethods 29ec0 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f 44 65 ResetBreakIntoDe 29ed0 62 75 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20 bugger.. 29ee0 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 } result] == 0 29ef0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 29f00 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
29f10 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
29f20 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
29f30 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
29f40 20 63 61 6c 6c 20 52 65 73 65 74 42 72 65 61 6b   call ResetBreak
29f50 49 6e 74 6f 44 65 62 75 67 67 65 72 28 29 2e 2e  IntoDebugger()..
29f60 2e 20 6f 6b 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  . ok\n"]..
29f70 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
29f80 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
29f90 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 29fa0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 29fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 29fc0 2d 2d 2d 2d 20 63 61 6c 6c 20 52 65 73 65 74 42 ---- call ResetB 29fd0 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 reakIntoDebugger 29fe0 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c ()... error: " \ 29ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a000 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
2a010 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
2a020 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2a030 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2a040 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
2a050 68 65 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69  he available bui
2a060 6c 64 73 20 28 61 6e 64 20 22 72 65 6c 65 61 73  lds (and "releas
2a070 65 73 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61  es") of SQLite a
2a080 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  nd..        #
2a090 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
2a0a0 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 20 20 20  SQLite...
2a0b0 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
2a0c0 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73  kForSQLiteBuilds
2a0d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2a0e0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 2a0f0 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 orSQLiteReleases 2a100 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2a110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
2a120 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
2a130 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 6b  ow, we need to k
2a140 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c 69 74  now if the SQLit
2a150 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
2a160 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20  s available..
2a170 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69 2e       #       (i.
2a180 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20 6d  e. because the m
2a190 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74  anaged-only Syst
2a1a0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61  em.Data.SQLite a
2a1b0 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20  ssembly can..
2a1c0 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 61       #       loa
2a1d0 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 68 6f  d without it; ho
2a1e0 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74  wever, it cannot
2a1f0 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65   do anything use
2a200 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20 20  ful without..
2a210 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 29       #       it)
2a220 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 73 69  .  If we are usi
2a230 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64  ng the mixed-mod
2a240 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 20 77  e assembly and w
2a250 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20 20  e already..
2a260 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 6e 64     #       found
2a270 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 68 69   it (above), thi
2a280 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20  s should always
2a290 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 20 20  succeed...
2a2a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
2a2b0 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61  ckForSQLiteLibra
2a2c0 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ry $::test_chann 2a2d0 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d el.... #. 2a2e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2a2f0 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53 51 Check if the SQ 2a300 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass 2a310 65 6d 62 6c 79 20 69 73 20 61 76 61 69 6c 61 62 embly is availab 2a320 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 2a330 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2a340 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 24 3a SQLiteInterop$:
2a350 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
2a360 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2a370 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
2a380 6b 20 74 68 65 20 53 51 4c 69 74 65 20 64 61 74  k the SQLite dat
2a390 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
2a3a0 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 2e  ary directories.
2a3b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2a3c0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
2a3d0 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24  iteDirectories $2a3e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 2a3f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2a400 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 2a410 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e empt to determin 2a420 65 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d e if various com 2a430 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e pile-time option 2a440 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 s needed for.. 2a450 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te 2a460 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 st constraints w 2a470 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 ere enabled for 2a480 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 the managed asse 2a490 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 mbly. There.. 2a4a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 # ar 2a4b0 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 e some compile-t 2a4c0 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 ime options that 2a4d0 20 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 65 20 must also have 2a4e0 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 been enabled.. 2a4f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f # fo 2a500 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 r the interop as 2a510 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 sembly in order 2a520 74 6f 20 62 65 20 65 66 66 65 63 74 69 76 65 2e to be effective. 2a530 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 For those.. 2a540 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 # opt 2a550 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 ions, it will be 2a560 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 69 74 assumed that it 2a570 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 was enabled for 2a580 20 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 the interop.. 2a590 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 # as 2a5a0 73 65 6d 62 6c 79 20 69 66 20 69 74 20 77 61 73 sembly if it was 2a5b0 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 enabled for the 2a5c0 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 2a5d0 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. 2a5e0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 foreach d 2a5f0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c efineConstant [l 2a600 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 2a610 20 20 20 43 48 45 43 4b 5f 53 54 41 54 45 20 43 CHECK_STATE C 2a620 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 OUNT_HANDLE DEBU 2a630 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 G INTEROP_CODEC 2a640 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d INTEROP_DEBUG \. 2a650 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 . INT 2a660 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 EROP_EXTENSION_F 2a670 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 UNCTIONS INTEROP 2a680 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20 _FTS5_EXTENSION 2a690 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 \.. I 2a6a0 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 NTEROP_INCLUDE_C 2a6b0 45 52 4f 44 20 49 4e 54 45 52 4f 50 5f 49 4e 43 EROD INTEROP_INC 2a6c0 4c 55 44 45 5f 45 58 54 52 41 20 49 4e 54 45 52 LUDE_EXTRA INTER 2a6d0 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 20 5c OP_INCLUDE_SEE \ 2a6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e .. IN 2a6f0 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 TEROP_INCLUDE_ZI 2a700 50 56 46 53 20 49 4e 54 45 52 4f 50 5f 4a 53 4f PVFS INTEROP_JSO 2a710 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a N1_EXTENSION \.. 2a720 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 INTE 2a730 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 ROP_LEGACY_CLOSE 2a740 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 INTEROP_LOG INT 2a750 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f EROP_PERCENTILE_ 2a760 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 EXTENSION \.. 2a770 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP 2a780 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f _REGEXP_EXTENSIO 2a790 4e 20 49 4e 54 45 52 4f 50 5f 53 45 53 53 49 4f N INTEROP_SESSIO 2a7a0 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 N_EXTENSION \.. 2a7b0 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 2a7c0 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e 53 49 4f OP_SHA1_EXTENSIO 2a7d0 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 N INTEROP_TEST_E 2a7e0 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 XTENSION \.. 2a7f0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ 2a800 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e TOTYPE_EXTENSION 2a810 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c INTEROP_VIRTUAL 2a820 5f 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 _TABLE \.. 2a830 20 20 20 20 20 20 4e 45 54 5f 32 30 20 4e 45 54 NET_20 NET 2a840 5f 33 35 20 4e 45 54 5f 34 30 20 4e 45 54 5f 34 _35 NET_40 NET_4 2a850 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 5f 34 35 5 NET_451 NET_45 2a860 32 20 4e 45 54 5f 34 36 20 4e 45 54 5f 34 36 31 2 NET_46 NET_461 2a870 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a880 4e 45 54 5f 34 36 32 20 4e 45 54 5f 34 37 20 4e NET_462 NET_47 N 2a890 45 54 5f 34 37 31 20 4e 45 54 5f 43 4f 4d 50 41 ET_471 NET_COMPA 2a8a0 43 54 5f 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 CT_20 PLATFORM_C 2a8b0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 OMPACTFRAMEWORK 2a8c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 \.. P 2a8d0 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 RELOAD_NATIVE_LI 2a8e0 42 52 41 52 59 20 52 45 54 41 52 47 45 54 41 42 BRARY RETARGETAB 2a8f0 4c 45 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 LE SQLITE_STANDA 2a900 52 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 RD \.. 2a910 20 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f THROW_ON_DISPO 2a920 53 45 44 20 54 52 41 43 45 20 54 52 41 43 45 5f SED TRACE TRACE_ 2a930 43 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 CONNECTION TRACE 2a940 5f 44 45 54 45 43 54 49 4f 4e 20 5c 0d 0a 20 20 _DETECTION \.. 2a950 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f TRACE_ 2a960 48 41 4e 44 4c 45 20 54 52 41 43 45 5f 50 52 45 HANDLE TRACE_PRE 2a970 4c 4f 41 44 20 54 52 41 43 45 5f 53 48 41 52 45 LOAD TRACE_SHARE 2a980 44 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e D TRACE_STATEMEN 2a990 54 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 T \.. 2a9a0 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 TRACE_WARNING T 2a9b0 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 RACK_MEMORY_BYTE 2a9c0 53 20 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 S USE_ENTITY_FRA 2a9d0 4d 45 57 4f 52 4b 5f 36 20 5c 0d 0a 20 20 20 20 MEWORK_6 \.. 2a9e0 20 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 USE_INTE 2a9f0 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 ROP_DLL USE_PREP 2aa00 41 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 ARE_V2 WINDOWS] 2aa10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 2aa20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 2aa30 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 : Check if the c 2aa40 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 ompile-time opti 2aa50 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 on is listed in 2aa60 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 the list of.. 2aa70 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 # " 2aa80 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 define constants 2aa90 22 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 " kept track of 2aaa0 62 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 by the managed a 2aab0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 ssembly... 2aac0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2aad0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 2aae0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a efineConstant$:
2aaf0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64  :test_channel $d 2ab00 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 efineConstant.. 2ab10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2ab20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2ab30 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 2ab40 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 o determine if v 2ab50 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 arious compile-t 2ab60 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 ime options need 2ab70 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 ed for.. 2ab80 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e # test con 2ab90 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e straints were en 2aba0 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e abled for the in 2abb0 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 terop assembly a 2abc0 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 nd/or.. # 2abd0 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 53 for the S 2abe0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 2abf0 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ry... #.. 2ac00 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 2ac10 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 5b 6c compileOption [l 2ac20 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 2ac30 20 20 20 43 4f 44 45 43 20 45 58 54 45 4e 53 49 CODEC EXTENSI 2ac40 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 48 41 53 ON_FUNCTIONS HAS 2ac50 5f 43 4f 44 45 43 20 49 4e 43 4c 55 44 45 5f 43 _CODEC INCLUDE_C 2ac60 45 52 4f 44 20 49 4e 43 4c 55 44 45 5f 45 58 54 EROD INCLUDE_EXT 2ac70 52 41 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 RA \.. 2ac80 20 20 49 4e 43 4c 55 44 45 5f 53 45 45 20 49 4e INCLUDE_SEE IN 2ac90 43 4c 55 44 45 5f 5a 49 50 56 46 53 20 4a 53 4f CLUDE_ZIPVFS JSO 2aca0 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 4c 45 47 N1_EXTENSION LEG 2acb0 41 43 59 5f 43 4c 4f 53 45 20 4c 4f 47 20 5c 0d ACY_CLOSE LOG \. 2acc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 45 52 . PER 2acd0 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f CENTILE_EXTENSIO 2ace0 4e 20 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 N REGEXP_EXTENSI 2acf0 4f 4e 20 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e ON SESSION_EXTEN 2ad00 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. 2ad10 20 20 20 20 53 48 41 31 5f 45 58 54 45 4e 53 49 SHA1_EXTENSI 2ad20 4f 4e 20 54 45 53 54 5f 45 58 54 45 4e 53 49 4f ON TEST_EXTENSIO 2ad30 4e 20 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 N TOTYPE_EXTENSI 2ad40 4f 4e 20 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 ON VIRTUAL_TABLE 2ad50 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ] {.. # 2ad60 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 2ad70 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 2ad80 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 compile-time op 2ad90 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 69 tion is listed i 2ada0 6e 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 n the list.. 2adb0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6b 65 # ke 2adc0 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 pt track of by t 2add0 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d he interop assem 2ade0 62 6c 79 20 61 6e 64 2f 6f 72 20 74 68 65 20 53 bly and/or the S 2adf0 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 QLite.. 2ae00 20 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 # core li 2ae10 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 brary... 2ae20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 #.. c 2ae30 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 43 6f 6d heckForSQLiteCom 2ae40 70 69 6c 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 pileOption$::te
2ae50 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 6f 6d 70  st_channel $comp 2ae60 69 6c 65 4f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 ileOption.. 2ae70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2ae80 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2ae90 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 2aea0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 2aeb0 74 65 20 70 72 6f 76 69 64 65 72 20 77 61 73 20 te provider was 2aec0 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 compiled with.. 2aed0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 2aee0 75 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20 65 upport for any e 2aef0 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 ncrypted databas 2af00 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es... #.. 2af10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 if {[hav 2af20 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e eSQLiteDefineCon 2af30 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 43 4f stant INTEROP_CO 2af40 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 DEC] || \.. 2af50 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 [haveSQLi 2af60 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant 2af70 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 INTEROP_INCLUDE 2af80 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 _SEE]} then {.. 2af90 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2afa0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f # NOTE: No 2afb0 77 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 69 w check if the i 2afc0 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 2afd0 77 61 73 20 61 6c 73 6f 20 63 6f 6d 70 69 6c 65 was also compile 2afe0 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 d with.. 2aff0 20 20 23 20 20 20 20 20 20 20 73 75 70 70 6f 72 # suppor 2b000 74 20 66 6f 72 20 65 6e 63 72 79 70 74 65 64 20 t for encrypted 2b010 64 61 74 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 databases... 2b020 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2b030 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 2b040 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 teCompileOption 2b050 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 CODEC] || \.. 2b060 20 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 [have 2b070 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 SQLiteCompileOpt 2b080 69 6f 6e 20 49 4e 43 4c 55 44 45 5f 53 45 45 5d ion INCLUDE_SEE] 2b090 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2b0a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2b0b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e # NOTE: Fin 2b0c0 61 6c 6c 79 2c 20 63 68 65 63 6b 20 69 66 20 74 ally, check if t 2b0d0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 2b0e0 69 62 72 61 72 79 20 77 61 73 20 63 6f 6d 70 69 ibrary was compi 2b0f0 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 led.. 2b100 20 23 20 20 20 20 20 20 20 77 69 74 68 20 73 75 # with su 2b110 70 70 6f 72 74 20 66 6f 72 20 65 6e 63 72 79 70 pport for encryp 2b120 74 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d 0a ted databases... 2b130 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 2b140 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 2b150 68 61 76 65 53 51 4c 69 74 65 43 6f 6d 70 69 6c haveSQLiteCompil 2b160 65 4f 70 74 69 6f 6e 20 48 41 53 5f 43 4f 44 45 eOption HAS_CODE 2b170 43 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 C]} then {.. 2b180 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2b190 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 2b1a0 45 3a 20 59 65 73 2c 20 61 64 64 20 63 6f 6e 73 E: Yes, add cons 2b1b0 74 72 61 69 6e 74 20 66 6f 72 20 75 73 65 20 62 traint for use b 2b1c0 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 2b1d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2b1e0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 2b1f0 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 2b200 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 2b210 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 te.Encryption.. 2b220 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 2b230 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2b240 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2b250 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2b260 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 E: Check the cur 2b270 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e rent build year. 2b280 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 Basically, thi 2b290 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 s indicates.. 2b2a0 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 # whi 2b2b0 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 ch version of MS 2b2c0 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 Build and/or Vis 2b2d0 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75 ual Studio was u 2b2e0 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 sed to.. 2b2f0 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 # compile 2b300 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e the assembly bin 2b310 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 aries under test 2b320 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2b330 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2b340 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
2b350 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2b360 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
2b370 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2b380 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22   build year... "
2b390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
2b3a0 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65  year [getBuildYe
2b3b0 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64  ar]..        add
2b3c0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2b3d0 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72  ndArgs buildYear
2b3e0 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20  . $year].. 2b3f0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2b400 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2b410 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c  rgs \" $year \"\ 2b420 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. 2b430 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2b440 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 Check the curre 2b450 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 nt build .NET Fr 2b460 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73 69 63 61 amework. Basica 2b470 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 lly, this.. 2b480 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 69 63 # indic 2b490 61 74 65 73 20 77 68 69 63 68 20 76 65 72 73 69 ates which versi 2b4a0 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20 46 on of the .NET F 2b4b0 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69 6e ramework is bein 2b4c0 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 g.. # 2b4d0 20 20 20 75 73 65 64 20 62 79 20 74 68 65 20 61 used by the a 2b4e0 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 ssembly binaries 2b4f0 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 under test... 2b500 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2b510 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2b520 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
2b530 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
2b540 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e  king for System.
2b550 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c  Data.SQLite buil
2b560 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  d .NET Framework
2b570 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
2b580 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42   set netFx [getB
2b590 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 20 20 20 20  uildNetFx]..
2b5a0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
2b5b0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75  t [appendArgs bu
2b5c0 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e  ildFramework. $n 2b5d0 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 etFx].. t 2b5e0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
2b5f0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
2b600 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d   \" $netFx \"\n] 2b610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 2b620 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 2b630 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 heck the current 2b640 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 build configura 2b650 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 tion. This shou 2b660 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 ld normally.. 2b670 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 # be 2b680 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f either "Debug" o 2b690 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 r "Release"... 2b6a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2b6b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2b6c0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
2b6d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
2b6e0 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e  king for System.
2b6f0 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c  Data.SQLite buil
2b700 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  d configuration.
2b710 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .. "....
2b720 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  set configuratio
2b730 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69  n [getBuildConfi
2b740 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20  guration]..
2b750 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
2b760 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69   [appendArgs bui
2b770 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  ldConfiguration.
2b780 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d   $configuration] 2b790 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 2b7a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2b7b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $2b7c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 configuration \" 2b7d0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 2b7e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2b7f0 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61 : Try to setup a 2b800 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c n interrupt call 2b810 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73 back using the s 2b820 63 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a cript debugger.. 2b830 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2b840 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c that will cancel 2b850 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73 all SQL queries 2b860 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 in progress for 2b870 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 all database.. 2b880 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 2b890 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e onnections known 2b8a0 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72 to this interpr 2b8b0 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 eter... # 2b8c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 2b8d0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 2b8e0 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74 (sqliteInterrupt 2b8f0 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e Callback)]} then 2b900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 2b910 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 tupDbInterruptCa 2b920 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 llback$::test_c
2b930 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c  hannel $::test_l 2b940 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d og.. }... 2b950 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2b960 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 2b970 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 k for the native 2b980 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c runtime option, 2b990 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 which would mea 2b9a0 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 n we are.. 2b9b0 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 # using 2b9c0 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 2b9d0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 ssembly... 2b9e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 2b9f0 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 ckForRuntimeOpti 2ba00 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e on$::test_chann
2ba10 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20  el native....
2ba20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2ba30 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
2ba40 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20   the test suite
2ba50 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65  should count the
2ba60 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65   number of conne
2ba70 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  ctions..
2ba80 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22  #       "opened"
2ba90 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72   and "closed" fr
2baa0 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e  om the pool when
2bab0 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20   determining if
2bac0 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  a test..
2bad0 23 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20  #       passed.
2bae0 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20   Disabling this
2baf0 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65  behavior is some
2bb00 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20  times necessary
2bb10 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  (e.g...        #
2bb20 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68         during th
2bb30 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e  e release testin
2bb40 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75  g process) becau
2bb50 73 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76  se there are sev
2bb60 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20  eral..        #
2bb70 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74        tests that
2bb80 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70   rely on the "op
2bb90 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20  ened from pool"
2bba0 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61  count being grea
2bbb0 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ter..        #
2bbc0 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20       than zero.
2bbd0 20 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79   These tests may
2bbe0 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65   fail due to the
2bbf0 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74   non-determinist
2bc00 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ic..        #
2bc10 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20      behavior of
2bc20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e  the CLR GC, even
2bc30 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e   when there is n
2bc40 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64  o bug in the cod
2bc50 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
2bc60 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e     being tested.
2bc70 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2bc80 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e       checkForRun
2bc90 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65  timeOption $::te 2bca0 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f st_channel noPoo 2bcb0 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 lCounts.... 2bcc0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 2bcd0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 2bce0 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68 he test suite sh 2bcf0 6f 75 6c 64 20 75 73 65 20 73 68 61 72 65 64 2d ould use shared- 2bd00 63 61 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20 cache mode... 2bd10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2bd20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f checkForRuntimeO 2bd30 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 ption$::test_ch
2bd40 61 6e 6e 65 6c 20 73 68 61 72 65 64 43 61 63 68  annel sharedCach
2bd50 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e....        #..
2bd60 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2bd70 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75  Report the resou
2bd80 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 20  rce usage prior
2bd90 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74  to running any t
2bda0 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ests...        #
2bdb0 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74  ..        report
2bdc0 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20  SQLiteResources
2bdd0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 2bde0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2bdf0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 # NOTE: Gr 2be00 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e ab the list of n 2be10 61 74 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f ative modules fo 2be20 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 r the current pr 2be30 6f 63 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20 ocess and.. 2be40 20 20 20 23 20 20 20 20 20 20 20 72 65 70 6f 72 # repor 2be50 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e t on the System. 2be60 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 Data.SQLite rela 2be70 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 ted ones... 2be80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 2be90 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 2bea0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 2beb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 2bec0 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 et modules [obje 2bed0 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 ct invoke \.. 2bee0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 2bef0 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 m.Diagnostics.Pr 2bf00 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 ocess.GetCurrent 2bf10 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d Process Modules] 2bf20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 .... ob 2bf30 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c ject foreach -al 2bf40 69 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 ias module$modu
2bf50 6c 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  les {..
2bf60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2bf70 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f    # NOTE: The mo
2bf80 64 75 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68  dule file name h
2bf90 65 72 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d  ere must be norm
2bfa0 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20  alized...
2bfb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2bfc0 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
2bfd0 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
2bfe0 20 5b 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e 61   [$module FileNa 2bff0 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 me]].. 2c000 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 4f 6e set fileNameOn 2c010 6c 79 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 ly [file tail$f
2c020 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....
2c030 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65          if {[lse
2c040 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63  arch -exact -noc
2c050 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20  ase -- \..
2c060 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 4e 61            [getNa
2c070 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e  tiveLibraryFileN
2c080 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e  amesOnly] $fileN 2c090 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 ameOnly] != -1} 2c0a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2c0b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2c0c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
2c0d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
2c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
2c0f0 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20  -- found loaded
2c100 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69  SQLite native li
2c110 62 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20  brary module: "
2c120 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2c130 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c       $fileName \ 2c140 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 2c150 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 73 65 61 72 } elseif {[lsear 2c160 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 ch -exact -nocas 2c170 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 e -- \.. 2c180 20 20 20 20 20 20 20 20 5b 67 65 74 49 6e 74 65 [getInte 2c190 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN 2c1a0 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e amesOnly]$fileN
2c1b0 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20  ameOnly] != -1}
2c1c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2c1d0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 2c1e0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 2c1f0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 2c200 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 2c210 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 -- found loaded 2c220 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 SQLite interop a 2c230 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 ssembly module: 2c240 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 2c250 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65$fileName
2c260 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
2c270 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
2c280 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2c290 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
2c2a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
2c2b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2c2c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c2d0 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 "---- compile-t 2c2e0 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 ime options for 2c2f0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 2c300 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ary... ".... 2c310 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 2c320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2c330 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 2c340 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 2c350 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c360 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 2c370 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 QLite.SQLite3 SQ 2c380 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f LiteCompileOptio 2c390 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ns.. } 2c3a0 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 compileOptions] 2c3b0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 2c3c0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 2c3d0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2c3e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72  [appendArgs [for
2c3f0 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c  matList [lsort \
2c400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2c410 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e    $compileOption 2c420 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a s] <none>] \n].. 2c430 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 2c440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2c450 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2c460 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
2c470 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
2c480 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2c490 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
2c4a0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 2c4b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 2c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 2c4d0 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 -- compile-time 2c4e0 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 options for SQLi 2c4f0 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem 2c500 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 bly... ".... 2c510 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 2c520 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2c530 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 2c540 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 2c550 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c560 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 2c570 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e QLite.SQLite3 In 2c580 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 teropCompileOpti 2c590 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d ons.. } 2c5a0 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d compileOptions] 2c5b0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 2c5c0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 2c5d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2c5e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f   [appendArgs [fo
2c5f0 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20  rmatList [lsort
2c600 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2c610 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f     $compileOptio 2c620 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d ns] <none>] \n]. 2c630 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 2c640 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 2c650 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2c660 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
2c670 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2c680 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2c690 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2c6a0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20   NOTE: Show the
2c6b0 61 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73  active test cons
2c6c0 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20  traints...
2c6d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
2c6e0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 2c6f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 2c700 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 ---- constraints 2c710 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 2c720 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b [formatList [ 2c730 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 lsort [getConstr 2c740 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 aints]] <none>] 2c750 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 2c760 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2c770 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20 : Save the test 2c780 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 constraints for 2c790 75 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63 use by threads c 2c7a0 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a reated in this.. 2c7b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2c7c0 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 application doma 2c7d0 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 in. This is nec 2c7e0 65 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61 essary because a 2c7f0 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 ll the Eagle.. 2c800 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74 # "t 2c810 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 est context" inf 2c820 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d ormation is per- 2c830 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 thread... 2c840 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 2c850 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 2c860 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 test_constraints 2c870 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2c880 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f set ::test_ 2c890 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 constraints$::e
2c8a0 61 67 6c 65 5f 74 65 73 74 73 28 43 6f 6e 73 74  agle_tests(Const
2c8b0 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20  raints)..
2c8c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
2c8d0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
2c8e0 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72   Load the "after
2c8f0 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75  -constraints" cu
2c900 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e  stom per-user an
2c910 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20  d/or per-host..
2c920 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
2c930 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77  est settings now
2c940 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2c950 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
2c960 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65  [list loadSQLite
2c970 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a  TestSettings $:: 2c980 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 test_channel .af 2c990 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ter].... 2c9a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2c9b0 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c E: If necessary, 2c9c0 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63 enable shared-c 2c9d0 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a ache mode now... 2c9e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2c9f0 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 if {[hasRunti 2ca00 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 meOption sharedC 2ca10 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ache]} then {.. 2ca20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 enableS 2ca30 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 haredCache$::te
2ca40 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  st_channel true.
2ca50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2ca60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2ca70 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68   # NOTE: Show wh
2ca80 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74  en our tests act
2ca90 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77  ually began (now
2caa0 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
2cab0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2cac0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 2cad0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 2cae0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 "---- Sy 2caf0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 2cb00 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 20 tests began at 2cb10 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 2cb20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b [clock format [ 2cb30 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 clock seconds]] 2cb40 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 2cb50 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 2cb60 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 runSQLiteTestFi 2cb70 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b lesPrologue {} { 2cb80 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2cb90 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 # NOTE: Skip ru 2cba0 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d nning our custom 2cbb0 20 66 69 6c 65 73 20 70 72 6f 6c 6f 67 75 65 20 files prologue 2cbc0 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 if the main one 2cbd0 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 has been.. 2cbe0 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e # skipped. 2cbf0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2cc00 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 2cc10 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 ts ::no(prologue 2cc20 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b .eagle)]} then { 2cc30 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 .. upleve 2cc40 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 l 1 {.. 2cc50 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 2cc60 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 NOTE: Setup the 2cc70 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 variables that r 2cc80 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 efer to the vari 2cc90 6f 75 73 20 6e 6f 6e 2d 64 61 74 61 20 66 69 6c ous non-data fil 2cca0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 es.. # 2ccb0 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20 62 required b 2ccc0 79 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 y the tests in t 2ccd0 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 his file... 2cce0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2ccf0 20 20 73 65 74 20 65 6e 74 69 74 79 46 72 61 6d set entityFram 2cd00 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 20 5c 0d 0a eworkDllFile \.. 2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 2cd20 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 2cd30 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e EntityFramework. 2cd40 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 dll false].... 2cd50 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 73 74 set inst 2cd60 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a allerExeFile \.. 2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 2cd80 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 2cd90 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 20 66 61 Installer.exe fa 2cda0 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 2cdb0 20 20 73 65 74 20 73 71 6c 69 74 65 44 65 73 69 set sqliteDesi 2cdc0 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 gnerDllFile \.. 2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 2cde0 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 tBuildFileName S 2cdf0 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 QLite.Designer.d 2ce00 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 ll false].... 2ce10 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 set syste 2ce20 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 mDataSQLiteDllFi 2ce30 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 2ce40 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c [getBuildFil 2ce50 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 2ce60 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 66 61 6c a.SQLite.dll fal 2ce70 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 se].... 2ce80 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 set systemDataS 2ce90 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 2cea0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2ceb0 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e [getBuildFileN 2cec0 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 2ced0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 SQLite.Linq.dll 2cee0 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 false].... 2cef0 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 set systemDa 2cf00 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 taSQLiteEf6DllFi 2cf10 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 2cf20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c [getBuildFil 2cf30 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 2cf40 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c a.SQLite.EF6.dll 2cf50 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 false].... 2cf60 20 20 20 20 20 73 65 74 20 74 65 73 74 45 78 65 set testExe 2cf70 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 File [getBuildFi 2cf80 6c 65 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 20 leName test.exe 2cf90 66 61 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 false].. 2cfa0 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78 set testLinqEx 2cfb0 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 eFile [getBuildF 2cfc0 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71 ileName testlinq 2cfd0 2e 65 78 65 20 66 61 6c 73 65 5d 0d 0a 20 20 20 .exe false].. 2cfe0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 45 set testE 2cff0 66 36 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 f6ExeFile [getBu 2d000 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 ildFileName test 2d010 65 66 36 2e 65 78 65 20 66 61 6c 73 65 5d 0d 0a ef6.exe false].. 2d020 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2d030 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 2d040 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 Setup the varia 2d050 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 bles that refer 2d060 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 to the various d 2d070 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ata files.. 2d080 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 # req 2d090 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73 uired by the tes 2d0a0 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e ts in this file. 2d0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2d0c0 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 set tes 2d0d0 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 tLinqOutFile [fi 2d0e0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 2d0f0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 2d100 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 2d110 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 2d120 5d 20 74 65 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d ] testlinq.out]] 2d130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 2d140 74 20 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 t northwindEfDbF 2d150 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 2d160 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 2d170 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2d180 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [ 2d190 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 67 65 file dirname [ge 2d1a0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2d1b0 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 ath]]] \.. 2d1c0 20 20 20 20 20 20 20 20 74 65 73 74 6c 69 6e 71 testlinq 2d1d0 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 5d northwindEF.db] 2d1e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ].... s 2d1f0 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 et nonWalDbFile 2d200 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 2d210 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 2d230 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2d240 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d ath] nonWal.db]] 2d250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 2d260 74 20 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c t walDbFile [fil 2d270 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 2d280 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 2d290 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 2d2a0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 2d2b0 20 77 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 wal.db]].... 2d2c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2d2d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 2d2e0 76 61 72 69 6f 75 73 20 69 6e 73 74 61 6c 6c 2f various install/ 2d2f0 75 6e 69 6e 73 74 61 6c 6c 20 6c 6f 67 20 66 69 uninstall log fi 2d300 6c 65 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 les used to test 2d310 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 2d320 23 20 20 20 20 20 20 20 64 65 73 69 67 6e 2d 74 # design-t 2d330 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e ime component in 2d340 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 staller... 2d350 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2d360 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c set testInstall 2d370 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 Vs2005LogFile [f 2d380 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 2d390 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 2d3a0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 2d3b0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 2d3c0 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 h] Installer_Tes 2d3d0 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a t_Vs2005.log]].. 2d3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 2d3f0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 2d400 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 8LogFile [file n 2d410 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 2d420 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 2d430 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 2d440 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e TestDataPath] In 2d450 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 2d460 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 008.log]].... 2d470 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 set testI 2d480 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 nstallVs2010LogF 2d490 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 2d4a0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 2d4b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2d4c0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 2d4d0 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c ataPath] Install 2d4e0 65 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c er_Test_Vs2010.l 2d4f0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 2d500 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c set testInstal 2d510 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b lVs2012LogFile [ 2d520 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 2d530 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 2d540 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 2d550 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 2d560 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 th] Installer_Te 2d570 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d st_Vs2012.log]]. 2d580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 2d590 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 2d5a0 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 13LogFile [file 2d5b0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 2d5c0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 2d5d0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 2d5e0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 eTestDataPath] I 2d5f0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 2d600 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2013.log]].... 2d610 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 2d620 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 InstallVs2015Log 2d630 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 2d640 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 2d650 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2d660 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 2d670 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c DataPath] Instal 2d680 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e ler_Test_Vs2015. 2d690 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 2d6a0 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 set testInsta 2d6b0 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 llVs2017LogFile 2d6c0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 2d6d0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 2d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 2d6f0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2d700 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 ath] Installer_T 2d710 65 73 74 5f 56 73 32 30 31 37 2e 6c 6f 67 5d 5d est_Vs2017.log]] 2d720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 2d730 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 t testUninstallV 2d740 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 s2005LogFile [fi 2d750 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 2d760 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 2d770 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 2d780 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 2d790 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 ] Uninstaller_Te 2d7a0 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d st_Vs2005.log]]. 2d7b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 2d7c0 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 2d7d0 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 2008LogFile [fil 2d7e0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 2d7f0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 2d800 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 2d810 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 2d820 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 Uninstaller_Tes 2d830 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a t_Vs2008.log]].. 2d840 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 2d850 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2d860 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 010LogFile [file 2d870 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 2d880 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 2d890 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2d8a0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2d8b0 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 Uninstaller_Test 2d8c0 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d _Vs2010.log]]... 2d8d0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 . set t 2d8e0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 2d8f0 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 12LogFile [file 2d900 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 2d910 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 2d920 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 2d930 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 eTestDataPath] U 2d940 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f ninstaller_Test_ 2d950 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a Vs2012.log]].... 2d960 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 set te 2d970 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2d980 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 3LogFile [file n 2d990 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 2d9a0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 2d9b0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 2d9c0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e TestDataPath] Un 2d9d0 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 installer_Test_V 2d9e0 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2013.log]].... 2d9f0 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 set tes 2da00 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 tUninstallVs2015 2da10 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 LogFile [file na 2da20 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 2da30 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 2da40 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 2da50 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 estDataPath] Uni 2da60 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 2da70 32 30 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2015.log]].... 2da80 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 2da90 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c UninstallVs2017L 2daa0 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 ogFile [file nat 2dab0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 2dac0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 2dad0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 2dae0 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e stDataPath] Unin 2daf0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 2db00 30 31 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 017.log]].... 2db10 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 ######### 2db20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2db30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2db40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2db50 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a ############.... 2db60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2db70 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 2db80 28 63 68 65 63 6b 46 6f 72 53 71 6c 69 74 65 46 (checkForSqliteF 2db90 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 2dba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2dbb0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2dbc0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2dbd0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2dbe0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2dbf0 20 24 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72$entityFramewor
2dc00 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  kDllFile]]]} the
2dc10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2dc20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
2dc30 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65  $test_channel$e
2dc40 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c  ntityFrameworkDl
2dc50 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  lFile..
2dc60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2dc70 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2dc80 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2dc90 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2dcb0 69 6c 65 20 74 61 69 6c 20 24 69 6e 73 74 61 6c  ile tail $instal 2dcc0 6c 65 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 lerExeFile]]]} t 2dcd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2dce0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2dcf0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2dd00 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c  $installerExeFil 2dd10 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d e Installer.exe. 2dd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2dd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2dd40 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 2dd50 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 2dd60 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 2dd70 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 2dd80 69 6c 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e il$sqliteDesign
2dd90 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68  erDllFile]]]} th
2dda0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2ddb0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
2ddc0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
2ddd0 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c  sqliteDesignerDl
2dde0 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  lFile..
2ddf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2de00 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2de10 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2de20 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2de40 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d  ile tail $system 2de50 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c DataSQLiteDllFil 2de60 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 2de70 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 chec 2de80 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2de90 68 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61  hannel $systemDa 2dea0 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d taSQLiteDllFile. 2deb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2dec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2ded0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 2dee0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 2def0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 2df00 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 2df10 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 il$systemDataSQ
2df20 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d  LiteLinqDllFile]
2df30 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2df40 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2df50 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2df60 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 nnel$systemData
2df70 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c  SQLiteLinqDllFil
2df80 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
2df90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2dfa0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
2dfb0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
2dfc0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
2dfd0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
2dfe0 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61  tail $systemData 2dff0 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 SQLiteEf6DllFile 2e000 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 2e010 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 2e020 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2e030 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74  annel $systemDat 2e040 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c aSQLiteEf6DllFil 2e050 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 2e060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2e070 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 2e080 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2e090 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 2e0a0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 2e0b0 74 61 69 6c 20 24 74 65 73 74 45 78 65 46 69 6c tail$testExeFil
2e0c0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2e0d0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
2e0e0 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 2e0f0 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46 hannel$testExeF
2e100 69 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20  ile test.exe..
2e110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
2e120 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2e130 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2e140 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2e150 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2e160 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2e170 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65  $testLinqExeFile 2e180 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 2e190 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 2e1a0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2e1b0 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45  annel $testLinqE 2e1c0 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e xeFile testlinq. 2e1d0 65 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 exe.. 2e1e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 2e1f0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 2e200 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 2e210 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 2e220 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 2e230 65 20 74 61 69 6c 20 24 74 65 73 74 45 66 36 45 e tail$testEf6E
2e240 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
2e250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2e260 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2e270 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
2e280 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74  tEf6ExeFile test
2e290 65 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20  ef6.exe..
2e2a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2e2b0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2e2c0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2e2d0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e2f0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 2e300 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 LinqOutFile]]]} 2e310 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2e320 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 2e330 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
2e340 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c   $testLinqOutFil 2e350 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 2e360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2e370 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 2e380 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2e390 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 2e3a0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 2e3b0 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 tail$northwindE
2e3c0 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  fDbFile]]]} then
2e3d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2e3e0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2e3f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f test_channel$no
2e400 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d  rthwindEfDbFile.
2e410 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2e430 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
2e440 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
2e450 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
2e460 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
2e470 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65  il $nonWalDbFile 2e480 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 2e490 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 2e4a0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2e4b0 61 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46  annel $nonWalDbF 2e4c0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 2e4d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 2e4e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 2e4f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 2e500 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 2e510 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 2e520 65 20 74 61 69 6c 20 24 77 61 6c 44 62 46 69 6c e tail$walDbFil
2e530 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2e540 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
2e550 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 2e560 68 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c hannel$walDbFil
2e570 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
2e580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2e590 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
2e5a0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
2e5b0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
2e5c0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
2e5d0 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 2e5e0 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d lVs2005LogFile]] 2e5f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2e600 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2e610 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
2e620 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  nel $testInstall 2e630 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 Vs2005LogFile.. 2e640 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2e650 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2e660 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2e670 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2e680 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2e690 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2e6a0 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
2e6b0 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  008LogFile]]]} t
2e6c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2e6d0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2e6e0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2e6f0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
2e700 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  08LogFile..
2e710 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2e720 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
2e730 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
2e740 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
2e750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2e760 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2e770 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c stInstallVs2010L 2e780 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 2e790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e7a0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2e7b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 2e7c0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f tInstallVs2010Lo 2e7d0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 2e7e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2e7f0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2e800 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2e810 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2e830 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
2e840 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
2e850 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
2e860 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
2e870 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 2e880 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 channel$testIns
2e890 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c  tallVs2012LogFil
2e8a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
2e8b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2e8c0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
2e8d0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
2e8e0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
2e8f0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
2e900 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 2e910 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d lVs2013LogFile]] 2e920 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2e930 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2e940 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
2e950 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  nel $testInstall 2e960 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 Vs2013LogFile.. 2e970 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2e980 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2e990 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2e9a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2e9b0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2e9c0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2e9d0 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
2e9e0 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  015LogFile]]]} t
2e9f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2ea00 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2ea10 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2ea20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
2ea30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  15LogFile..
2ea40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2ea50 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
2ea60 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
2ea70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
2ea80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2ea90 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2eaa0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c stInstallVs2017L 2eab0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 2eac0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2ead0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2eae0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 2eaf0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f tInstallVs2017Lo 2eb00 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 2eb10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2eb20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2eb30 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2eb40 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2eb60 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e ile tail$testUn
2eb70 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67  installVs2005Log
2eb80 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2eb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2eba0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2ebb0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
2ebc0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f  ninstallVs2005Lo
2ebd0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  gFile..
2ebe0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2ebf0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2ec00 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2ec10 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2ec30 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e  ile tail $testUn 2ec40 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 installVs2008Log 2ec50 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2ec60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 2ec70 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2ec80 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 2ec90 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f ninstallVs2008Lo 2eca0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 2ecb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2ecc0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2ecd0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2ece0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2ed00 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e ile tail$testUn
2ed10 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67  installVs2010Log
2ed20 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2ed30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2ed40 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2ed50 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
2ed60 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  ninstallVs2010Lo
2ed70 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  gFile..
2ed80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2ed90 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2eda0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2edb0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2edd0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e  ile tail $testUn 2ede0 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 installVs2012Log 2edf0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2ee00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 2ee10 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2ee20 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 2ee30 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f ninstallVs2012Lo 2ee40 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 2ee50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2ee60 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2ee70 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2ee80 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2eea0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e ile tail$testUn
2eeb0 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  installVs2013Log
2eec0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2eed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2eee0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2eef0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
2ef00 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f  ninstallVs2013Lo
2ef10 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  gFile..
2ef20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2ef30 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2ef40 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2ef50 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2ef70 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e  ile tail $testUn 2ef80 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 installVs2015Log 2ef90 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 2efa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 2efb0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
2efc0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55  t_channel $testU 2efd0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f ninstallVs2015Lo 2efe0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 2eff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2f000 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2f010 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2f020 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2f040 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e ile tail$testUn
2f050 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67  installVs2017Log
2f060 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2f070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2f080 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2f090 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 t_channel$testU
2f0a0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f  ninstallVs2017Lo
2f0b0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  gFile..
2f0c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2f0d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
2f0e0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
2f0f0 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c  .    proc runSQL
2f100 69 74 65 54 65 73 74 46 69 6c 65 73 45 70 69 6c  iteTestFilesEpil
2f110 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ogue {} {..
2f120 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
2f130 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f  : Skip running o
2f140 75 72 20 63 75 73 74 6f 6d 20 66 69 6c 65 73 20  ur custom files
2f150 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20  epilogue if the
2f160 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65  main one has bee
2f170 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
2f180 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20   skipped...
2f190 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b   #..      if {![
2f1a0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
2f1b0 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29  (epilogue.eagle)
2f1c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2f1d0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a     uplevel 1 {..
2f1e0 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20            unset
2f1f0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20  -nocomplain \..
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
2f210 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 37  tUninstallVs2017
2f220 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e  LogFile testUnin
2f230 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69  stallVs2015LogFi
2f240 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
2f250 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c      testUninstal
2f260 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 74  lVs2013LogFile t
2f270 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
2f280 31 32 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20  12LogFile \..
2f290 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55             testU
2f2a0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  ninstallVs2010Lo
2f2b0 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74  gFile testUninst
2f2c0 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
2f2d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2f2e0 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56    testUninstallV
2f2f0 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 74 65 73  s2005LogFile tes
2f300 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f  tInstallVs2017Lo
2f310 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  gFile \..
2f320 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 61         testInsta
2f330 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20  llVs2015LogFile
2f340 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
2f350 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20  3LogFile \..
2f360 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e            testIn
2f370 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
2f380 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  le testInstallVs
2f390 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2010LogFile \..
2f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
2f3b0 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  tInstallVs2008Lo
2f3c0 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c  gFile testInstal
2f3d0 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a  lVs2005LogFile..
2f3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65  ..          unse
2f3f0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d  t -nocomplain \.
2f400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
2f410 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65  orthwindEfDbFile
2f420 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65   testLinqOutFile
2f430 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2f440 20 20 77 61 6c 44 62 46 69 6c 65 20 6e 6f 6e 57    walDbFile nonW
2f450 61 6c 44 62 46 69 6c 65 0d 0a 0d 0a 20 20 20 20  alDbFile....
2f460 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
2f470 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20  omplain \..
2f480 20 20 20 20 20 20 20 20 20 74 65 73 74 45 66 36           testEf6
2f490 45 78 65 46 69 6c 65 20 74 65 73 74 4c 69 6e 71  ExeFile testLinq
2f4a0 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  ExeFile \..
2f4b0 20 20 20 20 20 20 20 20 20 74 65 73 74 45 78 65           testExe
2f4c0 46 69 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53  File systemDataS
2f4d0 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20  QLiteEf6DllFile
2f4e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2f4f0 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
2f500 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79 73  eLinqDllFile sys
2f510 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
2f520 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
2f530 20 20 20 20 20 20 73 71 6c 69 74 65 44 65 73 69        sqliteDesi
2f540 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74  gnerDllFile inst
2f550 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a  allerExeFile \..
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6e                en
2f570 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c  tityFrameworkDll
2f580 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
2f590 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2f5a0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e  ....    proc run
2f5b0 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67  SQLiteTestEpilog
2f5c0 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue {} {..      #
2f5d0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
2f5e0 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72  Skip running our
2f5f0 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65   custom epilogue
2f600 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65   if the main one
2f610 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20   has been..
2f620 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64   #       skipped
2f630 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2f640 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2f650 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75  sts ::no(epilogu
2f660 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20  e.eagle)]} then
2f670 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2f680 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
2f690 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74  ow when our test
2f6a0 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 64  s actually ended
2f6b0 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20   (now)...
2f6c0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
2f6d0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2f6e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 2f6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 2f700 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 -- System.Data.S 2f710 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 65 QLite tests ende 2f720 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 d at " \.. 2f730 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 [clock for 2f740 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e mat [clock secon 2f750 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 ds]] \n].... 2f760 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2f770 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 NOTE: Load the 2f780 22 65 70 69 6c 6f 67 75 65 22 20 63 75 73 74 6f "epilogue" custo 2f790 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f m per-user and/o 2f7a0 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 0d r per-host test. 2f7b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2f7c0 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a settings now... 2f7d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2f7e0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 uplevel 1 [li 2f7f0 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 st loadSQLiteTes 2f800 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 tSettings$::tes
2f810 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f  t_channel .epilo
2f820 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gue]....
2f830 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47  #..        # BUG
2f840 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65 63  FIX: Before chec
2f850 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 72  king the final r
2f860 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65 20  esources in use
2f870 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d  by SQLite, make.
2f880 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2f890 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66 20     sure both of
2f8a0 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74  the PRAGMA relat
2f8b0 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d  ed directory nam
2f8c0 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20  es are freed...
2f8d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2f8e0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
2f8f0 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74  Directories $::t 2f900 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 est_channel true 2f910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 2f920 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 2f930 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72 lso report the r 2f940 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 66 esource usage af 2f950 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 ter running the 2f960 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 tests... 2f970 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 #.. repor 2f980 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 tSQLiteResources 2f990 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2f9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
2f9b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
2f9c0 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 69 63  eport the critic
2f9d0 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73  al handle counts
2f9e0 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74   after running t
2f9f0 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20  he tests...
2fa00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67 65     #..        ge
2fa10 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75  tSQLiteHandleCou
2fa20 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  nts $::test_chan 2fa30 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 2fa40 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2fa50 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20 : If necessary, 2fa60 64 69 73 61 62 6c 65 20 73 68 61 72 65 64 2d 63 disable shared-c 2fa70 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a ache mode now... 2fa80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2fa90 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 if {[hasRunti 2faa0 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 meOption sharedC 2fab0 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ache]} then {.. 2fac0 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 enableS 2fad0 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 haredCache$::te
2fae0 73 74 5f 63 68 61 6e 6e 65 6c 20 66 61 6c 73 65  st_channel false
2faf0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
2fb00 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
2fb10 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
2fb20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fb30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fb40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fb50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
2fb60 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
2fb70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fb80 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c  ## END Eagle ONL
2fb90 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  Y ##############
2fba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fbb0 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
2fbc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fbd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fbe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fbf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fc00 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20  #..  }....  #..
2fc10 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68   # NOTE: Save th
2fc20 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69  e name of the di
2fc30 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69  rectory containi
2fc40 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20  ng this file...
2fc50 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f   #..  if {![info
2fc60 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64   exists common_d
2fc70 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
2fc80 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f  {..    set commo
2fc90 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c  n_directory [fil
2fca0 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info
2fcb0 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d  script]]..  }...
2fcc0 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE:
2fcd0 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73 74  Provide the Syst
2fce0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74  em.Data.SQLite t
2fcf0 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74  est package to t
2fd00 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  he interpreter..
2fd10 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20  .  #..  package
2fd20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44  provide System.D
2fd30 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20  ata.SQLite.Test
2fd40 31 2e 30 0d 0a 7d 0d 0a                          1.0..}..