System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 1eaab4babc3dba30d90dc58b8b7cff0438b5cd65:

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 20 4e 65 74 53  3 2015 2017 NetS
2080: 74 61 6e 64 61 72 64 32 30 5d 0d 0a 20 20 20 20  tandard20]..
2090: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
20a0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
20b0: 4e 65 74 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20  NetFx {} {..
20c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
20d0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 74 65  E: See if the te
20e0: 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  st .NET Framewor
20f0: 6b 20 73 65 74 74 69 6e 67 20 68 61 73 20 62 65  k setting has be
2100: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79  en overridden by
2110: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2120: 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f  the user (e.g. o
2130: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
2140: 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne)...      #..
2150: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
2160: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74  xists ::test_net
2170: 5f 66 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  _fx] && \..
2180: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
2190: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f  gth $::test_net_ 21a0: 66 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d fx] > 0} then {. 21b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 21c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 21d0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 21e0: 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 st .NET Framewor 21f0: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 k... #.. 2200: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2210: 3a 74 65 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20  :test_net_fx..
2220: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
2230: 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b        set year [
2240: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20  getBuildYear]..
2250: 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 56         set yearV
2260: 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  arName [appendAr
2270: 67 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78  gs ::test_net_fx
2280: 5f 20 24 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20  _ $year].... 2290: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 22a0: 69 73 74 73 20 24 79 65 61 72 56 61 72 4e 61 6d ists$yearVarNam
22b0: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  e] && \..
22c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
22d0: 67 74 68 20 5b 73 65 74 20 24 79 65 61 72 56 61  gth [set $yearVa 22e0: 72 4e 61 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 rName]] > 0} the 22f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 2300: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 2310: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 2320: 69 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 ified test .NET 2330: 46 72 61 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 Framework, based 2340: 20 6f 6e 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 on the build.. 2350: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2360: 20 79 65 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 year... 2370: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 #.. r 2380: 65 74 75 72 6e 20 5b 73 65 74 20 24 79 65 61 72 eturn [set$year
2390: 56 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  VarName]..
23a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
23b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
23c0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62     # NOTE: Fallb
23d0: 61 63 6b 20 74 6f 20 74 68 65 20 22 77 65 6c 6c  ack to the "well
23e0: 20 6b 6e 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61   known" .NET Fra
23f0: 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74  mework version t
2400: 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  hat..          #
2410: 20 20 20 20 20 20 20 69 73 20 6d 6f 73 74 20 63         is most c
2420: 6c 6f 73 65 6c 79 20 61 73 73 6f 63 69 61 74 65  losely associate
2430: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
2440: 6c 61 72 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a  lar version of..
2450: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2460: 20 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2e    Visual Studio.
2470: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2480: 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch
2490: 2d 65 78 61 63 74 20 2d 2d 20 24 79 65 61 72 20  -exact -- $year 24a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 {.. 2 24b0: 30 30 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 005 {.. 24c0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 return netF 24d0: 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x20.. 24e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 24f0: 32 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 2008 {.. 2500: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 return net 2510: 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20 Fx35.. 2520: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2530: 20 32 30 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 2010 {.. 2540: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 return ne 2550: 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 tFx40.. 2560: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2570: 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 2012 {.. 2580: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 2590: 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 etFx45.. 25a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 25b0: 20 20 20 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 2013 {.. 25c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 25d0: 6e 65 74 46 78 34 35 31 3b 20 23 20 54 4f 44 4f netFx451; # TODO 25e0: 3a 20 4f 72 20 22 6e 65 74 46 78 34 35 32 22 3f : Or "netFx452"? 25f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 31 . 201 2610: 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 5 {.. 2620: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 2630: 36 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 6; # TODO: Or "n 2640: 65 74 46 78 34 36 31 22 20 2f 20 22 6e 65 74 46 etFx461" / "netF 2650: 78 34 36 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 x462"?.. 2660: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2670: 20 20 20 32 30 31 37 20 7b 0d 0a 20 20 20 20 20 2017 {.. 2680: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 2690: 6e 65 74 46 78 34 37 3b 20 23 20 54 4f 44 4f 3a netFx47; # TODO: 26a0: 20 4f 72 20 22 6e 65 74 46 78 34 37 31 22 3f 0d Or "netFx471"?. 26b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 26c0: 20 20 20 20 20 20 20 20 20 20 20 20 4e 65 74 53 NetS 26d0: 74 61 6e 64 61 72 64 32 30 20 7b 0d 0a 20 20 20 tandard20 {.. 26e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 26f0: 6e 20 6e 65 74 53 74 61 6e 64 61 72 64 32 30 0d n netStandard20. 2700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2710: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 defa 2720: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ult {.. 2730: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 return netF 2740: 78 33 35 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f x35; # TODO: Goo 2750: 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 d "fallback" def 2760: 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 ault?.. 2770: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2780: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 2790: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 27a0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f . #.. # NO 27b0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 TE: This procedu 27c0: 72 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e re should return 27d0: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 non-zero if the 27e0: 20 63 6f 6e 66 69 67 75 72 65 64 20 74 65 73 74 configured test 27f0: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 70 6c .. # pl 2800: 61 74 66 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c atform is most l 2810: 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c ikely the defaul 2820: 74 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 t for this machi 2830: 6e 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 ne... #.. 2840: 70 72 6f 63 20 69 73 44 65 66 61 75 6c 74 42 75 proc isDefaultBu 2850: 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 ildPlatform { {v 2860: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b erbose true} } { 2870: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2880: 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 # NOTE: Running 2890: 20 6f 6e 20 57 6f 57 36 34 20 69 73 20 6e 65 76 on WoW64 is nev 28a0: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 er the default p 28b0: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 28c0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 28d0: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 RunningWoW64]} t 28e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 28f0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
2900: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
2910: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2920: 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 2930: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 "---- dete 2940: 63 74 65 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 cted non-default 2950: 20 70 6c 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 platform (WoW64 2960: 29 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d )\n".. }. 2970: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur 2980: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d n false.. } 2990: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 29a0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 29b0: 68 61 73 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 has a good chanc 29c0: 65 20 6f 66 20 62 65 69 6e 67 20 74 68 65 20 64 e of being the d 29d0: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e efault platform. 29e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 29f0: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
2a00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
2a10: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2a20: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 nnel "---- detec 2a30: 74 65 64 20 64 65 66 61 75 6c 74 20 70 6c 61 74 ted default plat 2a40: 66 6f 72 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d form\n".. } 2a50: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 2a60: 20 74 72 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d true.. }.... 2a70: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 . proc getBui 2a80: 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 ldPlatform { nat 2a90: 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ive } {.. i 2aa0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 2ab0: 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d ::test_platform] 2ac0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 2ad0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 2ae0: 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d$::test_platform
2af0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
2b00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2b10: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
2b20: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
2b30: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 49 66 20 74   platform.  If t
2b40: 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  his variable is
2b50: 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 20 20 20 20  not set,..
2b60: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 65    #       the de
2b70: 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c  fault value will
2b80: 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65   be based on the
2b90: 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65   machine archite
2ba0: 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...
2bb0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
2bc0: 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65  n [expr {$native 2bd0: 20 3f 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 ?$::test_platf
2be0: 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20  orm : ""}]..
2bf0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
2c00: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
2c10: 6d 61 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20  machine] && \..
2c20: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
2c30: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 2c40: 6d 61 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 machine] > 0} th 2c50: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 2c60: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2c70: 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c For native buil 2c80: 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 ds, return the p 2c90: 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 latform name cor 2ca0: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 responding to.. 2cb0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 2cc0: 68 65 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 he test machine 2cd0: 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 architecture; ot 2ce0: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 herwise, return 2cf0: 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 an empty.. 2d00: 20 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 # string 2d10: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2d20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 2d30: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 pr {.. 2d40: 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69$native ? [machi
2d50: 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a  neToPlatform $:: 2d60: 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 test_machine] : 2d70: 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a "".. }].. 2d80: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 2d90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 2da0: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach 2db0: 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ine)]} then {.. 2dc0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2dd0: 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 # NOTE: For na 2de0: 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65 74 tive builds, ret 2df0: 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d urn the platform 2e00: 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 name correspond 2e10: 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 ing to.. 2e20: 23 20 20 20 20 20 20 20 74 68 65 20 6d 61 63 68 # the mach 2e30: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 ine architecture 2e40: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74 ; otherwise, ret 2e50: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 2e60: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ing... #. 2e70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 2e80: 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 [expr {.. 2e90: 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61$native ? [ma
2ea0: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20  chineToPlatform
2eb0: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( 2ec0: 6d 61 63 68 69 6e 65 29 5d 20 3a 20 22 22 0d 0a machine)] : "".. 2ed0: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 }].. 2ee0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 2ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2f00: 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e NOTE: No machin 2f10: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 20 69 e architecture i 2f20: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 s available, ret 2f30: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 2f40: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 ing... # 2f50: 20 20 20 20 20 20 49 74 20 69 73 20 69 6d 70 6f It is impo 2f60: 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 rtant to return 2f70: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 an empty string 2f80: 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65 here because the 2f90: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2fa0: 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 69 73 result of this 2fb0: 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 20 62 procedure may b 2fc0: 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 69 6c e used with [fil 2fd0: 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 e join]... 2fe0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 2ff0: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d urn "".. }. 3000: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 3010: 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 roc getBuildConf 3020: 69 67 75 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a iguration {} {.. 3030: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 3040: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 NOTE: See if th 3050: 65 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e e "configuration 3060: 22 20 73 65 74 74 69 6e 67 20 68 61 73 20 62 65 " setting has be 3070: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 en overridden by 3080: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 3090: 20 20 20 20 75 73 65 72 20 28 65 2e 67 2e 20 6f user (e.g. o 30a0: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 n the command li 30b0: 6e 65 29 2e 20 20 54 68 69 73 20 68 65 6c 70 73 ne). This helps 30c0: 20 63 6f 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 control exactly 30d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 30e0: 77 68 69 63 68 20 73 65 74 20 6f 66 20 62 69 6e which set of bin 30f0: 61 72 69 65 73 20 77 65 20 61 72 65 20 74 65 73 aries we are tes 3100: 74 69 6e 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 ting (i.e. those 3110: 20 62 75 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 built in the.. 3120: 20 20 20 20 20 23 20 20 20 20 20 20 20 22 44 65 # "De 3130: 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 bug" or "Release 3140: 22 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 " build configur 3150: 61 74 69 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 ations). To ove 3160: 72 72 69 64 65 20 74 68 69 73 0d 0a 20 20 20 20 rride this.. 3170: 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 # value 3180: 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 via the command 3190: 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 63 6f line, enter a co 31a0: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f mmand similar to 31b0: 20 6f 6e 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 one of.. # 31c0: 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f the follo 31d0: 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 wing (all on one 31e0: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 line):.. # 31f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3200: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d EagleShell.exe - 3210: 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 anyInitialize "s 3220: 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 et test_configur 3230: 61 74 69 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 ation Debug".. 3240: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 3250: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 3260: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 3270: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3280: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d EagleShell.exe - 3290: 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 anyInitialize "s 32a0: 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 et test_configur 32b0: 61 74 69 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a ation Release".. 32c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 32d0: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 32e0: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 32f0: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 3300: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 3310: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f -file .\path\to 3320: 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 \all.eagle -preT 3330: 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 est.. # 3340: 20 20 20 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 "unset -noc 3350: 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e omplain test_con 3360: 66 69 67 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 figuration".. 3370: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 3380: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 3390: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 33a0: 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 n] && \.. 33b0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 33c0: 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 h$::test_config
33d0: 75 72 61 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68  uration] > 0} th
33e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
33f0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3400: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69   Use the specifi
3410: 65 64 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  ed test configur
3420: 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61  ation.  The defa
3430: 75 6c 74 20 76 61 6c 75 65 20 75 73 65 64 0d 0a  ult value used..
3440: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3450: 66 6f 72 20 74 68 69 73 20 76 61 72 69 61 62 6c  for this variabl
3460: 65 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 22  e is typically "
3470: 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73 65 74  Release", as set
3480: 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20   by the test..
3490: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75        #       su
34a0: 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20  ite itself...
34b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
34c0: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63  return $::test_c 34d0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 onfiguration.. 34e0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 34f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3500: 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c # NOTE: Normall 3510: 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 y, we will never 3520: 20 68 69 74 20 74 68 69 73 20 63 61 73 65 20 62 hit this case b 3530: 65 63 61 75 73 65 20 74 68 65 20 76 61 6c 75 65 ecause the value 3540: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 of the.. 3550: 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f # test co 3560: 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 72 69 nfiguration vari 3570: 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20 73 able is always s 3580: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 20 73 et by the test s 3590: 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 uite.. # 35a0: 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 68 6f itself; ho 35b0: 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 62 65 wever, it can be 35c0: 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e overridden usin 35d0: 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d g the unset comm 35e0: 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 and.. # 35f0: 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 from the -p 3600: 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f reTest option to 3610: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 3620: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3630: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 return$::e
3640: 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f  agle_platform(co
3650: 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20  nfiguration)..
3660: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
3670: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
3680: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  ldConfigurations
3690: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
36a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
36b0: 65 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66  e if the list of
36c0: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74   test configurat
36d0: 69 6f 6e 73 20 68 61 73 20 62 65 65 6e 20 6f 76  ions has been ov
36e0: 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 20 20  erridden by..
36f0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
3700: 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65  ser (e.g. on the
3710: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d   command line)..
3720: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3730: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
3740: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
3750: 61 74 69 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20  ations] && \..
3760: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68          [llength
3770: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu 3780: 72 61 74 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 rations] > 0} th 3790: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 37a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 37b0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 37c0: 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 ed list of test 37d0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d configurations.. 37e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 37f0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
3800: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
3810: 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  s..      } else
3820: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3830: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
3840: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69  e the default li
3850: 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69  st of test confi
3860: 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  gurations...
3870: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
3880: 65 74 75 72 6e 20 5b 6c 69 73 74 20 44 65 62 75  eturn [list Debu
3890: 67 20 52 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20  g Release]..
38a0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
38b0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
38c0: 42 61 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d  BaseDirectory {}
38d0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
38e0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72     # NOTE: Figur
38f0: 65 20 6f 75 74 20 74 68 65 20 62 61 73 65 20 64  e out the base d
3900: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 61  irectory where a
3910: 6c 6c 20 74 68 65 20 62 75 69 6c 64 73 20 73 68  ll the builds sh
3920: 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23  ould be..      #
3930: 20 20 20 20 20 20 20 6c 6f 63 61 74 65 64 2e 20         located.
3940: 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20 74 68   This will be th
3950: 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74  e directory that
3960: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 63   contains the ac
3970: 74 75 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20  tual..      #
3980: 20 20 20 20 62 75 69 6c 64 20 6f 75 74 70 75 74      build output
3990: 20 64 69 72 65 63 74 6f 72 79 20 28 65 2e 67 2e   directory (e.g.
39a0: 20 70 61 72 65 6e 74 20 6f 66 20 22 62 69 6e 22   parent of "bin"
39b0: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
39c0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
39d0: 73 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65  sts ::build_base
39e0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
39f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
3a00: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75  ing length $::bu 3a10: 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f ild_base_directo 3a20: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ry] > 0} then {. 3a30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3a40: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 3a50: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 3a60: 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 build base direc 3a70: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 tory has been ov 3a80: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 erridden;.. 3a90: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 # there 3aa0: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 fore, use it ver 3ab0: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 batim... 3ac0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 3ad0: 6e 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f n$::build_base_
3ae0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
3af0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f   } elseif {[info
3b00: 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e   exists ::common
3b10: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
3b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
3b30: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f  ing length $::co 3b40: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 3b50: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 3b60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3b70: 23 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 # NOTE: Next, fa 3b80: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 67 72 llback to the gr 3b90: 61 6e 64 70 61 72 65 6e 74 20 64 69 72 65 63 74 andparent direct 3ba0: 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e 65 0d 0a ory of the one.. 3bb0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 3bc0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 containing this 3bd0: 66 69 6c 65 20 28 69 2e 65 2e 20 22 63 6f 6d 6d file (i.e. "comm 3be0: 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 69 66 20 61 on.eagle"), if a 3bf0: 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 vailable... 3c00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 3c10: 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 turn [file dirna 3c20: 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname 3c30: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63$::common_direc
3c40: 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 20 20 7d 20  tory]]..      }
3c50: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
3c60: 69 73 74 73 20 3a 3a 70 61 74 68 5d 20 26 26 20  ists ::path] &&
3c70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
3c80: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 70  ring length $::p 3c90: 61 74 68 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ath] > 0} then { 3ca0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3cb0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e # NOTE: Fin 3cc0: 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63 6b 20 74 ally, fallback t 3cd0: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 69 72 o the parent dir 3ce0: 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 45 61 ectory of the Ea 3cf0: 67 6c 65 54 65 73 74 0d 0a 20 20 20 20 20 20 20 gleTest.. 3d00: 20 23 20 20 20 20 20 20 20 70 61 74 68 2e 20 20 # path. 3d10: 54 68 65 20 45 61 67 6c 65 54 65 73 74 20 70 61 The EagleTest pa 3d20: 63 6b 61 67 65 20 67 75 61 72 61 6e 74 65 65 73 ckage guarantees 3d30: 20 74 68 61 74 20 74 68 69 73 20 76 61 72 69 61 that this varia 3d40: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ble.. # 3d50: 20 20 20 20 20 77 69 6c 6c 20 62 65 20 73 65 74 will be set 3d60: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 3d70: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 3d80: 20 66 69 72 73 74 20 66 69 6c 65 20 74 6f 0d 0a first file to.. 3d90: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 3da0: 65 78 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e execute the [run 3db0: 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 TestPrologue] sc 3dc0: 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f ript library pro 3dd0: 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 cedure... 3de0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 3df0: 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 rn [file dirname 3e00: 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 20 20$::path]..
3e10: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
3e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
3e30: 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 68 20 69 73  NOTE: No path is
3e40: 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75   available, retu
3e50: 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  rn an empty stri
3e60: 6e 67 2e 20 20 54 68 69 73 20 70 6f 69 6e 74 0d  ng.  This point.
3e70: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
3e80: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 72   should not be r
3e90: 65 61 63 68 65 64 2e 0d 0a 20 20 20 20 20 20 20  eached...
3ea0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
3eb0: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn ""..      }..
3ec0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
3ed0: 6f 63 20 67 65 74 53 51 4c 69 74 65 54 65 73 74  oc getSQLiteTest
3ee0: 44 61 74 61 50 61 74 68 20 7b 7d 20 7b 0d 0a 20  DataPath {} {..
3ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
3f00: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
3f10: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77   the directory w
3f20: 68 65 72 65 20 61 6c 6c 20 74 68 65 20 74 65 73  here all the tes
3f30: 74 20 64 61 74 61 20 66 69 6c 65 73 20 73 68 6f  t data files sho
3f40: 75 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  uld..      #
3f50: 20 20 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20     be located.
3f60: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 74  This should be t
3f70: 68 65 20 22 64 61 74 61 22 20 64 69 72 65 63 74  he "data" direct
3f80: 6f 72 79 20 62 65 6e 65 61 74 68 20 74 68 65 0d  ory beneath the.
3f90: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
3fa0: 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e  irectory contain
3fb0: 69 6e 67 20 74 68 65 20 61 63 74 75 61 6c 20 74  ing the actual t
3fc0: 65 73 74 20 73 63 72 69 70 74 73 2e 0d 0a 20 20  est scripts...
3fd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
3fe0: 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  urn [file join $3ff0: 3a 3a 70 61 74 68 20 64 61 74 61 5d 0d 0a 20 20 ::path data].. 4000: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 4010: 20 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 20 isRunningWoW64 4020: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 4030: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 4040: 20 6e 6f 77 2c 20 6a 75 73 74 20 75 73 65 20 74 now, just use t 4050: 68 65 20 65 78 69 73 74 69 6e 67 20 74 65 73 74 he existing test 4060: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 constraint for 4070: 64 65 74 65 63 74 69 6e 67 0d 0a 20 20 20 20 20 detecting.. 4080: 20 23 20 20 20 20 20 20 20 61 20 57 6f 57 36 34 # a WoW64 4090: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 process... 40a0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 40b0: 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 [haveConstraint 40c0: 20 77 6f 77 36 34 5d 0d 0a 20 20 20 20 7d 0d 0a wow64].. }.. 40d0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 69 ... proc isMi 40e0: 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 xedModeAssembly 40f0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e { fileName {varN 4100: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 ame ""} } {.. 4110: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4120: 54 45 3a 20 46 69 72 73 74 2c 20 6d 61 6b 65 20 TE: First, make 4130: 73 75 72 65 20 74 68 65 20 74 65 73 74 20 73 75 sure the test su 4140: 69 74 65 20 69 6e 66 72 61 73 74 72 75 63 74 75 ite infrastructu 4150: 72 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f re is allowed to 4160: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 4170: 75 73 65 20 74 68 65 20 5b 65 78 65 63 5d 20 63 use the [exec] c 4180: 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 20 23 ommand... # 4190: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e .. if {![in 41a0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 41b0: 78 65 63 29 5d 20 26 26 20 21 5b 69 6e 66 6f 20 xec)] && ![info 41c0: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 exists ::no(corF 41d0: 6c 61 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a lags)]} then {.. 41e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 41f0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 4200: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 43 6f e location of Co 4210: 72 46 6c 61 67 73 20 69 73 20 70 72 65 73 65 6e rFlags is presen 4220: 74 20 69 6e 20 74 68 65 20 65 6e 76 69 72 6f 6e t in the environ 4230: 6d 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 ment,.. # 4240: 20 20 20 20 20 20 20 75 73 65 20 69 74 3b 20 6f use it; o 4250: 74 68 65 72 77 69 73 65 20 61 73 73 75 6d 65 20 therwise assume 4260: 69 74 20 69 73 20 69 6e 20 74 68 65 20 50 41 54 it is in the PAT 4270: 48 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 H... #.. 4280: 20 20 20 20 20 20 20 73 65 74 20 63 6f 72 46 6c set corFl 4290: 61 67 73 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 ags [expr {.. 42a0: 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 [info exi 42b0: 73 74 73 20 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 sts ::env(CorFla 42c0: 67 73 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 43 6f gs)] ?$::env(Co
42d0: 72 46 6c 61 67 73 29 20 3a 20 22 43 6f 72 46 6c  rFlags) : "CorFl
42e0: 61 67 73 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d  ags"..        }]
42f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
4300: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
4310: 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74  ttempt to execut
4320: 65 20 43 6f 72 46 6c 61 67 73 20 6f 6e 20 74 68  e CorFlags on th
4330: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65  e specified file
4340: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
4350: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
4360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 78   {..          ex
4370: 65 63 20 2d 2d 20 24 63 6f 72 46 6c 61 67 73 20  ec -- $corFlags 4380: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 4390: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
43a0: 20 20 20 20 20 7d 20 65 78 65 63 5d 20 3d 3d 20       } exec] ==
43b0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
43c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
43d0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71    # NOTE: If req
43e0: 75 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 61  uested by our ca
43f0: 6c 6c 65 72 2c 20 61 74 74 65 6d 70 74 20 74 6f  ller, attempt to
4400: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 0d 0a   determine the..
4410: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
4420: 20 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74    platform for t
4430: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c  he specified fil
4440: 65 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20 20  e as well...
4450: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4460: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
4470: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20  ength $varName] 4480: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 4490: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 44a0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 44b0: 53 74 6f 72 65 20 74 68 65 20 70 6c 61 74 66 6f Store the platfo 44c0: 72 6d 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 rm in the named 44d0: 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68 65 0d variable in the. 44e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # 44f0: 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 context of 4500: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 4510: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4520: 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 upvar 1 4530: 24 76 61 72 4e 61 6d 65 20 70 6c 61 74 66 6f 72$varName platfor
4540: 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  m....
4550: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
4560: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
4570: 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 20 50  to extract the P
4580: 45 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  E line from the
4590: 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20  captured..
45a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 75        #       ou
45b0: 74 70 75 74 2e 20 20 49 66 20 74 68 69 73 20 76  tput.  If this v
45c0: 61 6c 75 65 20 69 73 20 22 50 45 33 32 22 20 6f  alue is "PE32" o
45d0: 72 20 22 50 45 33 32 2b 22 2c 20 74 68 65 0d 0a  r "PE32+", the..
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
45f0: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66 69 6c      assembly fil
4600: 65 20 69 73 20 33 32 2d 62 69 74 20 6f 72 20 36  e is 32-bit or 6
4610: 34 2d 62 69 74 2c 20 72 65 73 70 65 63 74 69 76  4-bit, respectiv
4620: 65 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ely;..
4630: 20 20 23 20 20 20 20 20 20 20 6f 74 68 65 72 77    #       otherw
4640: 69 73 65 2c 20 69 74 73 20 74 79 70 65 20 69 73  ise, its type is
4650: 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20   unknown...
4660: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4670: 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72        set patter
4680: 6e 20 7b 5e 50 45 20 20 20 20 20 20 20 20 3a 20  n {^PE        :
4690: 28 50 45 33 32 7c 50 45 33 32 5c 2b 29 5c 73 2b  (PE32|PE32\+)\s+
46a0: 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  $}.... 46b0: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 6c if {[regexp -l 46c0: 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 ine --$pattern
46d0: 24 65 78 65 63 20 64 75 6d 6d 79 20 70 65 33 32  $exec dummy pe32 46e0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 46f0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4700: 20 20 20 20 20 20 20 20 20 20 23 20 48 41 43 4b # HACK 4710: 3a 20 54 68 69 73 20 5b 73 77 69 74 63 68 5d 20 : This [switch] 4720: 61 73 73 75 6d 65 73 20 74 68 61 74 20 33 32 2d assumes that 32- 4730: 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 bit executables 4740: 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 are.. 4750: 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 # alway 4760: 73 20 78 38 36 20 61 6e 64 20 74 68 61 74 20 36 s x86 and that 6 4770: 34 2d 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 4-bit executable 4780: 73 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 s are always.. 4790: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 47a0: 20 20 20 20 78 36 34 2e 0d 0a 20 20 20 20 20 20 x64... 47b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 47c0: 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 switch 47d0: 2d 65 78 61 63 74 20 2d 2d 20 24 70 65 33 32 20 -exact --$pe32
47e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
47f0: 20 20 20 50 45 33 32 20 7b 0d 0a 20 20 20 20 20     PE32 {..
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
4810: 20 70 6c 61 74 66 6f 72 6d 20 57 69 6e 33 32 0d   platform Win32.
4820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
4830: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
4840: 20 20 20 20 50 45 33 32 2b 20 7b 0d 0a 20 20 20      PE32+ {..
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4860: 65 74 20 70 6c 61 74 66 6f 72 6d 20 78 36 34 0d  et platform x64.
4870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
4880: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
4890: 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20      default {..
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
48b0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22   set platform ""
48c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
48d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
48e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
48f0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
4900: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c            set pl
4910: 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20  atform ""..
4920: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
4930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
4940: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
4950: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
4960: 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 20 49  to extract the I
4970: 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 72 6f 6d 20  LONLY line from
4980: 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20  the captured..
4990: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
49a0: 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 69 73  output.  If this
49b0: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20   value is zero,
49c0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
49d0: 6c 65 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  le must..
49e0: 20 20 20 23 20 20 20 20 20 20 20 62 65 20 61 20     #       be a
49f0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
4a00: 62 6c 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  bly; otherwise,
4a10: 69 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79  it contains only
4a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
4a30: 20 20 20 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70      managed comp
4a40: 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20  onents...
4a50: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
4a60: 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e 49 4c  set pattern {^IL
4a70: 4f 4e 4c 59 20 20 20 20 3a 20 28 30 7c 31 29 5c  ONLY    : (0|1)\
4a80: 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s+$}.... 4a90: 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20 2d if {![regexp - 4aa0: 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 6e line --$pattern
4ab0: 20 24 65 78 65 63 20 64 75 6d 6d 79 20 69 6c 4f   $exec dummy ilO 4ac0: 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 nly]} then {.. 4ad0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 4ae0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 false.. 4af0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 4b00: 20 69 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 if {!$ilOnly} t
4b10: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
4b20: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
4b30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
4b40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
4b50: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
4b60: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
4b70: 20 74 65 73 74 20 73 75 69 74 65 20 63 61 6e 6e   test suite cann
4b80: 6f 74 20 75 73 65 20 5b 65 78 65 63 5d 20 6f 72  ot use [exec] or
4b90: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 43 6f   execution of Co
4ba0: 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 23 20  rFlags..      #
4bb0: 20 20 20 20 20 20 66 61 69 6c 65 64 2c 20 72 65        failed, re
4bc0: 74 75 72 6e 20 66 61 6c 73 65 2e 0d 0a 20 20 20  turn false...
4bd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
4be0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d  rn false..    }.
4bf0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
4c00: 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
4c10: 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d  eNamesOnly {} {.
4c20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4c30: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63  # NOTE: First, c
4c40: 68 65 63 6b 20 69 66 20 74 68 65 20 6c 69 73 74  heck if the list
4c50: 20 6f 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61   of native libra
4c60: 72 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61  ry file names ha
4c70: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20  s been..      #
4c80: 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f        manually o
4c90: 76 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20  verridden...
4ca0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
4cb0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 61  info exists ::na
4cc0: 74 69 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c  tive_library_fil
4cd0: 65 5f 6e 61 6d 65 73 5d 20 26 26 20 5c 0d 0a 20  e_names] && \..
4ce0: 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74           [llengt
4cf0: 68 20 24 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72  h $::native_libr 4d00: 61 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 ary_file_names] 4d10: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 4d20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4d30: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 69 73 74 # NOTE: The list 4d40: 20 6f 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61 of native libra 4d50: 72 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 ry file names ha 4d60: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 s been overridde 4d70: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 n;.. # 4d80: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 therefore, u 4d90: 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d se it verbatim.. 4da0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 4db0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 6e 61 return$::na
4dc0: 74 69 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c  tive_library_fil
4dd0: 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d  e_names..      }
4de0: 20 65 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64   elseif {[isWind
4df0: 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ows]} then {..
4e00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4e10: 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69   # NOTE: Otherwi
4e20: 73 65 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20  se, on Windows,
4e30: 61 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64  always use the d
4e40: 65 66 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65  efault file name
4e50: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4e60: 20 20 22 73 71 6c 69 74 65 33 2e 64 6c 6c 22 2e    "sqlite3.dll".
4e70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4e80: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
4e90: 74 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 0d 0a  t sqlite3.dll]..
4ea0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
4eb0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4ec0: 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72     # NOTE: Other
4ed0: 77 69 73 65 2c 20 72 65 74 75 72 6e 20 62 6f 74  wise, return bot
4ee0: 68 20 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f  h the generic PO
4ef0: 53 49 58 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e  SIX file name an
4f00: 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  d the..        #
4f10: 20 20 20 20 20 20 20 4d 61 63 20 4f 53 20 58 20         Mac OS X
4f20: 66 69 6c 65 20 6e 61 6d 65 2c 20 73 69 6e 63 65  file name, since
4f30: 20 77 65 20 64 6f 20 6e 6f 74 20 63 75 72 72 65   we do not curre
4f40: 6e 74 6c 79 20 68 61 76 65 20 61 6e 20 65 61 73  ntly have an eas
4f50: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
4f60: 20 20 20 77 61 79 20 74 6f 20 64 65 74 65 63 74     way to detect
4f70: 20 77 68 69 63 68 20 6f 66 20 74 68 6f 73 65 20   which of those
4f80: 70 6c 61 74 66 6f 72 6d 73 20 77 65 20 61 72 65  platforms we are
4f90: 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20   running on...
4fa0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4fb0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69   return [list li
4fc0: 62 73 71 6c 69 74 65 33 2e 64 79 6c 69 62 20 6c  bsqlite3.dylib l
4fd0: 69 62 73 71 6c 69 74 65 33 2e 73 6f 5d 0d 0a 20  ibsqlite3.so]..
4fe0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
4ff0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 49 6e  ..    proc getIn
5000: 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c  teropAssemblyFil
5010: 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d  eNamesOnly {} {.
5020: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
5030: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63  # NOTE: First, c
5040: 68 65 63 6b 20 69 66 20 74 68 65 20 6c 69 73 74  heck if the list
5050: 20 6f 66 20 69 6e 74 65 72 6f 70 20 61 73 73 65   of interop asse
5060: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 20  mbly file names
5070: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20  has been..
5080: 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79  #       manually
5090: 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20   overridden...
50a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
50b0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
50c0: 69 6e 74 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79  interop_assembly
50d0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20  _file_names] &&
50e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c  \..          [ll
50f0: 65 6e 67 74 68 20 24 3a 3a 69 6e 74 65 72 6f 70  ength $::interop 5100: 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e _assembly_file_n 5110: 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ames] > 0} then 5120: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 5130: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 5140: 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f e list of intero 5150: 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 p assembly file 5160: 6e 61 6d 65 73 20 68 61 73 20 62 65 65 6e 20 6f names has been o 5170: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 verridden;.. 5180: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 # ther 5190: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 efore, use it ve 51a0: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 rbatim... 51b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 51c0: 72 6e 20 24 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 rn$::interop_as
51d0: 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65  sembly_file_name
51e0: 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  s..      } elsei
51f0: 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 20  f {[isWindows]}
5200: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
5210: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
5220: 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20 6f 6e  E: Otherwise, on
5230: 20 57 69 6e 64 6f 77 73 2c 20 61 6c 77 61 79 73   Windows, always
5240: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
5250: 20 66 69 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20   file name..
5260: 20 20 20 20 23 20 20 20 20 20 20 20 22 53 51 4c      #       "SQL
5270: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22  ite.Interop.dll"
5280: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
5290: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
52a0: 73 74 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  st SQLite.Intero
52b0: 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 7d 20  p.dll]..      }
52c0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
52d0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
52e0: 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 65  E: Otherwise, re
52f0: 74 75 72 6e 20 62 6f 74 68 20 74 68 65 20 67 65  turn both the ge
5300: 6e 65 72 69 63 20 50 4f 53 49 58 20 66 69 6c 65  neric POSIX file
5310: 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 0d 0a 20   name and the..
5320: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4d         #       M
5330: 61 63 20 4f 53 20 58 20 66 69 6c 65 20 6e 61 6d  ac OS X file nam
5340: 65 2c 20 73 69 6e 63 65 20 77 65 20 64 6f 20 6e  e, since we do n
5350: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76  ot currently hav
5360: 65 20 61 6e 20 65 61 73 79 0d 0a 20 20 20 20 20  e an easy..
5370: 20 20 20 23 20 20 20 20 20 20 20 77 61 79 20 74     #       way t
5380: 6f 20 64 65 74 65 63 74 20 77 68 69 63 68 20 6f  o detect which o
5390: 66 20 74 68 6f 73 65 20 70 6c 61 74 66 6f 72 6d  f those platform
53a0: 73 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  s we are running
53b0: 20 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   on...        #.
53c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
53d0: 5b 6c 69 73 74 20 6c 69 62 53 51 4c 69 74 65 2e  [list libSQLite.
53e0: 49 6e 74 65 72 6f 70 2e 64 79 6c 69 62 20 6c 69  Interop.dylib li
53f0: 62 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e  bSQLite.Interop.
5400: 73 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  so]..      }..
5410: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5420: 20 67 65 74 43 6f 72 65 45 78 74 65 6e 73 69 6f   getCoreExtensio
5430: 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  nBinaryFileName
5440: 7b 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d  { {default ""} }
5450: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69   {..      set fi
5460: 6c 65 4e 61 6d 65 20 5b 67 65 74 43 6f 72 65 42  leName [getCoreB
5470: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d 0d 0a  inaryFileName]..
5480: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c  ..      if {[fil
5490: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa 54a0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 54b0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c return$fil
54c0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  eName..      }..
54d0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $54e0: 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a default.. }.. 54f0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 42 75 ... proc isBu 5500: 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e ildAvailable { n 5510: 61 74 69 76 65 20 64 69 72 65 63 74 6f 72 79 20 ative directory 5520: 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b {varName ""} } { 5530: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5540: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 5550: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 he fully qualifi 5560: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 ed file name for 5570: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 the primary ass 5580: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 embly.. # 5590: 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 containing 55a0: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. 55b0: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 63 SQLite managed c 55c0: 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a omponents. It.. 55d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 # sh 55e0: 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 74 68 ould be noted th 55f0: 61 74 20 74 68 69 73 20 61 73 73 65 6d 62 6c 79 at this assembly 5600: 20 66 69 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 file may also c 5610: 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 ontain the.. 5620: 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 # native 5630: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 components, if 5640: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 69 a native build i 5650: 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 s in use... 5660: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 #.. set fi 5670: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 leName [file nat 5680: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 5690: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d in$directory \.
56a0: 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65  .          Syste
56b0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
56c0: 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  l]]....      if
56d0: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $56e0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 56f0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 5700: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d n false.. } 5710: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 5720: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 5730: 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 pt to automatica 5740: 6c 6c 79 20 64 65 74 65 63 74 20 69 66 20 74 68 lly detect if th 5750: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 e primary assemb 5760: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 5770: 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e contains any n 5780: 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 ative components 5790: 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d , if necessary.. 57a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 57b0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 57c0: 74 68 20 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 th$native] == 0
57d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
57e0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
57f0: 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e  ngth $varName] > 5800: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 5810: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
5820: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d  arName $varName. 5830: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 5840: 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 set native 5850: 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 [isMixedModeAss 5860: 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
5870: 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  $varName].. 5880: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 5890: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 58a0: 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 the primary asse 58b0: 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 mbly also contai 58c0: 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f ns the native co 58d0: 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 mponents,.. 58e0: 20 23 20 20 20 20 20 20 20 77 65 20 68 61 76 65 # we have 58f0: 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e everything we n 5900: 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 eed... #.. 5910: 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 if {$native
5920: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5930: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
5940: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5950: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5960: 20 49 66 20 74 68 65 20 6d 61 63 68 69 6e 65 20   If the machine
5970: 6e 61 6d 65 20 69 73 20 75 6e 61 76 61 69 6c 61  name is unavaila
5980: 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ble, there is no
5990: 74 68 69 67 6e 20 65 6c 73 65 20 77 65 0d 0a 20  thign else we..
59a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e       #       can
59b0: 20 64 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20   do...      #..
59c0: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
59d0: 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61  exists ::tcl_pla
59e0: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d  tform(machine)]}
59f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5a00: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
5a10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5a20: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5a30: 20 57 68 61 74 20 69 73 20 74 68 65 20 61 72 63   What is the arc
5a40: 68 69 74 65 63 74 75 72 65 20 66 6f 72 20 74 68  hitecture for th
5a50: 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20  is machine?..
5a60: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
5a70: 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 6d 61  architecture [ma
5a80: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20  chineToPlatform
5a90: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( 5aa0: 6d 61 63 68 69 6e 65 29 20 74 72 75 65 5d 0d 0a machine) true].. 5ab0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5ac0: 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 # NOTE: What is 5ad0: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 66 6f the platform fo 5ae0: 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d r this machine?. 5af0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5b00: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d 61 set platform [ma 5b10: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 chineToPlatform 5b20: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28$::tcl_platform(
5b30: 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20 20  machine)]....
5b40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
5b50: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
5b60: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
5b70: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the
5b80: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
5b90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5ba0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
5bb0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
5bc0: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  e native compone
5bd0: 6e 74 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  nts.  If this..
5be0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
5bf0: 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f  e exists, we sho
5c00: 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 74 68  uld have everyth
5c10: 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20  ing we need...
5c20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72      #..      for
5c30: 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  each fileNameOnl
5c40: 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73  y [getInteropAss
5c50: 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e  emblyFileNamesOn
5c60: 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  ly] {..        s
5c70: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
5c80: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
5c90: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f  le join $directo 5ca0: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 5cb0: 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20$architecture
5cc0: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d  $fileNameOnly]]. 5cd0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 5ce0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
5cf0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
5d00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5d10: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d   true..        }
5d20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
5d30: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
5d40: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
5d50: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20  join $directory 5d60: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
5d70: 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61  platform $fileNa 5d80: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 5d90: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 5da0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
5db0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5dc0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
5dd0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
5de0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5df0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
5e00: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 5e10: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 5e20: 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
5e30: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
5e40: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
5e50: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 5e60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 5e70: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 5e80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 5e90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 5ea0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 5eb0: 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c d the fully qual 5ec0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 ified file name 5ed0: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 63 for the SQLite c 5ee0: 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ore.. # 5ef0: 20 20 20 6c 69 62 72 61 72 79 2e 20 20 49 66 20 library. If 5f00: 74 68 69 73 20 66 69 6c 65 20 65 78 69 73 74 73 this file exists 5f10: 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 , we should have 5f20: 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 0d 0a everything we.. 5f30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 # ne 5f40: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 5f50: 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 5f60: 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 NameOnly [getNat 5f70: 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 iveLibraryFileNa 5f80: 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 mesOnly] {.. 5f90: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 5fa0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 5fb0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 e [file join$di
5fc0: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
5fd0: 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63         $architec 5fe0: 74 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e ture$fileNameOn
5ff0: 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ly]]....
6000: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
6010: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 6020: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 n {.. r 6030: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 6040: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 6050: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 set fileName [f 6060: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 6070: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 file join$direc
6080: 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  tory \..
6090: 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66      $platform$f
60a0: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d  ileNameOnly]]...
60b0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69  .        if {[fi
60c0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 60d0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 60e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 60f0: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a rue.. }.. 6100: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 .. set fi 6110: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 leName [file nat 6120: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 6130: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d in$directory \.
6140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69  .            $fi 6150: 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a leNameOnly]].... 6160: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c if {[fil 6170: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
6180: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
6190: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
61a0: 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  ue..        }..
61b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
61c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
61d0: 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74   One or more nat
61e0: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e  ive components n
61f0: 65 65 64 65 64 20 62 79 20 53 79 73 74 65 6d 2e  eeded by System.
6200: 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20  Data.SQLite..
6210: 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 6d     #       are m
6220: 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23  issing...      #
6230: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
6240: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alse..    }.....
6250: 20 20 20 20 70 72 6f 63 20 69 73 52 65 6c 65 61      proc isRelea
6260: 73 65 41 76 61 69 6c 61 62 6c 65 20 7b 20 64 69  seAvailable { di
6270: 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65  rectory {varName
6280: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
6290: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
62a0: 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30  th $varName] > 0 62b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 62c0: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
62d0: 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20  me $varName.. 62e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 62f0: 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 41 76 61 turn [isBuildAva 6300: 69 6c 61 62 6c 65 20 22 22 20 24 64 69 72 65 63 ilable ""$direc
6310: 74 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a  tory $varName].. 6320: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 6330: 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 oc joinBuildDire 6340: 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 20 70 ctory { native p 6350: 61 74 68 20 79 65 61 72 20 70 6c 61 74 66 6f 72 ath year platfor 6360: 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 m configuration 6370: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 6380: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 # NOTE: Figu 6390: 72 65 20 6f 75 74 20 61 6e 64 20 74 68 65 6e 20 re out and then 63a0: 72 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 79 return the fully 63b0: 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68 20 qualified path 63c0: 74 6f 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 to the build.. 63d0: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 63e0: 63 74 6f 72 79 20 62 61 73 65 64 20 6f 6e 20 61 ctory based on a 63f0: 6c 6c 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 ll the arguments 6400: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our 6410: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... 6420: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 #.. if {$na
6430: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  tive} then {..
6440: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
6450: 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69  le join $path bi 6460: 6e 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 n$year $platfor 6470: 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e m$configuration
6480: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
6490: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
64a0: 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61  n [file join $pa 64b0: 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 63 6f th bin$year $co 64c0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 69 6e 5d nfiguration bin] 64d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 64e0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 64f0: 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 tBuildDirectory 6500: 7b 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7d 20 { managedOnly } 6510: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 6520: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 # NOTE: See if 6530: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 6540: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 ntime option has 6550: 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 been set. If s 6560: 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 o, use the.. 6570: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 6580: 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 ory for the mixe 6590: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 65a0: 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 (a.k.a. the nati 65b0: 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 ve interop.. 65c0: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 65d0: 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 ly). To enable 65e0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 65f0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 6600: 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 , enter a.. 6610: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 # command 6620: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 similar to one 6630: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 of the following 6640: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 6650: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 6660: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 6670: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 eShell.exe -init 6680: 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f ialize -runtimeO 6690: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 ption native.. 66a0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 66b0: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 66c0: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 66d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 66e0: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f To enable this o 66f0: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f ption via the co 6700: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 mmand line prior 6710: 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 to the "beta 16 6720: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 6730: 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c release of Eagl 6740: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 e, the following 6750: 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 command must be 6760: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 used instead.. 6770: 20 20 20 20 20 23 20 20 20 20 20 20 20 28 61 6c # (al 6780: 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 so all on one li 6790: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 67a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 67b0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 leShell.exe -ini 67c0: 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 tialize -postIni 67d0: 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 tialize.. # 67e0: 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 "object 67f0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 invoke Interpre 6800: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 ter.GetActive Ad 6810: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e dRuntimeOption n 6820: 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 ative".. # 6830: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c -file .\ 6840: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c path\to\all.eagl 6850: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 e.. #.. 6860: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 6870: 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 ts ::build_direc 6880: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 6890: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 68a0: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 ngth$::build_di
68b0: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
68c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
68d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
68e0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
68f0: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
6900: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
6910: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
6920: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
6930: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
6940: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
6950: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
6960: 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  n $::build_direc 6970: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 6980: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 6990: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 69a0: 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 If the "native" 69b0: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 runtime option 69c0: 69 73 20 73 65 74 2c 20 74 68 65 20 6d 69 78 65 is set, the mixe 69d0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d d-mode assembly. 69e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 69f0: 20 69 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 is being tested 6a00: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c . In that case, 6a10: 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 the path to the 6a20: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 6a30: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6a40: 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 will contain t 6a50: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 he platform name 6a60: 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 62 69 6e and all the bin 6a70: 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 aries under test 6a80: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6a90: 20 20 73 68 6f 75 6c 64 20 62 65 20 70 72 65 73 should be pres 6aa0: 65 6e 74 20 69 6e 20 74 68 61 74 20 64 69 72 65 ent in that dire 6ab0: 63 74 6f 72 79 2e 20 20 49 66 20 74 68 65 20 22 ctory. If the " 6ac0: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 0d native" runtime. 6ad0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6ae0: 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 option is not s 6af0: 65 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 et, the build di 6b00: 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 rectory will be 6b10: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 considered to be 6b20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6b30: 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 "platform-neut 6b40: 72 61 6c 22 2c 20 77 69 74 68 20 74 68 65 20 6e ral", with the n 6b50: 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69 6f 6e otable exception 6b60: 20 6f 66 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a of any native.. 6b70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6b80: 61 73 73 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 assembly (e.g. " 6b90: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 SQLite.Interop.d 6ba0: 6c 6c 22 29 20 63 6f 70 69 65 64 20 74 68 65 72 ll") copied ther 6bb0: 65 20 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 e during the.. 6bc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu 6bd0: 69 6c 64 20 70 72 6f 63 65 73 73 20 69 74 73 65 ild process itse 6be0: 6c 66 2e 20 20 49 66 20 74 68 65 20 62 75 69 6c lf. If the buil 6bf0: 64 20 70 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f d process someho 6c00: 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 w does not.. 6c10: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 # copy 6c20: 20 74 68 65 20 6e 61 74 69 76 65 20 61 73 73 65 the native asse 6c30: 6d 62 6c 79 20 66 6f 72 20 74 68 69 73 20 70 6c mbly for this pl 6c40: 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 atform, most of 6c50: 74 68 65 20 74 65 73 74 73 0d 0a 20 20 20 20 20 the tests.. 6c60: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 # in th 6c70: 65 20 73 75 69 74 65 20 77 69 6c 6c 20 73 69 6d e suite will sim 6c80: 70 6c 79 20 62 65 20 73 6b 69 70 70 65 64 2e 20 ply be skipped. 6c90: 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b Generally speak 6ca0: 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 ing, there.. 6cb0: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 # are 6cc0: 74 77 6f 20 77 61 79 73 20 74 6f 20 62 75 69 6c two ways to buil 6cd0: 64 20 74 68 65 20 62 69 6e 61 72 69 65 73 20 77 d the binaries w 6ce0: 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 74 6f hen preparing to 6cf0: 20 72 75 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 run the.. 6d00: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 6d10: 75 69 74 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 uite:.. # 6d20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6d30: 20 20 31 2e 20 42 75 69 6c 64 20 74 68 65 20 73 1. Build the s 6d40: 65 70 61 72 61 74 65 20 6d 61 6e 61 67 65 64 20 eparate managed 6d50: 61 6e 64 20 6e 61 74 69 76 65 20 61 73 73 65 6d and native assem 6d60: 62 6c 69 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 blies using some 6d70: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6d80: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 commands si 6d90: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 milar to:.. 6da0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 6db0: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 build.b 6dc0: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 at${Configurati
6dd0: 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24  on}ManagedOnly $6de0: 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 {Platform}.. 6df0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 6e00: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
6e10: 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f  guration}NativeO
6e20: 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d  nly ${Platform}. 6e30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6e40: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57 # W 6e50: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 here${Configura
6e60: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20  tion} is either
6e70: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65  "Debug" or "Rele
6e80: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20  ase" and..
6e90: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50    #          ${P 6ea0: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 latform} is eith 6eb0: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 er "Win32" or "x 6ec0: 36 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 64"... #. 6ed0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6ee0: 20 32 2e 20 42 75 69 6c 64 20 74 68 65 20 6d 69 2. Build the mi 6ef0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 6f00: 79 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e y using a comman 6f10: 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 d similar to:.. 6f20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6f30: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 # bui 6f40: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 ld.bat${Configu
6f50: 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f  ration} ${Platfo 6f60: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rm}.. #.. 6f70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6f80: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 Where${Confi
6f90: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74  guration} is eit
6fa0: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22  her "Debug" or "
6fb0: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20  Release" and..
6fc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
6fd0: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20   ${Platform} is 6fe0: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f either "Win32" o 6ff0: 72 20 22 78 36 34 22 2e 20 20 49 66 20 74 68 69 r "x64". If thi 7000: 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 s command is.. 7010: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 7020: 20 75 73 65 64 2c 20 76 61 72 69 6f 75 73 20 74 used, various t 7030: 65 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72 ests that requir 7040: 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 e supplementary 7050: 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 managed.. 7060: 20 23 20 20 20 20 20 20 20 20 20 20 61 73 73 65 # asse 7070: 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e mblies (e.g. LIN 7080: 51 29 20 6d 61 79 20 62 65 20 73 6b 69 70 70 65 Q) may be skippe 7090: 64 20 75 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 d unless those b 70a0: 69 6e 61 72 69 65 73 0d 0a 20 20 20 20 20 20 20 inaries.. 70b0: 20 23 20 20 20 20 20 20 20 20 20 20 61 72 65 20 # are 70c0: 73 75 62 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 subsequently cop 70d0: 69 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 ied into the cor 70e0: 72 65 63 74 20 64 69 72 65 63 74 6f 72 79 20 28 rect directory ( 70f0: 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 i.e. by.. 7100: 20 23 20 20 20 20 20 20 20 20 20 20 22 74 65 73 # "tes 7110: 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 t_all.bat")... 7120: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7130: 20 23 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68 # Note th 7140: 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 at all of the bu 7150: 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f ild commands abo 7160: 76 65 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 ve will default 7170: 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 to using.. 7180: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c 61 # the la 7190: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 test version of 71a0: 4d 53 42 75 69 6c 64 20 61 76 61 69 6c 61 62 6c MSBuild availabl 71b0: 65 20 61 6e 64 20 74 68 65 20 22 74 65 73 74 5f e and the "test_ 71c0: 79 65 61 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 year" may.. 71d0: 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 64 20 # need 71e0: 74 6f 20 62 65 20 61 64 6a 75 73 74 65 64 20 61 to be adjusted a 71f0: 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 ccordingly to ac 7200: 74 75 61 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 tually run the t 7210: 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 est suite... 7220: 20 20 20 20 23 20 20 20 20 20 20 20 52 65 66 65 # Refe 7230: 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 r to the comment 7240: 73 20 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 s in [getBuildYe 7250: 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 ar] for more inf 7260: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 ormation on.. 7270: 20 20 20 20 20 23 20 20 20 20 20 20 20 68 6f 77 # how 7280: 20 74 6f 20 73 65 74 20 74 68 69 73 20 76 61 72 to set this var 7290: 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 iable... 72a0: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e #.. set n 72b0: 61 74 69 76 65 20 5b 65 78 70 72 20 7b 21 24 6d ative [expr {!$m
72c0: 61 6e 61 67 65 64 4f 6e 6c 79 20 26 26 20 5b 68  anagedOnly && [h
72d0: 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  asRuntimeOption
72e0: 6e 61 74 69 76 65 5d 7d 5d 0d 0a 0d 0a 20 20 20  native]}]....
72f0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69       return [joi
7300: 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20  nBuildDirectory
7310: 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75 69 6c  $native [getBuil 7320: 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 dBaseDirectory] 7330: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 7340: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 getBuildYear] [g 7350: 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 etBuildPlatform 7360: 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42 75 69$native] [getBui
7370: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d  ldConfiguration]
7380: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
7390: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
73a0: 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e  etReleaseVersion
73b0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
73c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
73d0: 67 75 72 65 20 6f 75 74 20 74 68 65 20 72 65 6c  gure out the rel
73e0: 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66 6f 72  ease version for
73f0: 20 75 73 65 20 77 69 74 68 20 74 68 65 20 62 75   use with the bu
7400: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  ild directory..
7410: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65       #       whe
7420: 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 61  n checking for a
7430: 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61 73 65  vailable release
7440: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
7450: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
7460: 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f 76 65  sts ::release_ve
7470: 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20  rsion] && \..
7480: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
7490: 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61 73 65  ength $::release 74a0: 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 _version] > 0} t 74b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 74c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 74d0: 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20 76 65 : The release ve 74e0: 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f rsion has been o 74f0: 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65 72 65 verridden; there 7500: 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a 20 20 fore, use it.. 7510: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 65 # ve 7520: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 rbatim... 7530: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 7540: 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 rn$::release_ve
7550: 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65  rsion..      } e
7560: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
7570: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
7580: 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76 65 72  : No release ver
7590: 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  sion is availabl
75a0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
75b0: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  ty string...
75c0: 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20 69      #       It i
75d0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72  s important to r
75e0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73  eturn an empty s
75f0: 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 75  tring here becau
7600: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..
7610: 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f  #       result o
7620: 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
7630: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74   may be used wit
7640: 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a  h [file join]...
7650: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7660: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
7670: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
7680: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
7690: 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c  ldFileName { fil
76a0: 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c  eName managedOnl
76b0: 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  y {platform ""}
76c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
76d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
76e0: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rns the specifie
76f0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69  d file name as i
7700: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65  f it were locate
7710: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
7720: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 64 69  #       build di
7730: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64  rectory, discard
7740: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72  ing any director
7750: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72  y information pr
7760: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  esent..      #
7770: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65       in the file
7780: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65   name as provide
7790: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
77a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
77b0: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 69 6c   set result [fil
77c0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a  e nativename \..
77d0: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
77e0: 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69  join [getBuildDi
77f0: 72 65 63 74 6f 72 79 20 24 6d 61 6e 61 67 65 64  rectory $managed 7800: 4f 6e 6c 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 Only]$platform
7810: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
7820: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d  le tail $fileNam 7830: 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e]]].... #. 7840: 0a 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 57 . # HACK: W 7850: 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 hen running on W 7860: 6f 57 36 34 2c 20 61 73 73 75 6d 65 20 74 68 65 oW64, assume the 7870: 20 74 65 73 74 20 65 78 65 63 75 74 61 62 6c 65 test executable 7880: 73 20 61 72 65 20 70 72 65 73 65 6e 74 0d 0a 20 s are present.. 7890: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 74 # wit 78a0: 68 20 74 68 65 20 22 33 32 22 20 73 75 66 66 69 h the "32" suffi 78b0: 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 20 20 x on them... 78c0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 78d0: 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 isRunningWoW64] 78e0: 26 26 20 5b 66 69 6c 65 20 65 78 74 65 6e 73 69 && [file extensi 78f0: 6f 6e 20 24 72 65 73 75 6c 74 5d 20 65 71 20 22 on$result] eq "
7900: 2e 65 78 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  .exe"} then {..
7910: 20 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c         set resul
7920: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66  t [appendArgs [f
7930: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 72 65  ile rootname $re 7940: 73 75 6c 74 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 sult] 32.exe].. 7950: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 7960: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
7970: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
7980: 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c 44 69  oc getExternalDi
7990: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
79a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
79b0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
79c0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
79d0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
79e0: 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e  the external bin
79f0: 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
7a00: 20 20 20 66 69 6c 65 73 20 61 72 65 20 6c 6f 63     files are loc
7a10: 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ated...      #..
7a20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
7a30: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
7a40: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c  ile dirname [fil
7a50: 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info
7a60: 62 69 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 20 20 20  binary]]]]..
7a70: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
7a80: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72  etBinaryDirector
7a90: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  y {} {..      #.
7aa0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
7ab0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
7ac0: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74  turns the direct
7ad0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65  ory where the te
7ae0: 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a  st application..
7af0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
7b00: 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45  self (i.e. the E
7b10: 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c  agle shell) is l
7b20: 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69  ocated.  This wi
7b30: 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20  ll be used as..
7b40: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
7b50: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72   destination for
7b60: 20 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74   the copied Syst
7b70: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e  em.Data.SQLite n
7b80: 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20  ative and..
7b90: 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64   #       managed
7ba0: 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65   assemblies (i.e
7bb0: 2e 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  . because this i
7bc0: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77  s one of the few
7bd0: 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23   places..      #
7be0: 20 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65         where the
7bf0: 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c   CLR will actual
7c00: 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64  ly find and load
7c10: 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e   them properly).
7c20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7c30: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
7c40: 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63  s ::binary_direc
7c50: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
7c60: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
7c70: 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64  ngth $::binary_d 7c80: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 7c90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 7ca0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 7cb0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 7cc0: 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 f the binary dir 7cd0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 7ce0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 7cf0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 7d00: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 refore, use it v 7d10: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 7d20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 7d30: 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 urn$::binary_di
7d40: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
7d50: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
7d60: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69   return [info bi
7d70: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  nary]..      }..
7d80: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
7d90: 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c 46 69  oc getExternalFi
7da0: 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d  leName { fileNam
7db0: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  e } {..      #..
7dc0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
7dd0: 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66  turns the specif
7de0: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  ied file name as
7df0: 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61   if it were loca
7e00: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
7e10: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
7e20: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ory containing t
7e30: 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61  he external bina
7e40: 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ries...      #..
7e50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
7e60: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
7e70: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 45 78 74  ile join [getExt
7e80: 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 5d 20  ernalDirectory]
7e90: 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20  $fileName]].. 7ea0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 7eb0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 7ec0: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c e { fileName {pl 7ed0: 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a atform ""} } {.. 7ee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 7ef0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 NOTE: Returns t 7f00: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c he specified fil 7f10: 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 e name as if it 7f20: 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 were located in 7f30: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 7f40: 20 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 binary direct 7f50: 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 ory, discarding 7f60: 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e any directory in 7f70: 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e formation presen 7f80: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 t.. # 7f90: 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d in the file nam 7fa0: 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 e as provided by 7fb0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 our caller... 7fc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 7fd0: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 urn [file native 7fe0: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 name \.. 7ff0: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 [file join [ge 8000: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 tBinaryDirectory 8010: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c ]$platform [fil
8020: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65  e tail $fileName 8030: 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ]]].. }..... 8040: 20 20 20 70 72 6f 63 20 67 65 74 43 6f 72 65 42 proc getCoreB 8050: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 inaryFileName { 8060: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 73 {platform ""} {s 8070: 74 61 6e 64 61 72 64 20 22 22 7d 20 7d 20 7b 0d tandard ""} } {. 8080: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8090: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 # NOTE: Returns 80a0: 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f the full path fo 80b0: 72 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 r the file conta 80c0: 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 ining the SQLite 80d0: 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 core.. # 80e0: 20 20 20 20 20 6e 61 74 69 76 65 20 6c 69 62 72 native libr 80f0: 61 72 79 20 63 6f 64 65 20 66 6f 72 20 74 68 69 ary code for thi 8100: 73 20 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 s platform. Fir 8110: 73 74 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 65 st, check and se 8120: 65 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 e if.. # 8130: 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 the SQLite c 8140: 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 ore native libra 8150: 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 ry has already b 8160: 65 65 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 een loaded. Nex 8170: 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 t,.. # 8180: 20 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 fallback to wh 8190: 61 74 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 at the full path 81a0: 20 73 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 should be, base 81b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 d on whether the 81c0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 81d0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 81e0: 62 6c 79 20 69 73 20 62 65 69 6e 67 20 75 73 65 bly is being use 81f0: 64 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f d and the name o 8200: 66 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 f the current.. 8210: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 # pla 8220: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d tform... #. 8230: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 8240: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a h {.. obj 8250: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 8260: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 8270: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 8280: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 8290: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 82a0: 64 73 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 ds _SQLiteNative 82b0: 4d 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a ModuleFileName.. 82c0: 20 20 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 } fileName 82d0: 5d 20 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 6e ] == 0 && [strin 82e0: 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 g length$fileNa
82f0: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
8300: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8310: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
8320: 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69  SQLite core nati
8330: 76 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61  ve library has a
8340: 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64  lready been load
8350: 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20  ed via..
8360: 23 20 20 20 20 20 20 20 74 68 65 20 6e 61 74 69  #       the nati
8370: 76 65 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c  ve library pre-l
8380: 6f 61 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74  oader.  Return t
8390: 68 61 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f  hat file name no
83a0: 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  w...        #..
83b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66         return $f 83c0: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } 83d0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 83e0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 83f0: 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 e "native" runti 8400: 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 me option has be 8410: 65 6e 20 73 65 74 2c 20 61 6c 77 61 79 73 20 72 en set, always r 8420: 65 74 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 eturn the.. 8430: 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 # file na 8440: 6d 65 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 me for the mixed 8450: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d -mode assembly.. 8460: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8470: 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f if {[hasRuntimeO 8480: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 ption native]} t 8490: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 84a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 84b0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78 : Return the mix 84c0: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 84d0: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 file name... 84e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 84f0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 return [file nat 8500: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ivename \.. 8510: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi 8520: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 n [getBinaryDire 8530: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d ctory]$platform
8540: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
8550: 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20  ite.dll]]..
8560: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
8570: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 72 65       # NOTE: Are
8580: 20 77 65 20 61 74 74 65 6d 70 74 69 6e 67 20 74   we attempting t
8590: 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically
85a0: 64 65 74 65 63 74 20 77 68 65 74 68 65 72 20 6f  detect whether o
85b0: 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 20  r not the..
85c0: 20 23 20 20 20 20 20 20 20 69 6e 74 65 72 6f 70   #       interop
85d0: 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64   assembly should
85e0: 20 62 65 20 75 73 65 64 3f 0d 0a 20 20 20 20 20   be used?..
85f0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 75   #..      set au
8600: 74 6f 6d 61 74 69 63 20 5b 65 78 70 72 20 7b 5b  tomatic [expr {[
8610: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s 8620: 74 61 6e 64 61 72 64 5d 20 3d 3d 20 30 7d 5d 0d tandard] == 0}]. 8630: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 8640: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, 8650: 20 69 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f in either "auto 8660: 6d 61 74 69 63 22 20 6f 72 20 22 6e 6f 6e 2d 73 matic" or "non-s 8670: 74 61 6e 64 61 72 64 22 20 6d 6f 64 65 73 2c 20 tandard" modes, 8680: 61 74 74 65 6d 70 74 0d 0a 20 20 20 20 20 20 23 attempt.. # 8690: 20 20 20 20 20 20 20 74 6f 20 66 69 6e 64 20 74 to find t 86a0: 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 he native-only i 86b0: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e nterop assembly. 86c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 86d0: 20 69 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 if {$automatic
86e0: 7c 7c 20 21 24 73 74 61 6e 64 61 72 64 7d 20 74  || !$standard} t 86f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 8700: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 8710: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 : Attempt to det 8720: 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 74 69 76 ermine the nativ 8730: 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 e-only interop a 8740: 73 73 65 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 ssembly file.. 8750: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 8760: 6d 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 me for this plat 8770: 66 6f 72 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 form and then re 8780: 74 75 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 turn it... 8790: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 #.. for 87a0: 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c each fileNameOnl 87b0: 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 y [getInteropAss 87c0: 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e emblyFileNamesOn 87d0: 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ly] {.. 87e0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 set fileName [f 87f0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c ile nativename \ 8800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 8810: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 [file join [getB 8820: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 inaryDirectory] 8830: 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e$platform $fileN 8840: 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 ameOnly]].... 8850: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 8860: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
8870: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
8880: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $8890: 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 88a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 88b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 88c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 88d0: 54 45 3a 20 54 68 65 6e 2c 20 69 6e 20 65 69 74 TE: Then, in eit 88e0: 68 65 72 20 22 61 75 74 6f 6d 61 74 69 63 22 20 her "automatic" 88f0: 6f 72 20 22 73 74 61 6e 64 61 72 64 22 20 6d 6f or "standard" mo 8900: 64 65 73 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d des, attempt to. 8910: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 . # f 8920: 69 6e 64 20 74 68 65 20 73 74 61 6e 64 61 72 64 ind the standard 8930: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e SQLite library. 8940: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 8950: 20 69 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 if {$automatic
8960: 7c 7c 20 24 73 74 61 6e 64 61 72 64 7d 20 74 68  || $standard} th 8970: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 8980: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 8990: 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 Attempt to dete 89a0: 72 6d 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 rmine the native 89b0: 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 -only standard S 89c0: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 0d 0a 20 QLite library.. 89d0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 # f 89e0: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 ile name for thi 89f0: 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 s platform and t 8a00: 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a hen return it... 8a10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8a20: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 8a30: 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 ameOnly [getNati 8a40: 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d veLibraryFileNam 8a50: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 esOnly] {.. 8a60: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 8a70: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 8a80: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 8a90: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b [file join [ 8aa0: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f getBinaryDirecto 8ab0: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 ry]$platform $f 8ac0: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d ileNameOnly]]... 8ad0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 8ae0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
8af0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8b10: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  rn $fileName.. 8b20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 8b30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 8b40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8b50: 23 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 20 # NOTE: Was the 8b60: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 8b70: 20 63 6f 6d 70 69 6c 65 64 20 65 78 70 65 63 74 compiled expect 8b80: 69 6e 67 20 74 6f 20 64 65 61 6c 20 77 69 74 68 ing to deal with 8b90: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 8ba0: 20 20 20 20 73 74 61 6e 64 61 72 64 20 63 6f 72 standard cor 8bb0: 65 20 6c 69 62 72 61 72 79 3f 0d 0a 20 20 20 20 e library?.. 8bc0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 8bd0: 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 haveSQLiteDefine 8be0: 43 6f 6e 73 74 61 6e 74 20 53 51 4c 49 54 45 5f Constant SQLITE_ 8bf0: 53 54 41 4e 44 41 52 44 5d 7d 20 74 68 65 6e 20 STANDARD]} then 8c00: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8c10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 8c20: 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e llback to return 8c30: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f ing the native-o 8c40: 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c nly standard SQL 8c50: 69 74 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 ite library.. 8c60: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c # fil 8c70: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 e name for the p 8c80: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 8c90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 8ca0: 20 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 5b fileNamesOnly [ 8cb0: 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 getNativeLibrary 8cc0: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a FileNamesOnly].. 8cd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c .. if {[l 8ce0: 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 length$fileName
8cf0: 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d 20 74 68 65  sOnly] == 0} the
8d00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  n {..          r
8d10: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20  eturn ""..
8d20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
8d30: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69  eturn [file nati
8d40: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
8d50: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
8d60: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
8d70: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 8d80: 5b 6c 69 6e 64 65 78 20 24 66 69 6c 65 4e 61 6d [lindex$fileNam
8d90: 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20  esOnly 0]]]..
8da0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
8db0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8dc0: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b  # NOTE: Fallback
8dd0: 20 74 6f 20 72 65 74 75 72 6e 69 6e 67 20 74 68   to returning th
8de0: 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e  e native-only in
8df0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
8e00: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ile..        #
8e10: 20 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68       name for th
8e20: 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20  e platform...
8e30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8e40: 73 65 74 20 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c  set fileNamesOnl
8e50: 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73  y [getInteropAss
8e60: 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e  emblyFileNamesOn
8e70: 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ly]....        i
8e80: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c  f {[llength $fil 8e90: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 eNamesOnly] == 0 8ea0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8eb0: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 return "".. 8ec0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 8ed0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 8ee0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 8ef0: 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 8f00: 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 [getBinary 8f10: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 Directory]$plat
8f20: 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69  form [lindex $fi 8f30: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d leNamesOnly 0]]] 8f40: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 8f50: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 8f60: 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 tCommonDirectory 8f70: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 8f80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 8f90: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret 8fa0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f urns the directo 8fb0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 ry where the tes 8fc0: 74 20 73 63 72 69 70 74 73 0d 0a 20 20 20 20 20 t scripts.. 8fd0: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 # should 8fe0: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 be located. By 8ff0: 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 default, this ju 9000: 73 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 45 st returns the E 9010: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 agle.. # 9020: 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 binary direc 9030: 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a tory... #.. 9040: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 9050: 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f exists ::common_ 9060: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 9070: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 9080: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d ng length$::com
9090: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e  mon_directory] >
90a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
90b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
90c0: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74   NOTE: The locat
90d0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f  ion of the commo
90e0: 6e 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  n directory has
90f0: 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20  been set;..
9100: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
9110: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
9120: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9130: 20 20 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d    return $::comm 9140: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 on_directory.. 9150: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 9160: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 6e nfo exists ::ven 9170: 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 dor_directory] & 9180: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 9190: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
91a0: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72  :vendor_director
91b0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
91c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
91d0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
91e0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 76  ocation of the v
91f0: 65 6e 64 6f 72 20 64 69 72 65 63 74 6f 72 79 20  endor directory
9200: 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20  has been set;..
9210: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
9220: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
9230: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
9240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 9250: 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 vendor_directory 9260: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 9270: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9280: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 :tcl_library] && 9290: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 92a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
92b0: 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30  tcl_library] > 0
92c0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
92d0: 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f   [file isdirecto
92e0: 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72  ry $::tcl_librar 92f0: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 9300: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 9310: 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 61 NOTE: The varia 9320: 62 6c 65 20 77 69 74 68 20 74 68 65 20 6c 6f 63 ble with the loc 9330: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 ation of the scr 9340: 69 70 74 20 6c 69 62 72 61 72 79 20 69 73 0d 0a ipt library is.. 9350: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 9360: 73 65 74 20 61 6e 64 20 61 70 70 65 61 72 73 20 set and appears 9370: 74 6f 20 62 65 20 61 20 72 65 61 6c 20 64 69 72 to be a real dir 9380: 65 63 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 ectory (i.e. not 9390: 20 65 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 20 embedded.. 93a0: 20 20 20 23 20 20 20 20 20 20 20 77 69 74 68 69 # withi 93b0: 6e 20 61 20 66 69 6c 65 29 3b 20 74 68 65 72 65 n a file); there 93c0: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 fore, use it... 93d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 93e0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f return$::tcl_
93f0: 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 7d  library..      }
9400: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
9410: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
9420: 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20  TE: Fallback to
9430: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f  the directory co
9440: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 65  ntaining the exe
9450: 63 75 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  cutable...
9460: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
9470: 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79  urn [info binary
9480: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
9490: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
94a0: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
94b0: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
94c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
94d0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
94e0: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
94f0: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
9500: 74 65 73 74 20 64 61 74 61 62 61 73 65 73 0d 0a  test databases..
9510: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
9520: 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e  ould be located.
9530: 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68    By default, th
9540: 69 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65  is just uses the
9550: 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20   temporary..
9560: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
9570: 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66  ory configured f
9580: 6f 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d  or this system..
9590: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
95a0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
95b0: 20 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65   ::database_dire
95c0: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20  ctory] && \..
95d0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
95e0: 65 6e 67 74 68 20 24 3a 3a 64 61 74 61 62 61 73  ength $::databas 95f0: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 e_directory] > 0 9600: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 9610: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 9620: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 9630: 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 n of the databas 9640: 65 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 e directory has 9650: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 9660: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 9670: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 9680: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 9690: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 96a0: 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65$::database_dire
96b0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
96c0: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
96d0: 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69  sts ::scratch_di
96e0: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
96f0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
9700: 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74   length $::scrat 9710: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 ch_directory] > 9720: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 9730: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 9740: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 NOTE: The locati 9750: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 on of the scratc 9760: 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 h directory has 9770: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 9780: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 9790: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 97a0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 97b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 97c0: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63$::scratch_direc
97d0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
97e0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  se {..        re
97f0: 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61  turn [getTempora
9800: 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d  ryPath]..      }
9810: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
9820: 70 72 6f 63 20 67 65 74 54 65 6d 70 6f 72 61 72  proc getTemporar
9830: 79 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d  yDirectory {} {.
9840: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9850: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
9860: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74  cedure returns t
9870: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65  he directory whe
9880: 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  re the temporary
9890: 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20   files..      #
98a0: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
98b0: 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66  located.  By def
98c0: 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20  ault, this just
98d0: 75 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61  uses the tempora
98e0: 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ry..      #
98f0: 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66    directory conf
9900: 69 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20  igured for this
9910: 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23  system...      #
9920: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
9930: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f  o exists ::tempo
9940: 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20  rary_directory]
9950: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
9960: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $9970: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 9980: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 9990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 99a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 99b0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 99c0: 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 he temporary dir 99d0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 99e0: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 99f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 9a00: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. 9a10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9a20: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
9a30: 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72  mporary_director
9a40: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  y..      } elsei
9a50: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
9a60: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
9a70: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
9a80: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
9a90: 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  gth $::scratch_d 9aa0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 9ab0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 9ac0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 9ad0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 9ae0: 66 20 74 68 65 20 73 63 72 61 74 63 68 20 64 69 f the scratch di 9af0: 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e rectory has been 9b00: 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 overridden;.. 9b10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 9b20: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e erefore, use it. 9b30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 9b40: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 return$::s
9b50: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
9b60: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
9b70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9b80: 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61   [getTemporaryPa
9b90: 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  th]..      }..
9ba0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
9bb0: 20 67 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74   getExecuteOnSet
9bc0: 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69  up {} {..      i
9bd0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
9be0: 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74  ::execute_on_set
9bf0: 75 70 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  up] && \..
9c00: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
9c10: 74 68 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e  th $::execute_on 9c20: 5f 73 65 74 75 70 5d 20 3e 20 30 7d 20 74 68 65 _setup] > 0} the 9c30: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 9c40: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9c50: 52 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 66 69 Return the confi 9c60: 67 75 72 65 64 20 53 51 4c 20 74 6f 20 65 78 65 gured SQL to exe 9c70: 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 cute during the 9c80: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 connection.. 9c90: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 75 # setu 9ca0: 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 2e 65 p procedure (i.e 9cb0: 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 73 74 . for every test 9cc0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec 9cd0: 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20 tion)... 9ce0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 9cf0: 6e 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f n$::execute_on_
9d00: 73 65 74 75 70 0d 0a 20 20 20 20 20 20 7d 20 65  setup..      } e
9d10: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
9d20: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
9d30: 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68  : By default, th
9d40: 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 20 74 6f  ere is no SQL to
9d50: 20 65 78 65 63 75 74 65 20 64 75 72 69 6e 67 20   execute during
9d60: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
9d70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9d80: 73 65 74 75 70 20 70 72 6f 63 65 64 75 72 65 20  setup procedure
9d90: 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20  (i.e. for every
9da0: 74 65 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  test database co
9db0: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
9dc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
9dd0: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20  eturn ""..
9de0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
9df0: 20 70 72 6f 63 20 67 65 74 53 74 72 69 6e 67 4d   proc getStringM
9e00: 61 70 46 6f 72 54 63 6c 45 73 63 61 70 65 20 7b  apForTclEscape {
9e10: 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  } {..      retur
9e20: 6e 20 5b 6c 69 73 74 20 5c 5c 20 5c 5c 5c 5c 20  n [list \\ \\\\
9e30: 5c 5b 20 5c 5c 5c 5b 20 5c 5d 20 5c 5c 5c 5d 20  $\\\[$ \\\]
9e40: 5c 24 20 5c 5c 5c 24 5d 0d 0a 20 20 20 20 7d 0d  \$\\\$]..    }.
9e50: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
9e60: 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65  TestOverridesPre
9e70: 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61  amble { {extraVa
9e80: 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a  rNames ""} } {..
9e90: 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d        set varNam
9ea0: 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  es [list]....
9eb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
9ec0: 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65  TE: If available
9ed0: 2c 20 73 74 61 72 74 20 77 69 74 68 20 74 68 65  , start with the
9ee0: 20 6d 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20   master list of
9ef0: 74 65 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20  test override..
9f00: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72       #       var
9f10: 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23  iables...      #
9f20: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
9f30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
9f40: 6f 76 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d  overrides] && \.
9f50: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e  .          [llen
9f60: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72  gth $::test_over 9f70: 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e rides] > 0} then 9f80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c {.. eval 9f90: 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 lappend varName 9fa0: 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 s$::test_overri
9fb0: 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  des..      }....
9fc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
9fd0: 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73   NOTE: If reques
9fe0: 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ted by our calle
9ff0: 72 2c 20 61 64 64 20 61 6e 79 20 61 64 64 69 74  r, add any addit
a000: 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a  ional variable..
a010: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
a020: 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e  mes to copy now.
a030: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
a040: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65   if {[llength $e a050: 78 74 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 xtraVarNames] > a060: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. a070: 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 eval lappend a080: 76 61 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56 varNames$extraV
a090: 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d  arNames..      }
a0a0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
a0b0: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
a0c0: 20 74 68 65 20 73 63 72 69 70 74 20 66 72 61 67   the script frag
a0d0: 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72  ment to be retur
a0e0: 6e 65 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e  ned by processin
a0f0: 67 20 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20  g each..      #
a100: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e        variable n
a110: 61 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74  ame and adding t
a120: 68 65 20 6e 65 63 65 63 65 73 73 61 72 79 20 73  he nececessary s
a130: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20  cript fragments
a140: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  for..      #
a150: 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20     each one...
a160: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
a170: 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20   result ""....
a180: 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e      foreach varN
a190: 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d  ame $varNames {. a1a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a1b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil a1c0: 64 20 74 68 65 20 71 75 61 6c 69 66 69 65 64 20 d the qualified a1d0: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 global variable a1e0: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 name... # a1f0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 75 .. set fu a200: 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e llVarName [appen a210: 64 41 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d dArgs ::$varNam
a220: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  e]....        #.
a230: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
a240: 20 44 6f 65 73 20 74 68 65 20 76 61 72 69 61 62   Does the variab
a250: 6c 65 20 65 78 69 73 74 20 69 6e 20 74 68 69 73  le exist in this
a260: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e   interpreter con
a270: 74 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23  text?..        #
a280: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
a290: 6e 66 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c  nfo exists $full a2a0: 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b VarName]} then { a2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. a2c0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: a2d0: 20 41 70 70 65 6e 64 20 61 20 73 63 72 69 70 74 Append a script a2e0: 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 fragment to the a2f0: 20 72 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c result that wil a300: 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 l correctly.. a310: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c a320: 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 opy any containe a330: 64 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 d value to anoth a340: 65 72 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 er interpreter c a350: 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 ontext... a360: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. a370: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e append result \n a380: 20 22 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72 "set "$fullVar
a390: 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73 74 72 69  Name " \{" [stri
a3a0: 6e 67 20 6d 61 70 20 5c 0d 0a 20 20 20 20 20 20  ng map \..
a3b0: 20 20 20 20 20 20 20 20 5b 67 65 74 53 74 72 69          [getStri
a3c0: 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 63 61 70  ngMapForTclEscap
a3d0: 65 5d 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72  e] [set $fullVar a3e0: 4e 61 6d 65 5d 5d 20 5c 7d 0d 0a 20 20 20 20 20 Name]] \}.. a3f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... a400: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. a410: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 # NOTE: If the r a420: 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f esult contains o a430: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 ne or more scrip a440: 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 t fragments, app a450: 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 end a.. # a460: 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 newline... a470: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if a480: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length a490: 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74$result] > 0} t
a4a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
a4b0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d  ppend result \n.
a4c0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
a4d0: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result a4e0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... a4f0: 70 72 6f 63 20 6d 6f 76 65 53 79 73 74 65 6d 44 proc moveSystemD a500: 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 ataSQLiteDllConf a510: 69 67 20 7b 20 7b 72 65 73 74 6f 72 65 20 66 61 ig { {restore fa a520: 6c 73 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 lse} {verbose tr a530: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ue} } {.. s a540: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 et directory [ge a550: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 tBinaryDirectory a560: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ a570: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 string length$d
a580: 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20  irectory] == 0}
a590: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a5a0: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th a5b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a5c0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
a5d0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
a5e0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
a5f0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64     "---- skipped
a600: 20 6d 6f 76 69 6e 67 20 5c 22 53 79 73 74 65 6d   moving \"System
a610: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
a620: 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a  .config\", " \..
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
a640: 6f 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f  o binary directo
a650: 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  ry\n"]..
a660: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
a670: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
a680: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
a690: 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e 6f 72 6d  me(1) [file norm
a6a0: 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20  alize \..
a6b0: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64     [file join $d a6c0: 69 72 65 63 74 6f 72 79 20 53 79 73 74 65 6d 2e irectory System. a6d0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e Data.SQLite.dll. a6e0: 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 config]].... a6f0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 set fileName(2 a700: 29 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 ) [appendArgs$f
a710: 69 6c 65 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 65  ileName(1) .move
a720: 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  d]....      if {
a730: 24 72 65 73 74 6f 72 65 7d 20 74 68 65 6e 20 7b  $restore} then { a740: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 .. if {[f a750: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
a760: 4e 61 6d 65 28 32 29 5d 7d 20 74 68 65 6e 20 7b  Name(2)]} then {
a770: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65  ..          file
a780: 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d   rename $fileNam a790: 65 28 32 29 20 24 66 69 6c 65 4e 61 6d 65 28 31 e(2)$fileName(1
a7a0: 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  )....          i
a7b0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the a7c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. a7d0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
a7e0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
a7f0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
a800: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65        "---- move
a810: 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28  d \"" $fileName( a820: 32 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 2) "\" to \"" \. a830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . a840: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 22$fileName(1) \"
a850: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
a860: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
a870: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
a880: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then a890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. a8a0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
a8b0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
a8c0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
a8d0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
a8e0: 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66  ed moving \"" $f a8f0: 69 6c 65 4e 61 6d 65 28 32 29 20 5c 0d 0a 20 20 ileName(2) \.. a900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ a910: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e a920: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. a930: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } a940: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { a950: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 .. if {[f a960: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
a970: 4e 61 6d 65 28 31 29 5d 7d 20 74 68 65 6e 20 7b  Name(1)]} then {
a980: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65  ..          file
a990: 20 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d   rename $fileNam a9a0: 65 28 31 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 e(1)$fileName(2
a9b0: 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  )....          i
a9c0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the a9d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. a9e0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
a9f0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
aa00: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
aa10: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65        "---- move
aa20: 64 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28  d \"" $fileName( aa30: 31 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 1) "\" to \"" \. aa40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . aa50: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 22$fileName(2) \"
aa60: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
aa70: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
aa80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
aa90: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then aaa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. aab0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
aac0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
aad0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
aae0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
aaf0: 65 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66  ed moving \"" $f ab00: 69 6c 65 4e 61 6d 65 28 31 29 20 5c 0d 0a 20 20 ileName(1) \.. ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ ab20: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e ab30: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. ab40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } ab50: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } ab60: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 77 72 ..... proc wr ab70: 69 74 65 53 79 73 74 65 6d 44 61 74 61 53 51 4c iteSystemDataSQL ab80: 69 74 65 44 6c 6c 43 6f 6e 66 69 67 20 7b 20 64 iteDllConfig { d ab90: 61 74 61 20 7b 76 65 72 62 6f 73 65 20 74 72 75 ata {verbose tru aba0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se abb0: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get abc0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d BinaryDirectory] abd0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s abe0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 tring length$di
abf0: 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74  rectory] == 0} t
ac00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
ac10: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the ac20: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t ac30: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
ac40: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
ac50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
ac60: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
ac70: 6d 6f 76 69 6e 67 20 5c 22 53 79 73 74 65 6d 2e  moving \"System.
ac80: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e  Data.SQLite.dll.
ac90: 63 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20  config\", " \..
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f               "no
acb0: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
acc0: 79 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y\n"]..        }
acd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
ace0: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  rn..      }....
acf0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
ad00: 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a  e [file normaliz
ad10: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  e \..          [
ad20: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63  file join $direc ad30: 74 6f 72 79 20 53 79 73 74 65 6d 2e 44 61 74 61 tory System.Data ad40: 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 .SQLite.dll.conf ad50: 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 72 ig]].... wr ad60: 69 74 65 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d iteFile$fileNam
ad70: 65 20 24 64 61 74 61 0d 0a 0d 0a 20 20 20 20 20  e $data.... ad80: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
ad90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
ada0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha adb0: 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. adc0: 20 20 20 20 22 2d 2d 2d 2d 20 77 72 6f 74 65 20 "---- wrote add0: 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ ade0: 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c Lite.dll.config\ adf0: 22 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d "\n".. }... ae00: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 . return$f
ae10: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a  ileName..    }..
ae20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65  ...    proc move
ae30: 45 61 67 6c 65 53 68 65 6c 6c 4d 64 61 43 6f 6e  EagleShellMdaCon
ae40: 66 69 67 20 7b 20 7b 72 65 73 74 6f 72 65 20 66  fig { {restore f
ae50: 61 6c 73 65 7d 20 7b 76 65 72 62 6f 73 65 20 74  alse} {verbose t
ae60: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
ae70: 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67  set directory [g
ae80: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72  etBinaryDirector
ae90: 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  y]....      if {
aea0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $aeb0: 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d directory] == 0} aec0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. aed0: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
aee0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
aef0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c af00: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr af10: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. af20: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 "---- skippe af30: 64 20 6d 6f 76 69 6e 67 20 5c 22 45 61 67 6c 65 d moving \"Eagle af40: 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f Shell.exe.mda.co af50: 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 nfig\", " \.. af60: 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 "no b af70: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c inary directory\ af80: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. af90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return afa0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... afb0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 set fileName( afc0: 31 29 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 1) [file normali afd0: 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ze \.. afe0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 [file join$dire
aff0: 63 74 6f 72 79 20 45 61 67 6c 65 53 68 65 6c 6c  ctory EagleShell
b000: 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d  .exe.mda.config]
b010: 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66  ]....      set f
b020: 69 6c 65 4e 61 6d 65 28 32 29 20 5b 61 70 70 65  ileName(2) [appe
b030: 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61 6d 65  ndArgs $fileName b040: 28 31 29 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 (1) .moved].... b050: 20 20 20 20 20 69 66 20 7b 24 72 65 73 74 6f 72 if {$restor
b060: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
b070: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
b080: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28 32 29  sts $fileName(2) b090: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. b0a0: 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 file rename b0b0: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 24 66$fileName(2) $f b0c0: 69 6c 65 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 ileName(1).... b0d0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
b0e0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
b0f0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
b100: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel b110: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " b130: 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 ---- moved \""$
b140: 66 69 6c 65 4e 61 6d 65 28 32 29 20 22 5c 22 20  fileName(2) "\"
b150: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  to \"" \..
b160: 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e            $fileN b170: 61 6d 65 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 ame(1) \"\n].. b180: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. b190: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. b1a0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
b1b0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
b1c0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $b1d0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ b1e0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- b200: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 --- skipped movi b210: 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 ng \""$fileName
b220: 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  (2) \..
b230: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64         "\", it d
b240: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22  oes not exist\n"
b250: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
b260: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
b270: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
b280: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
b290: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29  sts $fileName(1) b2a0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. b2b0: 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 file rename b2c0: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 24 66$fileName(1) $f b2d0: 69 6c 65 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 ileName(2).... b2e0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
b2f0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
b300: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
b310: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel b320: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " b340: 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 ---- moved \""$
b350: 66 69 6c 65 4e 61 6d 65 28 31 29 20 22 5c 22 20  fileName(1) "\"
b360: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  to \"" \..
b370: 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e            $fileN b380: 61 6d 65 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 ame(2) \"\n].. b390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. b3a0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. b3b0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
b3c0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
b3d0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $b3e0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ b3f0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- b410: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 --- skipped movi b420: 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 ng \""$fileName
b430: 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  (1) \..
b440: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64         "\", it d
b450: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22  oes not exist\n"
b460: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
b470: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
b480: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
b490: 20 20 70 72 6f 63 20 77 72 69 74 65 45 61 67 6c    proc writeEagl
b4a0: 65 53 68 65 6c 6c 4d 64 61 43 6f 6e 66 69 67 20  eShellMdaConfig
b4b0: 7b 20 64 61 74 61 20 7b 76 65 72 62 6f 73 65 20  { data {verbose
b4c0: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
b4d0: 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b   set directory [
b4e0: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
b4f0: 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ry]....      if
b500: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
b510: 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30  $directory] == 0 b520: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b530: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
b540: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b550: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ b560: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA b570: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. b580: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp b590: 65 64 20 6d 6f 76 69 6e 67 20 5c 22 45 61 67 6c ed moving \"Eagl b5a0: 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 eShell.exe.mda.c b5b0: 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 onfig\", " \.. b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 "no b5d0: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 binary directory b5e0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. b5f0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur b600: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... b610: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName b620: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 [file normalize b630: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f b640: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
b650: 6f 72 79 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65  ory EagleShell.e
b660: 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 5d 0d  xe.mda.config]].
b670: 0a 0d 0a 20 20 20 20 20 20 77 72 69 74 65 46 69  ...      writeFi
b680: 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 64 61  le $fileName$da
b690: 74 61 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  ta....      if {
b6a0: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b  $verbose} then { b6b0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs b6c0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
b6d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
b6e0: 2d 2d 2d 2d 20 77 72 6f 74 65 20 5c 22 45 61 67  ---- wrote \"Eag
b6f0: 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e  leShell.exe.mda.
b700: 63 6f 6e 66 69 67 5c 22 5c 6e 22 0d 0a 20 20 20  config\"\n"..
b710: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
b720: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  turn $fileName.. b730: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr b740: 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 oc getAppDomainP b750: 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 reamble { {prefi b760: 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 x ""} {suffix "" b770: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. b780: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th b790: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret b7a0: 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 urns a test setu b7b0: 70 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e p script fragmen b7c0: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a t suitable for.. b7d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 # ev b7e0: 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 aluation by an i b7f0: 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 nterpreter creat b800: 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 ed in an isolate b810: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 d application.. b820: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d # dom b830: 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 ain. The script b840: 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 fragment being b850: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 returned will be b860: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a surrounded by.. b870: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th b880: 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 e prefix and suf b890: 66 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 fix "script frag b8a0: 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 ments" specified b8b0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d by our caller,. b8c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i b8d0: 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 f any. The enti b8e0: 72 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 re script being b8f0: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 returned will be b900: 20 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 substituted via b910: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # b920: 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 [subst], in the b930: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 context of our c b940: 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 aller, before be b950: 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 ing returned... b960: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 # Thi b970: 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 s step is necess b980: 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 ary so that some b990: 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 limited context b9a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 information,.. b9b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69 # pri b9c0: 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 marily related t b9d0: 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 o the testing di b9e0: 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 rectories, can b b9f0: 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 e transferred.. ba00: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to ba10: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 the interpreter ba20: 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 in the isolated ba30: 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 application doma ba40: 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 in, making it.. ba50: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c # abl ba60: 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c e to successfull ba70: 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 y run tests that ba80: 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 require one or ba90: 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 more of the.. baa0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 # files bab0: 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 in one of the t bac0: 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 esting directori bad0: 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f es. Callers sho bae0: 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 uld keep in.. baf0: 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 # mind bb00: 74 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63 that the test sc bb10: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 ript fragment be bb20: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e ing returned can bb30: 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 not rely on.. bb40: 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 # any s bb50: 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 cript library pr bb60: 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72 ocedures that ar bb70: 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 e not provided b bb80: 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 y the Eagle.. bb90: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 # libra bba0: 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e ry package (i.e. bbb0: 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 "init.eagle"), bbc0: 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 including those bbd0: 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 provided by.. bbe0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45 # the E bbf0: 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 agle test packag bc00: 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 e, unless the fi bc10: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 le containing th bc20: 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 em is loaded.. bc30: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu bc40: 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 ally via some ot bc50: 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 her mechanism (e bc60: 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 .g. by including bc70: 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 appropriate.. bc80: 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 # [pac bc90: 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 kage require] or bca0: 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e [source] comman bcb0: 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 ds in the prefix bcc0: 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 or suffix.. bcd0: 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 # script bce0: 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c fragments). Al bcf0: 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 so, all variable bd00: 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 references and bd10: 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 all nested.. bd20: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e # comman bd30: 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 ds (i.e. those i bd40: 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 n square bracket bd50: 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 s) contained in bd60: 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 the final.. bd70: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 # script bd80: 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e fragment will en bd90: 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 d up being evalu bda0: 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 ated in the cont bdb0: 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 ext of the.. bdc0: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e # callin bdd0: 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e g interpreter an bde0: 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 d not the target bdf0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 interpreter cre be00: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 ated in the.. be10: 20 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 # isola be20: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 ted application be30: 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 domain unless th be40: 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 e dollar signs a be50: 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 nd/or square.. be60: 20 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63 # brac be70: 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c kets are special be80: 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 ly quoted with b be90: 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 ackslashes... bea0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu beb0: 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c rn [uplevel 1 [l bec0: 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e ist subst [appen bed0: 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d dArgs$prefix {.
bee0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
bef0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
bf00: 5c 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61  $object$ comma
bf10: 6e 64 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e  nd may be missin
bf20: 67 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20  g in some Eagle
bf30: 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20  core..        #
bf40: 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f        library co
bf50: 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43  nfigurations.  C
bf60: 6c 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67  loning and using
bf70: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a   the procedure..
bf80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
bf90: 5c 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75  $changeNativeRu bfa0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 ntimeOption$ ma
bfb0: 79 20 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61  y help to mitiga
bfc0: 74 65 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20  te this...
bfd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f    #..        pro
bfe0: 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75  c changeNativeRu
bff0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20  ntimeOption \..
c000: 20 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66             {[inf
c010: 6f 20 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74  o args changeNat
c020: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  iveRuntimeOption
c030: 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ]} \..
c040: 20 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68    {[info body ch
c050: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d  angeNativeRuntim
c060: 65 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20  eOption]}....
c070: 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
c080: 20 20 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61          changeNa
c090: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f  tiveRuntimeOptio
c0a0: 6e 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74  n [hasRuntimeOpt
c0b0: 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20  ion native]..
c0c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
c0d0: 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65  [getTestOverride
c0e0: 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20  sPreamble [list
c0f0: 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65  path test_channe
c100: 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a  l]] $suffix]]].. c110: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr c120: 6f 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e oc tryCopyExtern c130: 61 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 alFile {.. c140: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b fileName { c150: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 platform ""} {ne c160: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 wFileName ""} {v c170: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b erbose true} } { c180: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 .. set sour c190: 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 ceFileName [getE c1a0: 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 xternalFileName c1b0: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$fileName]....
c1c0: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
c1d0: 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c  xists $sourceFil c1e0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. c1f0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
c200: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
c210: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: c220: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a c230: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. c240: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- c250: 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 skipped copying c260: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c external file \ c270: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
c280: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
c290: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
c2a0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
c2b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
c2c0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20       return..
c2d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
c2e0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
c2f0: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e   $newFileName] > c300: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. c310: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 set targetFi c320: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 leName [getBinar c330: 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 yFileName$newFi
c340: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform c350: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else c360: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t c370: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g c380: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName c390: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74$fileName $plat c3a0: 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a form].. }.. c3b0: 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 .. set targ c3c0: 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c etDirectory [fil c3d0: 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 e dirname$targe
c3e0: 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  tFileName]....
c3f0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
c400: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
c410: 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72  file exists $tar c420: 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 getDirectory]} t c430: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. c440: 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 file mkdir$tar
c450: 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  getDirectory..
c460: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
c470: 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f     file copy -fo
c480: 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  rce $sourceFileN c490: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e ame$targetFileN
c4a0: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d  ame..      }] ==
c4b0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
c4c0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes c4d0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen c4e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. c4f0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 "---- copie c500: 64 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 d external file c510: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 from \""$source
c520: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20  FileName "\" to
c530: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
c540: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61     $targetFileNa c550: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. c560: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c570: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
c580: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
c590: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
c5a0: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20     "---- failed
c5b0: 74 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c  to copy external
c5c0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $c5d0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ c5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ c5f0: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 " to \""$target
c600: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
c610: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
c620: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43  ...    proc tryC
c630: 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d  opyBinaryFile {.
c640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c  .            fil
c650: 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c  eName managedOnl
c660: 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  y {platform ""}
c670: 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d  {newFileName ""}
c680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 76  ..            {v
c690: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b  erbose true} } {
c6a0: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72  ..      set sour
c6b0: 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  ceFileName [getB
c6c0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f c6d0: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
c6e0: 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  m]....      if {
c6f0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73  ![file exists $s c700: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 ourceFileName]} c710: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c720: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
c730: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
c740: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch c750: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg c760: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. c770: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped c780: 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 copying binary c790: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 file \""$source
c7a0: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
c7b0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
c7c0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
c7d0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
c7e0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
c7f0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
c800: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
c810: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e  length $newFileN c820: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { c830: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta c840: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge c850: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c tBuildFileName \ c860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6e ..$n
c870: 65 77 46 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61  ewFileName $mana c880: 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 gedOnly$platfor
c890: 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  m]..      } else
c8a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
c8b0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
c8c0: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
c8d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c8e0: 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67  $fileName$manag
c8f0: 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d  edOnly $platform c900: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... c910: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69 set targetDi c920: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 rectory [file di c930: 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c rname$targetFil
c940: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
c950: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
c960: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
c970: 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44   exists $targetD c980: 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 irectory]} then c990: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c {.. fil c9a0: 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 e mkdir$targetD
c9b0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
c9c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66    }....        f
c9d0: 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20  ile copy -force
c9e0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName c9f0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d$targetFileName.
ca00: 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20  .      }] == 0}
ca10: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
ca20: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch ca30: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg ca40: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. ca50: 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 "---- copied bi ca60: 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c nary file from \ ca70: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
ca80: 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d  me "\" to \"" \.
ca90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61  .            $ta caa0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c rgetFileName \"\ cab0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else cac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput cad0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
cae0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
caf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
cb00: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70  -- failed to cop
cb10: 79 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72  y binary file fr
cb20: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi cb30: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. cb40: 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 "\" to \"" cb50: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
cb60: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
cb70: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
cb80: 72 6f 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64  roc tryCopyBuild
cb90: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  File {..
cba0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e      fileName man
cbb0: 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f  agedOnly {platfo
cbc0: 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e  rm ""} {newFileN
cbd0: 61 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20  ame ""}..
cbe0: 20 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72       {verbose tr
cbf0: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ue} } {..      s
cc00: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  et sourceFileNam
cc10: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
cc20: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d  ame $fileName$m
cc30: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74  anagedOnly $plat cc40: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 form].... i cc50: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists cc60: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
cc70: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
cc80: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} cc90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. cca0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
ccb0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
ccc0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
ccd0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70        "---- skip
cce0: 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c  ped copying buil
ccf0: 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72  d file \"" $sour cd00: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. cd10: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", cd20: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi cd30: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. cd40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.... ret cd50: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... cd60: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin cd70: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c g length$newFil
cd80: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  eName] > 0} then
cd90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
cda0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
cdb0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
cdc0: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24  e $newFileName$
cdd0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20  platform]..
cde0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
cdf0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
ce00: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
ce10: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa ce20: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 me$platform]..
ce30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
ce40: 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74  set targetDirect
ce50: 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ory [file dirnam
ce60: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam ce70: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { ce80: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. ce90: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi cea0: 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 sts$targetDirec
ceb0: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
cec0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b           file mk
ced0: 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63  dir $targetDirec cee0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d tory.. }. cef0: 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 ... file cf00: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 copy -force$sou
cf10: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72  rceFileName $tar cf20: 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 getFileName.. cf30: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e }] == 0} then cf40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput cf50: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
cf60: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
cf70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
cf80: 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20  -- copied build
cf90: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s cfa0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c ourceFileName "\ cfb0: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 " to \"" \.. cfc0: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46$targetF
cfd0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
cfe0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
cff0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: d000: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap d010: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. d020: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa d030: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 iled to copy bui d040: 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 ld file from \"" d050: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
d060: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d070: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67  "\" to \"" $targ d080: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d etFileName \"\n] d090: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } d0a0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr d0b0: 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c yDeleteBinaryFil d0c0: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c e { fileName {pl d0d0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 atform ""} {verb d0e0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. d0f0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam d100: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 e [getBinaryFile d110: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 Name$fileName $d120: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 platform].... d130: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex d140: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
d150: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d160: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74   if {$verbose} t d170: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. d180: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
d190: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
d1a0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
d1b0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
d1c0: 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72  d deleting binar
d1d0: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  y file \"" $file d1e0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. d1f0: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do d200: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] d210: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... d220: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 return.. d230: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... d240: 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 if {[catch {file d250: 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d delete$fileNam
d260: 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  e}] == 0} then {
d270: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
d280: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel d290: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. d2a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- d2b0: 20 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 deleted binary d2c0: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
d2d0: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
d2e0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
d2f0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ d300: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA d310: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. d320: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 "---- failed d330: 74 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 to delete binary d340: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
d350: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
d360: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
d370: 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65    proc tryDelete
d380: 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20  BuildFile {..
d390: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
d3a0: 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70  e managedOnly {p
d3b0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72  latform ""} {ver
d3c0: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a  bose true} } {..
d3d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
d3e0: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  me [getBuildFile
d3f0: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  Name $fileName$
d400: 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61  managedOnly $pla d410: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tform].... d420: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist d430: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
d440: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
d450: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then d460: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp d470: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
d480: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
d490: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
d4a0: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64   "---- skipped d
d4b0: 65 6c 65 74 69 6e 67 20 62 75 69 6c 64 20 66 69  eleting build fi
d4c0: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName d4d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d4e0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n d4f0: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. d500: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... d510: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. d520: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { d530: 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c [catch {file del d540: 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 ete$fileName}]
d550: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
d560: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t d570: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app d580: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. d590: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c "---- del d5a0: 65 74 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 eted build file d5b0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 \""$fileName \"
d5c0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  \n]..      } els
d5d0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
d5e0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann d5f0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ d600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- d610: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 --- failed to de d620: 6c 65 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 lete build file d630: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 \""$fileName \"
d640: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
d650: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
d660: 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
d670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
d680: 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64  fileName managed
d690: 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Only {platform "
d6a0: 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76  "} {pdb true} {v
d6b0: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b  erbose true} } {
d6c0: 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79 42  ..      tryCopyB
d6d0: 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61  uildFile $fileNa d6e0: 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 me$managedOnly
d6f0: 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65  $platform ""$ve
d700: 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69  rbose....      i
d710: 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d  f {$pdb} then {. d720: 0a 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 . tryCopy d730: 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e BuildFile [appen d740: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. d750: 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e [file rootn d760: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e ame$fileName] .
d770: 70 64 62 5d 20 24 6d 61 6e 61 67 65 64 4f 6e 6c  pdb] $managedOnl d780: 79 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 y$platform "" $d790: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d verbose.. } d7a0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... d7b0: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 proc tryDeleteAs d7c0: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 sembly {.. d7d0: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b fileName { d7e0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 platform ""} {pd d7f0: 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 b true} {verbose d800: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. d810: 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 tryDeleteBinar d820: 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 yFile$fileName
d830: 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f  $platform$verbo
d840: 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  se....      if {
d850: 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  $pdb} then {.. d860: 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 tryDeleteB d870: 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e inaryFile [appen d880: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. d890: 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e [file rootn d8a0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e ame$fileName] .
d8b0: 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24  pdb] $platform$
d8c0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d  verbose..      }
d8d0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
d8e0: 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65  proc tryLoadAsse
d8f0: 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20  mbly { fileName
d900: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20  {platform ""} }
d910: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c  {..      set fil
d920: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
d930: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa d940: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d me$platform]...
d950: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
d960: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  h {..        set
d970: 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63   assembly [objec
d980: 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65  t load -loadtype
d990: 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69   File -alias $fi d9a0: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d leName].. } d9b0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. d9c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d9d0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 # NOTE: Now, d9e0: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar d9f0: 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e y test constrain da00: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. da10: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr da20: 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e aint [file rootn da30: 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 ame [file tail$
da40: 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20  fileName]]....
da50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
da60: 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
da70: 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  e image runtime
da80: 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65  version from the
da90: 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73   assembly becaus
daa0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
dab0: 20 20 20 73 65 76 65 72 61 6c 20 74 65 73 74 73     several tests
dac0: 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69   rely on it havi
dad0: 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c  ng a certain val
dae0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ue...        #..
daf0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
db00: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
db10: 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  s [file tail $fi db20: 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 leName] _ \.. db30: 20 20 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d [$assem
db40: 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65  bly ImageRuntime
db50: 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20  Version]]....
db60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
db70: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
db80: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20  he full path of
db90: 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e  the loaded file.
dba0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
dbb0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c       return $fil dbc0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a eName.. }.. dbd0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 .. return " dbe0: 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ".. }..... dbf0: 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 proc isSQLiteRe dc00: 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ady {} {.. dc10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: dc20: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure dc30: 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d must return non- dc40: 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 zero only if the dc50: 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a SQLite native.. dc60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 # li dc70: 62 72 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 brary and the Sy dc80: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite dc90: 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl dca0: 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 y are loaded.. dcb0: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and dcc0: 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 ready for use by dcd0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. dce0: 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 Currently, thi dcf0: 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 s procedure.. dd00: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c # shoul dd10: 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 d be called only dd20: 20 61 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c after the [tryL dd30: 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f oadAssembly] pro dd40: 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 cedure has.. dd50: 20 20 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 # been c dd60: 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 alled to probe f dd70: 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 or the System.Da dd80: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 ta.SQLite manage dd90: 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 d assembly.. dda0: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 # and th ddb0: 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 e [checkForSQLit ddc0: 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 e] procedure has ddd0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 been called to dde0: 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 probe for.. ddf0: 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c # the SQL de00: 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 ite native libra de10: 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 ry; otherwise, t de20: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 his procedure wi de30: 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 ll simply.. de40: 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 # always de50: 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 return zero... de60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret de70: 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 urn [expr {.. de80: 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 [haveConstr de90: 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 aint System.Data dea0: 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 .SQLite] && [hav deb0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 eConstraint SQLi dec0: 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 te].. }].. ded0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro dee0: 63 20 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 c matchPlatform def0: 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a { platform } {.. df00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # df10: 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 NOTE: An empty df20: 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 string for the p df30: 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 latform means th df40: 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 at the build is df50: 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 not.. # df60: 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 [primarily] a df70: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 native build; t df80: 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 herefore, it alw df90: 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 ays matches... dfa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if dfb0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length dfc0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d$platform] == 0}
dfd0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
dfe0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
dff0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
e000: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
e010: 49 66 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e  If the machine n
e020: 61 6d 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ame is unavailab
e030: 6c 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74  le, there is not
e040: 68 69 67 6e 20 65 6c 73 65 20 77 65 0d 0a 20 20  hign else we..
e050: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 20      #       can
e060: 64 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  do...      #..
e070: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
e080: 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74  xists ::tcl_plat
e090: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20  form(machine)]}
e0a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
e0b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
e0c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
e0d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
e0e0: 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 69  Does the specifi
e0f0: 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63  ed platform matc
e100: 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 72  h up to the curr
e110: 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20  ent process?..
e120: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
e130: 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d  {$platform eq [m e140: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform e150: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
e160: 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e  (machine)]} then
e170: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
e180: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d  rn true..      }
e190: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
e1a0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73     # NOTE: The s
e1b0: 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72  pecified platfor
e1c0: 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  m does not match
e1d0: 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c 61   up with the pla
e1e0: 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20  tform..      #
e1f0: 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 72       for the cur
e200: 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process...
e210: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
e220: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
e230: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68  }.....    proc h
e240: 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
e250: 6f 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20  ommand {} {..
e260: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
e270: 54 45 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a 65  TE: Is the [obje
e280: 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72  ct] command curr
e290: 65 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f  ently available?
e2a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e2b0: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b   return [expr {[
e2c0: 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f  llength [info co
e2d0: 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20  mmands object]]
e2e0: 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  > 0}]..    }....
e2f0: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46  .    proc checkF
e300: 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  orSQLiteObjectCo
e310: 6d 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20  mmand { channel
e320: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  } {..      tputs
e330: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- e340: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f checking for \"o e350: 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 bject\" command e360: 75 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 usage... ".... e370: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e e380: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 xists ::no(sqlit e390: 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d eObjectCommand)] e3a0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. e3b0: 20 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 [haveSQLiteObje e3c0: 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then e3d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput e3e0: 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
e3f0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
e400: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
e410: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c       # NOTE: Unl
e420: 65 73 73 20 77 65 20 61 72 65 20 66 6f 72 62 69  ess we are forbi
e430: 64 64 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20  dden from doing
e440: 73 6f 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e  so, add some con
e450: 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20 20  straints..
e460: 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 77    #       that w
e470: 69 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f  ill allow most o
e480: 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  f the test suite
e490: 20 74 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74 68   to run (i.e. th
e4a0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ose..        #
e4b0: 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20       tests that
e4c0: 64 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20  do not directly
e4d0: 72 65 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f  rely upon the [o
e4e0: 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e  bject] command).
e4f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
e500: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
e510: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d  exists ::no(shim
e520: 53 51 4c 69 74 65 41 73 73 65 6d 62 6c 79 43 6f  SQLiteAssemblyCo
e530: 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65  nstraints)]} the
e540: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61  n {..          a
e550: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c  ddConstraint SQL
e560: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61  ite..          a
e570: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c  ddConstraint SQL
e580: 69 74 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20  iteInterop..
e590: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
e5a0: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
e5b0: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20  SQLite..
e5c0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
e5d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
e5e0: 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20  te.Encryption..
e5f0: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73           addCons
e600: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61  traint System.Da
e610: 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a  ta.SQLite.Linq..
e620: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
e630: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
e640: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
e650: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
e660: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20  ta.SQLite.dll_v
e670: 5b 67 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73  [getBuildClrVers
e680: 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ion]]..        }
e690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
e6a0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
e6b0: 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 44 65 66  no(shimSQLiteDef
e6c0: 69 6e 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74  ineConstantConst
e6d0: 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b  raints)]} then {
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
e6f0: 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61  ach defineConsta
e700: 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  nt [list \..
e710: 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
e720: 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43  P_EXTENSION_FUNC
e730: 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54  TIONS INTEROP_FT
e740: 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a  S5_EXTENSION \..
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e                IN
e760: 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45  TEROP_JSON1_EXTE
e770: 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 45  NSION INTEROP_PE
e780: 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49  RCENTILE_EXTENSI
e790: 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ON \..
e7a0: 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45      INTEROP_REGE
e7b0: 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  XP_EXTENSION INT
e7c0: 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
e7d0: 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ION \..
e7e0: 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53 45 53       INTEROP_SES
e7f0: 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 49  SION_EXTENSION I
e800: 4e 54 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45  NTEROP_SHA1_EXTE
e810: 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
e820: 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54         INTEROP_T
e830: 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20  OTYPE_EXTENSION
e840: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
e850: 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20  TABLE \..
e860: 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52         USE_INTER
e870: 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20  OP_DLL] {..
e880: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
e890: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
e8a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
e8b0: 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 44 65      [getSQLiteDe
e8c0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66  fineConstantPref
e8d0: 69 78 5d 20 24 64 65 66 69 6e 65 43 6f 6e 73 74  ix] $defineConst e8e0: 61 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ant].. e8f0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... e900: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in e910: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s e920: 68 69 6d 53 51 4c 69 74 65 56 69 73 75 61 6c 53 himSQLiteVisualS e930: 74 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e 74 73 tudioConstraints e940: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. e950: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra e960: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs e970: 76 69 73 75 61 6c 53 74 75 64 69 6f 20 5b 67 65 visualStudio [ge e980: 74 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 tBuildYear]].. e990: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... e9a0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
e9b0: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d  l no\n..      }.
e9c0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
e9d0: 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65  roc changeNative
e9e0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 7b 20  RuntimeOption {
e9f0: 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20  native } {..
ea00: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b    if {[llength [
ea10: 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65  info commands de
ea20: 62 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c 0d 0a  bug]] > 0 && \..
ea30: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67            [lleng
ea40: 74 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f 6d 6d  th [info subcomm
ea50: 61 6e 64 73 20 64 65 62 75 67 20 72 75 6e 74 69  ands debug runti
ea60: 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 20 26  meoption]] > 0 &
ea70: 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  & [catch {..
ea80: 20 20 20 20 64 65 62 75 67 20 72 75 6e 74 69 6d      debug runtim
ea90: 65 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20 7b 24  eoption [expr {$eaa0: 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a native ? "add" : eab0: 20 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 "remove"}] nati eac0: 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 ve.. }] == ead0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. eae0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. eaf0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... eb00: 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite eb10: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 ObjectCommand] & eb20: 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 & [catch {.. eb30: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok eb40: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 e Interpreter.Ge eb50: 74 41 63 74 69 76 65 20 5b 65 78 70 72 20 7b 24 tActive [expr {$
eb60: 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20  native ? \..
eb70: 20 20 20 20 20 20 20 20 22 41 64 64 52 75 6e 74          "AddRunt
eb80: 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65  imeOption" : "Re
eb90: 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f  moveRuntimeOptio
eba0: 6e 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20  n"}] native..
ebb0: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e     }] == 0} then
ebc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
ebd0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d  rn true..      }
ebe0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
ebf0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
ec00: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
ec10: 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20  ForSQLiteBuilds
ec20: 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63  { channel {selec
ec30: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
ec40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
ec50: 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 65  OTE: Check for e
ec60: 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 76 61  very possible va
ec70: 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  lid combination
ec80: 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 77  of values used w
ec90: 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hen..      #
eca0: 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20     locating out
ecb0: 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74  the build output
ecc0: 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 6f 77   directory, show
ecd0: 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c 61 62  ing each availab
ece0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
ecf0: 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 69 6f    build variatio
ed00: 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e  n along the way.
ed10: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
ed20: 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 65 20   foreach native
ed30: 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 75 65  [list false true
ed40: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ] {..        for
ed50: 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 42 75  each year [getBu
ed60: 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20  ildYears] {..
ed70: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 63         foreach c
ed80: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65  onfiguration [ge
ed90: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
eda0: 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ions] {..
edb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
edc0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
edd0: 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 65 63  re out the effec
ede0: 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 74 66  tive build platf
edf0: 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d 0a 20  orm.  This is..
ee00: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
ee10: 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74     based on whet
ee20: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72  her or not a [pr
ee30: 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 20  imarily] native
ee40: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20  build..
ee50: 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62 65     #       is be
ee60: 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 20 5b  ing used.  For [
ee70: 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e  primarily] non-n
ee80: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a 20  ative builds,..
ee90: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
eea0: 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20     this will be
eeb0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  an empty string.
eec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
eed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
eee0: 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75   platform [getBu
eef0: 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74  ildPlatform $nat ef00: 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ive].... ef10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
ef20: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
ef30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ef40: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
ef50: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
ef60: 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 5c 22  .SQLite build \"
ef70: 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 20  " [expr \..
ef80: 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74             {$nat ef90: 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 ive ? "native/" efa0: 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 : ""}] [expr {[s efb0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a tring length \.. efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 efd0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f$platform] > 0 ?
efe0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 6c   [appendArgs $pl eff0: 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d atform /] : ""}] f000: 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 20 20$year \..
f010: 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 6f 6e            / $con f020: 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e 2e figuration "\".. f030: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 . "].... f040: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. f050: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build f060: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali f070: 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 fied directory w f080: 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 here the necessa f090: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ry.. f0a0: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e # componen f0b0: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ts for System.Da f0c0: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 ta.SQLite should f0d0: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 be found... f0e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f0f0: 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 set direc f100: 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 tory [joinBuildD f110: 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 irectory$native
f120: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f130: 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 61 73      [getBuildBas
f140: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 65 61  eDirectory] $yea f150: 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e r$platform $con f160: 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 figuration].... f170: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. f180: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE f190: 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73 73 61 : Do the necessa f1a0: 72 79 20 66 69 6c 65 73 20 65 78 69 73 74 3f 20 ry files exist? f1b0: 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f Currently, no o f1c0: 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20 20 20 ther steps.. f1d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # f1e0: 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 are taken to ver f1f0: 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 ify this build i f200: 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c s actually viabl f210: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... f220: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 #.. i f230: 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 69 6c f {[isBuildAvail f240: 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24 64 69 able$native $di f250: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b rectory]} then { f260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f270: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. f280: 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e # NOTE: When in f290: 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 "select" mode, f2a0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se f2b0: 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 0d 0a lect the first.. f2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # f2d0: 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 available f2e0: 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e build of System. f2f0: 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 Data.SQLite and f300: 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 then return.. f310: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # f320: 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d immediately.. f330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # f340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f350: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b if {$select && [
f360: 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70  matchPlatform $p f370: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { f380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f390: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. f3a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e # NOTE: Man f3b0: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 ually override a f3c0: 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 ll the build dir f3d0: 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e ectory selection f3e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f3f0: 20 20 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 # relate f400: 64 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 d test settings f410: 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 in order to forc f420: 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 e this build.. f430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # f440: 20 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e of System. f450: 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 Data.SQLite to b f460: 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 e used... f470: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f480: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { f490: 21 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 ![changeNativeRu f4a0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e 61 74 ntimeOption$nat
f4b0: 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ive]} then {..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f4d0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ f4e0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f500: 20 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65 64 20 "no, failed f510: 74 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 to " [expr {$nat
f520: 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72  ive ? "add" : "r
f530: 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 20 20  emove"}] \..
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f550: 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69 76 65    " the \"native
f560: 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  \" runtime optio
f570: 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  n\n"]....
f580: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f590: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  n false..
f5a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
f5c0: 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 79  t ::test_year $y f5d0: 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ear.. f5e0: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f set ::test_ f5f0: 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f platform$platfo
f600: 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..
f610: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63      set ::test_c
f620: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63 6f  onfiguration $co f630: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 nfiguration.... f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t f650: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
f660: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f680: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20   "yes, selected
f690: 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76  (" [expr {$nativ f6a0: 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 e ? "native/" : f6b0: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ""}] \.. f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 [exp f6d0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt f6e0: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 h$platform] > 0
f6f0: 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c   ? [appendArgs \
f700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f710: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20        $platform f720: 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 /] : ""}]$year
f730: 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  / $configuration f740: 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ")\n"].... f750: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur f760: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. f770: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f790: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
f7a0: 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  es\n..
f7b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
f7c0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
f7d0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
f7e0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. f800: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. f810: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. f820: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 .. return f f830: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a alse.. }..... f840: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo f850: 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 rSQLiteReleases f860: 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 { channel {selec f870: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. f880: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N f890: 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 70 OTE: Check for p f8a0: 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66 20 ast releases of f8b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi f8c0: 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 63 74 te in the direct f8d0: 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ory.. # f8e0: 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 contained in f8f0: 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 the "System.Data f900: 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f 6e .SQLite" environ f910: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 69 ment variable, i f920: 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 f.. # f930: 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 present... f940: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i f950: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 nfo exists ::env f960: 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c (System.Data.SQL f970: 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ite)] && \.. f980: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le f990: 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 74 ngth$::env(Syst
f9a0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d  em.Data.SQLite)]
f9b0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
f9c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f9d0: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
f9e0: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69  he fully qualifi
f9f0: 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68 65  ed directory whe
fa00: 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  re the necessary
fa10: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
fa20: 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72    components for
fa30: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
fa40: 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f  ite should be fo
fa50: 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  und...        #.
fa60: 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72  .        set dir
fa70: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61 74  ectory [file nat
fa80: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
fa90: 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
faa0: 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e    $::env(System. fab0: 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 65 Data.SQLite) [ge fac0: 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 5d tReleaseVersion] fad0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 ]].... tp fae0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
faf0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
fb00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
fb10: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
fb20: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65  m.Data.SQLite re
fb30: 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20  lease \"" \..
fb40: 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63 74           $direct fb50: 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d ory "\"... "]... fb60: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 . if {[is fb70: 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 ReleaseAvailable fb80: 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c 61 74$directory plat
fb90: 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  form]} then {..
fba0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
fbb0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61  ring length $pla fbc0: 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 tform] == 0} the fbd0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. fbe0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e set platform un fbf0: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 known.. fc00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... fc10: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b if {$select && [
fc20: 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70  matchPlatform $p fc30: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { fc40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se fc50: 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 t ::build_direct fc60: 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a ory$directory..
fc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
fc80: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap fc90: 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 pendArgs "yes, s fca0: 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 elected ("$plat
fcb0: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20  form ")\n"]....
fcc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
fcd0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  n true..
fce0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 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 5b 61 70 70 65 6e 64 41 72 hannel [appendAr fd10: 67 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 gs "yes ("$plat
fd20: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20  form ")\n"]..
fd30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
fd40: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
fd50: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha fd60: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 nnel no\n.... fd70: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c if {![fil fd80: 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74 e exists$direct
fd90: 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20  ory] || \..
fda0: 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20           ![file
fdb0: 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72  isdirectory $dir fdc0: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d ectory]} then {. fdd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu fde0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
fdf0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
fe00: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
fe10: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
fe20: 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44  iable \"System.D
fe30: 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20  ata.SQLite\" is
fe40: 61 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  an " \..
fe50: 20 20 20 20 20 20 20 20 22 69 6e 76 61 6c 69 64          "invalid
fe60: 20 64 69 72 65 63 74 6f 72 79 2c 20 73 6b 69 70   directory, skip
fe70: 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72  ping check for r
fe80: 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a  eleases...\n"]..
fe90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
fea0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
feb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
fec0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 74       foreach pat
fed0: 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61  h [lsort -decrea
fee0: 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20  sing [file list
fef0: 24 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b  $directory *]] { ff00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if ff10: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
ff20: 70 61 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69  path] && [file i
ff30: 73 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68  sdirectory $path ff40: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. ff50: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
ff60: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
ff70: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
ff80: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
ff90: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
ffa0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
ffb0: 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  elease \"" \..
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ffd0: 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d  $path "\"... "]. ffe0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... fff0: 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 if {[isReleaseA 10000 76 61 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70 vailable$path p
10010 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b  latform]} then {
10020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10030 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
10040 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 10050 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10070 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b set platform unk 10080 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 nown.. 10090 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 100a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 if {$
100b0 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68  select && [match
100c0 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f  Platform $platfo 100d0 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 rm]} then {.. 100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s 100f0 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 et ::build_direc 10100 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20 tory$path....
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10120 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 10130 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c appendArgs "yes, 10140 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c selected ("$pl
10150 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d  atform ")\n"]...
10160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
10170 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10190 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
101a0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
101b0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 101c0 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 ndArgs "yes ("$
101d0 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d  platform ")\n"].
101e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
101f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
10200 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10210 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
10220 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 10230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 10240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 10250 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 10260 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 10270 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10280 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10290 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
102a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
102b0 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
102c0 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44  iable \"System.D
102d0 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20  ata.SQLite\" is
102e0 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  not " \..
102f0 20 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70       "set, skipp
10300 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65  ing check for re
10310 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20  leases...\n"]..
10320 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
10330 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
10340 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
10350 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c   checkForSQLiteL
10360 69 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c  ibrary { channel
10370 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
10380 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 10390 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 checking for SQ 103a0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 103b0 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 103c0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 103d0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 103e0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 103f0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 10400 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 10410 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 10420 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 SQLiteVersion.. 10430 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 } version] 10440 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 10450 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10460 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 10470 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 f the returned v 10480 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e ersion was null. 10490 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 If so, make it 104a0 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # 104b0 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d to spot.. 104c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 104d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 104e0 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d length$version]
104f0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
10500 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72           set ver
10510 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  sion null..
10520 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10530 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
10540 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75  E: Attempt to qu
10550 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
10560 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
10570 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d   for the SQLite.
10580 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
10590 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
105a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
105b0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
105c0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
105d0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
105e0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
105f0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
10600 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
10610 51 4c 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75  QLite3 SQLiteSou
10620 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d  rceId..        }
10630 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e   sourceId]} then
10640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
10650 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
10660 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20  E: We failed to
10670 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c  query the Fossil
10680 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69   source identifi
10690 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  er...          #
106a0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
106b0 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e  sourceId unknown
106c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
106d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
106e0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
106f0 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  if the returned
10700 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64  Fossil source id
10710 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c  entifier was nul
10720 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  l.  If..
10730 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65  #       so, make
10740 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74   it easy to spot
10750 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
10760 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
10770 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65  g length $source 10780 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b Id] == 0} then { 10790 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 107a0 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 sourceId null.. 107b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 107c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 107d0 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 NOTE: Yes, the 107e0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 107f0 61 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 ary appears to b 10800 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 e available... 10810 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10820 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S 10830 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 QLite.... 10840 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 10850 54 45 3a 20 52 65 63 6f 72 64 20 76 65 72 73 69 TE: Record versi 10860 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 on of the SQLite 10870 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 66 6f core library fo 10880 72 20 6c 61 74 65 72 20 75 73 65 0d 0a 20 20 20 r later use.. 10890 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 20 # by 108a0 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 test constraint 108b0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 65 74 63 expressions, etc 108c0 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 . If this value 108d0 20 68 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 has.. # 108e0 20 20 20 20 20 20 61 6c 72 65 61 64 79 20 62 65 already be 108f0 65 6e 20 73 65 74 20 28 6f 72 20 6f 76 65 72 72 en set (or overr 10900 69 64 64 65 6e 29 2c 20 73 6b 69 70 20 73 65 74 idden), skip set 10910 74 69 6e 67 20 69 74 2e 0d 0a 20 20 20 20 20 20 ting it... 10920 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 10930 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 10940 3a 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f 76 65 :core_library_ve 10950 72 73 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a rsion]} then {.. 10960 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: 10970 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f 76 65 72 core_library_ver 10980 73 69 6f 6e 20 24 76 65 72 73 69 6f 6e 0d 0a 20 sion$version..
10990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
109a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 109b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 109c0 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 yes ("$version
109d0 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29  " " $sourceId ") 109e0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c \n"].. } el 109f0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 10a00 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c uts$channel no\
10a10 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..
10a20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
10a30 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74  heckForSQLiteInt
10a40 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  erop { channel }
10a50 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
10a60 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c 10a70 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 hecking for SQLi 10a80 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem 10a90 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 bly... ".... 10aa0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 10ab0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 10ac0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 10ad0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 10ae0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 10af0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 10b00 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e 3 InteropVersion 10b10 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f .. } versio 10b20 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. 10b30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 10b40 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 10b50 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 k if the returne 10b60 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 d version was nu 10b70 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 ll. If so, make 10b80 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 it easy.. 10b90 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f # to spo 10ba0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 10bb0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 10bc0 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 ng length$versi
10bd0 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
10be0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
10bf0 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20  version null..
10c00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
10c10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
10c20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
10c30 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69   query the Fossi
10c40 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
10c50 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ier for the SQLi
10c60 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  te..        #
10c70 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79      core library
10c80 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
10c90 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
10ca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
10cb0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
10cc0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
10cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
10ce0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
10cf0 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f  e.SQLite3 Intero
10d00 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  pSourceId..
10d10 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20     } sourceId]}
10d20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10d30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
10d40 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64   NOTE: We failed
10d50 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
10d60 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
10d70 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20  tifier...
10d80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
10d90 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b  set sourceId unk
10da0 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  nown..        }.
10db0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
10dc0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
10dd0 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
10de0 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63  ned Fossil sourc
10df0 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73  e identifier was
10e00 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20   null.  If..
10e10 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20      #       so,
10e20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20  make it easy to
10e30 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
10e40 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
10e50 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f  tring length $so 10e60 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 urceId] == 0} th 10e70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 10e80 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c set sourceId nul 10e90 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a l.. }.... 10ea0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10eb0 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f 72 # NOTE: Befor 10ec0 65 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69 6e e actually addin 10ed0 67 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74 g the test const 10ee0 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72 65 raint, make sure 10ef0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 10f00 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69 73 version is 10f10 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f 74 valid (i.e. not 10f20 20 6a 75 73 74 20 74 68 61 74 20 77 65 20 63 6f just that we co 10f30 75 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d 0a uld query it)... 10f40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10f50 20 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e 20 if {$version
10f60 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20  ne "null"} then
10f70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
10f80 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
10f90 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74  : Yes, the SQLit
10fa0 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
10fb0 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  ly appears to be
10fc0 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
10fd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10fe0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
10ff0 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d  t SQLiteInterop.
11000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
11010 20 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20 20   answer yes..
11020 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
11030 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73           set ans
11040 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20 20  wer no..
11050 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  }....        tpu
11060 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 11070 65 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72 20 endArgs$answer
11080 22 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20  " (" $version " 11090 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e "$sourceId ")\n
110a0 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  "]..      } else
110b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
110c0 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 110d0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 110e0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che 110f0 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e ckForSQLiteDefin 11100 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e eConstant { chan 11110 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 nel name } {.. 11120 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
11130 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
11140 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d  ..          "---
11150 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
11160 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
11170 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e  e define constan
11180 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20  t \"" $name \.. 11190 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 "\"... 111a0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b "].... if { 111b0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 111c0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 111d0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 111e0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 111f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 11200 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 ite.SQLite3 Defi 11210 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 neConstants.. 11220 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 } defineConst 11230 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ants] == 0} then 11240 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 11250 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 [lsearch -exact 11260 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43 -nocase$defineC
11270 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20  onstants $name] 11280 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 != -1} then {.. 11290 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 112a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye 112b0 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63 s, this define c 112c0 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62 onstant was enab 112d0 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e led when the man 112e0 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 aged.. 112f0 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 11300 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a was compiled... 11310 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 11320 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 11330 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 11340 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e [getSQLiteDefin 11350 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d eConstantPrefix] 11360 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20$name]....
11370 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11380 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. 11390 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 113a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
113b0 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
113c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
113d0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
113e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72  puts $channel er 113f0 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a ror\n.. }.. 11400 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 11410 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 oc checkForSQLit 11420 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 7b eCompileOption { 11430 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 channel name } 11440 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 {.. tputs$
11450 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
11460 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
11470 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
11480 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72  for SQLite inter
11490 6f 70 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70  op assembly comp
114a0 69 6c 65 20 6f 70 74 69 6f 6e 20 5c 22 22 20 5c  ile option \"" \
114b0 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d  ..          $nam 114c0 65 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 e "\"... "].... 114d0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 114e0 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 114f0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 11500 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 11510 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 11520 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 11530 69 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 ite3 InteropComp 11540 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 ileOptions.. 11550 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f } compileOptio 11560 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ns] == 0} then { 11570 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c .. if {[l 11580 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e search -exact -n 11590 6f 63 61 73 65 20 24 63 6f 6d 70 69 6c 65 4f 70 ocase$compileOp
115a0 74 69 6f 6e 73 20 24 6e 61 6d 65 5d 20 21 3d 20  tions $name] != 115b0 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 -1} then {.. 115c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 115d0 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 # NOTE: Yes, 115e0 74 68 69 73 20 63 6f 6d 70 69 6c 65 20 6f 70 74 this compile opt 115f0 69 6f 6e 20 77 61 73 20 65 6e 61 62 6c 65 64 20 ion was enabled 11600 77 68 65 6e 20 74 68 65 20 69 6e 74 65 72 6f 70 when the interop 11610 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 11620 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 assembly was 11630 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 compiled... 11640 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11650 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 11660 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 [appendArgs [ge 11670 74 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 tSQLiteCompileOp 11680 74 69 6f 6e 50 72 65 66 69 78 5d 20 24 6e 61 6d tionPrefix]$nam
11690 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
116a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y 116b0 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 es\n.. } 116c0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 116d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
116e0 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d   no\n..        }
116f0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
11700 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
11710 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e  $channel error\n 11720 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 11730 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
11740 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
11750 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d  .          "----
11760 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51   checking for SQ
11770 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
11780 79 20 63 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e  y compile option
11790 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
117a0 20 20 24 6e 61 6d 65 20 22 5c 22 2e 2e 2e 20 22    $name "\"... " 117b0 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ 117c0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 117d0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 117e0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 117f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11800 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 11810 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 te.SQLite3 SQLit 11820 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d eCompileOptions. 11830 0a 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 . } compile 11840 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 Options] == 0} t 11850 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 11860 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 f {[lsearch -exa 11870 63 74 20 2d 6e 6f 63 61 73 65 20 24 63 6f 6d 70 ct -nocase$comp
11880 69 6c 65 4f 70 74 69 6f 6e 73 20 24 6e 61 6d 65  ileOptions $name 11890 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d ] != -1} then {. 118a0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 118b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 118c0 59 65 73 2c 20 74 68 69 73 20 63 6f 6d 70 69 6c Yes, this compil 118d0 65 20 6f 70 74 69 6f 6e 20 77 61 73 20 65 6e 61 e option was ena 118e0 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 53 51 bled when the SQ 118f0 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Lite.. 11900 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 # core lib 11910 72 61 72 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 rary was compile 11920 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 11930 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f . addCo 11940 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 11950 41 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 43 Args [getSQLiteC 11960 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 50 72 65 66 ompileOptionPref 11970 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 ix]$name]....
11980 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 11990 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 hannel yes\n.. 119a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 119b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 119c0 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
119d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
119e0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
119f0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 11a00 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 error\n.. 11a10 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 11a20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d proc getDateTim 11a30 65 46 6f 72 6d 61 74 20 7b 20 7b 74 69 6d 65 5a eFormat { {timeZ 11a40 6f 6e 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 one true} } {.. 11a50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 11a60 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 11a70 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 dure simply retu 11a80 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 rns the "default 11a90 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 " DateTime forma 11aa0 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 t used.. # 11ab0 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 by the tes 11ac0 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 11ad0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 11ae0 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 fo exists ::date 11af0 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 time_format] && 11b00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 11b10 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
11b20 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
11b30 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
11b40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11b50 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
11b60 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  he manually over
11b70 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72  ridden value for
11b80 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   the DateTime fo
11b90 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  rmat...        #
11ba0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11bb0 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72   $::datetime_for 11bc0 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 mat.. } els 11bd0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 11be0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 11bf0 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 Return an ISO860 11c00 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 1 DateTime forma 11c10 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 t compatible wit 11c20 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 h SQLite,.. 11c30 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 # Syste 11c40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 m.Data.SQLite, a 11c50 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 nd suitable for 11c60 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 round-tripping w 11c70 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ith the.. 11c80 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d # DateTim 11c90 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 e class of the f 11ca0 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 ramework. If th 11cb0 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e is value is chan 11cc0 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ged,.. # 11cd0 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 various te 11ce0 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 sts may fail... 11cf0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11d00 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 return [append 11d10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 11d20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 "yyyy-MM-dd 11d30 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 HH:mm:ss.FFFFFFF 11d40 22 20 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f " [expr {$timeZo
11d50 6e 65 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d  ne ? "K" : ""}]]
11d60 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
11d70 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
11d80 74 44 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b  tDateTimeTicks {
11d90 20 76 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22   value {local ""
11da0 7d 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d  } {default ""} }
11db0 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   {..      if {[s
11dc0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 11dd0 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 lue] == 0} then 11de0 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 11df0 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 n$default..
11e00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
11e10 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
11e20 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20     set dateTime
11e30 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
11e40 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20  create \..
11e50 20 20 20 20 20 20 2d 70 61 72 61 6d 65 74 65 72        -parameter
11e60 74 79 70 65 73 20 5b 6c 69 73 74 20 53 74 72 69  types [list Stri
11e70 6e 67 20 53 74 72 69 6e 67 20 49 46 6f 72 6d 61  ng String IForma
11e80 74 50 72 6f 76 69 64 65 72 20 5c 0d 0a 20 20 20  tProvider \..
11e90 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
11ea0 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 2e 44 61  Globalization.Da
11eb0 74 65 54 69 6d 65 53 74 79 6c 65 73 5d 20 44 61  teTimeStyles] Da
11ec0 74 65 54 69 6d 65 20 50 61 72 73 65 45 78 61 63  teTime ParseExac
11ed0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
11ee0 20 24 76 61 6c 75 65 20 5b 67 65 74 44 61 74 65   $value [getDate 11ef0 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e 75 6c 6c TimeFormat] null 11f00 20 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 AdjustToUnivers 11f10 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d 7d 20 74 al].. }]} t 11f20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 11f30 65 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a eturn$default..
11f40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
11f50 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20   if {[string is
11f60 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 63 74 20  boolean -strict
11f70 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e 20 7b 0d  $local]} then {. 11f80 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 . set dat 11f90 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e eTime [object in 11fa0 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 61 74 voke -create Dat 11fb0 65 54 69 6d 65 20 53 70 65 63 69 66 79 4b 69 6e eTime SpecifyKin 11fc0 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d \.. 11fd0 20 24 64 61 74 65 54 69 6d 65 20 55 74 63 5d 0d$dateTime Utc].
11fe0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
11ff0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
12000 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $12010 64 61 74 65 54 69 6d 65 20 54 69 63 6b 73 5d 0d dateTime Ticks]. 12020 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 12030 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d 20 74 68 if {$local} th
12040 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
12050 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76  turn [object inv
12060 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f  oke $dateTime To 12070 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d LocalTime.Ticks] 12080 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 12090 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 120a0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 120b0 24 64 61 74 65 54 69 6d 65 20 54 6f 55 6e 69 76$dateTime ToUniv
120c0 65 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d  ersalTime.Ticks]
120d0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
120e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
120f0 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62  tProperties { ob
12100 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b  ject varName } {
12110 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
12120 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74  $varName propert 12130 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 ies.... set 12140 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20 20 20 20 count 0.. 12150 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69 73 74 5d set names [list] 12160 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 .... if {[i 12170 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 6f sObjectHandle$o
12180 62 6a 65 63 74 5d 20 26 26 20 24 6f 62 6a 65 63  bject] && $objec 12190 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 t ne "null"} the 121a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 n {.. eva 121b0 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 l lappend names 121c0 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 [object members 121d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \.. - 121e0 6d 65 6d 62 65 72 74 79 70 65 73 20 50 72 6f 70 membertypes Prop 121f0 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 erty -nameonly$
12200 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 20 20 20  object]....
12210 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
12220 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65  names [object me
12230 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20 20  mbers \..
12240 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70 65       -membertype
12250 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65 6f 6e 6c  s Field -nameonl
12260 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 20  y $object].. 12270 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 }.... for 12280 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 each name$names
12290 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
122a0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
122b0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
122c0 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b  e -objectflags +
122d0 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62 6a 65 63  NoDispose $objec 122e0 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 t$name..
122f0 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20   } value] == 0}
12300 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12310 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48    if {[isObjectH
12320 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d 20 26 26  andle $value] && 12330 20 24 76 61 6c 75 65 20 6e 65 20 22 6e 75 6c 6c$value ne "null
12340 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..
12350 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72         set error
12360 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 20 69 6e   null; object in
12370 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
12380 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
12390 20 20 20 20 20 20 20 20 20 20 2d 6d 61 72 73 68            -marsh
123a0 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 6e 64 6c  alflags +NoHandl
123b0 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
123c0 74 41 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 20  tActive \..
123d0 20 20 20 20 20 20 20 20 20 20 20 41 64 64 4f 62             AddOb
123e0 6a 65 63 74 52 65 66 65 72 65 6e 63 65 20 4f 6b  jectReference Ok
123f0 20 24 76 61 6c 75 65 20 65 72 72 6f 72 0d 0a 0d   $value error... 12400 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 . lap 12410 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28 pend properties( 12420 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73 74 20 24 objects) [list$
12430 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20  name $value].. 12440 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 12450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .. la 12460 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 ppend properties 12470 28 76 61 6c 75 65 73 29 20 5b 6c 69 73 74 20 24 (values) [list$
12480 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20  name $value].. 12490 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 124a0 20 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75 6e incr coun 124b0 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 t.. } els 124c0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c e {.. l 124d0 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 append propertie 124e0 73 28 65 72 72 6f 72 73 29 20 5b 6c 69 73 74 20 s(errors) [list 124f0 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f 72 43 6f$name $::errorCo 12500 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a de].. }.. 12510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 12520 20 72 65 74 75 72 6e 20 24 63 6f 75 6e 74 0d 0a return$count..
12530 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
12540 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74  oc getAllPropert
12550 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72  ies { object var
12560 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
12570 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 12580 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 properties.. 12590 20 20 20 73 65 74 20 76 61 6c 75 65 20 24 6f 62 set value$ob
125a0 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20 20 77 68  ject....      wh
125b0 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d 0a 20 20  ile {true} {..
125c0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
125d0 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69   exists properti
125e0 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d  es(seenObjects)]
125f0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
12600 20 20 20 24 76 61 6c 75 65 20 6e 69 20 24 70 72     $value ni$pr
12610 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a  operties(seenObj
12620 65 63 74 73 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  ects)} then {..
12630 20 20 20 20 20 20 20 20 20 67 65 74 50 72 6f 70           getProp
12640 65 72 74 69 65 73 20 24 76 61 6c 75 65 20 70 72  erties $value pr 12650 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 operties.. 12660 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 lappend prop 12670 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 erties(seenObjec 12680 74 73 29 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 ts)$value..
12690 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
126a0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
126b0 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62  ts properties(ob
126c0 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  jects)]} then {.
126d0 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
126e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
126f0 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e         if {[llen
12700 67 74 68 20 24 70 72 6f 70 65 72 74 69 65 73 28  gth $properties( 12710 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20 30 7d 20 objects)] == 0} 12720 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12730 20 20 75 6e 73 65 74 20 70 72 6f 70 65 72 74 69 unset properti 12740 65 73 28 6f 62 6a 65 63 74 73 29 3b 20 62 72 65 es(objects); bre 12750 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ak.. }... 12760 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c . set val 12770 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e 64 ue [lindex [lind 12780 65 78 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f ex$properties(o
12790 62 6a 65 63 74 73 29 20 30 5d 20 65 6e 64 5d 0d  bjects) 0] end].
127a0 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f  .        set pro
127b0 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29  perties(objects)
127c0 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f 70 65 72   [lrange $proper 127d0 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 31 20 ties(objects) 1 127e0 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d end].. }... 127f0 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 12800 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 exists properti 12810 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d es(seenObjects)] 12820 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12830 20 20 66 6f 72 65 61 63 68 20 76 61 6c 75 65 20 foreach value 12840 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e$properties(seen
12850 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20 20 20 20  Objects) {..
12860 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65        if {$value 12870 20 65 71 20 24 6f 62 6a 65 63 74 7d 20 63 6f 6e eq$object} con
12880 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20  tinue..
12890 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64   catch {object d
128a0 69 73 70 6f 73 65 20 24 76 61 6c 75 65 7d 0d 0a  ispose $value}.. 128b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 128c0 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65 unset prope 128d0 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 rties(seenObject 128e0 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 s).. }.. 128f0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 12900 67 65 74 56 61 72 69 61 62 6c 65 73 20 7b 20 76 getVariables { v 12910 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 63 74 73 arNames {objects 12920 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 12930 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l 12940 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f ist].... fo 12950 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 reach varName$v
12960 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  arNames {..
12970 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20     if {[uplevel
12980 31 20 5b 6c 69 73 74 20 61 72 72 61 79 20 65 78  1 [list array ex
12990 69 73 74 73 20 24 76 61 72 4e 61 6d 65 5d 5d 7d  ists $varName]]} 129a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 129b0 20 20 20 73 65 74 20 61 72 72 61 79 4e 61 6d 65 set arrayName 129c0 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a 20 20 20$varName....
129d0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 65         foreach e
129e0 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 70 6c 65  lementName [uple
129f0 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61  vel 1 [list arra
12a00 79 20 6e 61 6d 65 73 20 24 61 72 72 61 79 4e 61  y names $arrayNa 12a10 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 me]] {.. 12a20 20 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 61 70 set name [ap 12a30 70 65 6e 64 41 72 67 73 20 24 61 72 72 61 79 4e pendArgs$arrayN
12a40 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e 74 4e 61  ame ( $elementNa 12a50 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 me )].. 12a60 20 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 set varValue 12a70 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 [uplevel 1 [list 12a80 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d 0a 0d 0a set$name]]....
12a90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
12aa0 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f  $objects && [isO 12ab0 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 bjectHandle$var
12ac0 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Value]} then {..
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e                un
12ae0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
12af0 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  properties..
12b00 20 20 20 20 20 20 20 20 20 20 67 65 74 41 6c 6c            getAll
12b10 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 72 56  Properties $varV 12b20 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d alue properties. 12b30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 12b40 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result 12b50 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b 61 72 72 [list$name [arr
12b60 61 79 20 67 65 74 20 70 72 6f 70 65 72 74 69 65  ay get propertie
12b70 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s]]..
12b80 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
12b90 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
12ba0 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e   result [list $n 12bb0 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d 0a ame$varValue]..
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
12bd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
12be0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
12bf0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 56          set varV
12c00 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20  alue [uplevel 1
12c10 5b 6c 69 73 74 20 73 65 74 20 24 76 61 72 4e 61  [list set $varNa 12c20 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me]].... 12c30 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 26 if {$objects &
12c40 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c  & [isObjectHandl
12c50 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74 68  e $varValue]} th 12c60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12c70 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 12c80 61 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a ain properties.. 12c90 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 41 getA 12ca0 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 llProperties$va
12cb0 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65  rValue propertie
12cc0 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s....
12cd0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
12ce0 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 5b  [list $varName [ 12cf0 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72 array get proper 12d00 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 ties]].. 12d10 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 12d20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 12d30 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61 result [list$va
12d40 72 4e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d  rName $varValue] 12d50 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 12d60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 12d70 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 12d80 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
12d90 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e  .....    proc en
12da0 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b  umerableToList {
12db0 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d   enumerable } {.
12dc0 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
12dd0 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20  t [list]....
12de0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
12df0 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65  ngth $enumerable 12e00 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 ] == 0 ||$enume
12e10 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d  rable eq "null"}
12e20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12e30 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result. 12e40 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 12e50 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 12e60 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e -alias item$en
12e70 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20  umerable {..
12e80 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
12e90 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20  length $item] > 12ea0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 12eb0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 lappend res 12ec0 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 ult [$item ToStr
12ed0 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing]..        }.
12ee0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12ef0 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 12f00 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 12f10 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 proc catchAndRet 12f20 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 urn { script {st 12f30 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 ackTrace false} 12f40 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 {strict true} } 12f50 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 12f60 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 # NOTE: Evalua 12f70 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72 te the script pr 12f80 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 12f90 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f ller in their co 12fa0 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 ntext,.. # 12fb0 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 capturing 12fc0 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 both the result 12fd0 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 and the return c 12fe0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ode... #.. 12ff0 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 set code [c 13000 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 atch {uplevel 1 13010 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d$script} result]
13020 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
13030 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74     # NOTE: Did t
13040 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64  he script provid
13050 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
13060 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72   NOT raise an er
13070 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ror?..      #..
13080 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74       if {$strict 13090 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c &&$code == 0 |
130a0 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63  | !$strict &&$c
130b0 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b  ode != 1} then {
130c0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
130d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63       # NOTE: Suc
130e0 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20  cess.  Return a
130f0 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65  list with the re
13100 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68  turn code and th
13110 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  e result...
13120 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
13130 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65  turn [list $code 13140 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20$result]..
13150 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63   } elseif {$stac 13160 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a kTrace} then {.. 13170 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13180 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 # NOTE: Failu 13190 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 re. Our caller 131a0 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 wants a full sta 131b0 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70 ck trace (if app 131c0 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 licable),.. 131d0 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 # retur 131e0 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 n a list with th 131f0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e e return code an 13200 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 d the result ver 13210 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 batim... 13220 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 13230 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 n [list$code $r 13240 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 esult].. } 13250 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 13260 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13270 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 E: Failure. Our 13280 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 caller does not 13290 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 want a full sta 132a0 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 ck trace (if.. 132b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 132c0 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 plicable), retur 132d0 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 n a list with th 132e0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 e return code, t 132f0 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 he error.. 13300 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 # code f 13310 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 or the interpret 13320 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f er, and the erro 13330 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 r message up to 13340 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 13350 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 point where 13360 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 the stack trace 13370 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a should start... 13380 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13390 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 133a0 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f$code $::errorCo 133b0 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 de \.. 133c0 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d [extractSystem 133d0 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 DataSQLiteExcept 133e0 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 ionMessage$resu
133f0 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  lt]]..      }..
13400 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
13410 63 20 72 65 73 65 74 45 78 63 65 70 74 69 6f 6e  c resetException
13420 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
13430 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
13440 73 65 74 20 65 78 63 65 70 74 69 6f 6e 20 61 73  set exception as
13450 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
13460 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 28  is interpreter (
13470 74 6f 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20  to null)...
13480 20 23 20 20 20 20 20 20 20 54 68 69 73 20 28 70   #       This (p
13490 72 69 76 61 74 65 29 20 70 72 6f 70 65 72 74 79  rivate) property
134a0 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 6f   is maintained o
134b0 6e 20 61 20 70 65 72 2d 74 68 72 65 61 64 20 62  n a per-thread b
134c0 61 73 69 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  asis...      #..
134d0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
134e0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
134f0 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65  ublic Interprete
13500 72 2e 47 65 74 41 63 74 69 76 65 20 45 78 63 65  r.GetActive Exce
13510 70 74 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20  ption null..
13520 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
13530 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13540 63 61 74 63 68 41 6e 64 53 65 74 45 78 63 65 70  catchAndSetExcep
13550 74 69 6f 6e 20 7b 20 73 63 72 69 70 74 20 7b 76  tion { script {v
13560 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  arName ""} } {..
13570 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
13580 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20   NOTE: Evaluate
13590 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69  the script provi
135a0 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
135b0 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65  r in their conte
135c0 78 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  xt...      #..
135d0 20 20 20 20 63 61 74 63 68 20 7b 75 70 6c 65 76      catch {uplev
135e0 65 6c 20 31 20 24 73 63 72 69 70 74 7d 0d 0a 0d  el 1 $script}... 135f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13600 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the 13610 20 28 70 72 69 76 61 74 65 29 20 65 78 63 65 70 (private) excep 13620 74 69 6f 6e 20 70 72 6f 70 65 72 74 79 20 66 72 tion property fr 13630 6f 6d 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 om this interpre 13640 74 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 ter,.. # 13650 20 20 20 20 66 6f 72 20 74 68 69 73 20 74 68 72 for this thr 13660 65 61 64 2c 20 61 6e 64 20 61 64 64 20 61 73 20 ead, and add as 13670 61 6e 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 an opaque object 13680 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 0d 0a handle in the.. 13690 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 136a0 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c ntext of our cal 136b0 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 136c0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 136d0 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 length$varName
136e0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
136f0 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24         upvar 1 $13700 76 61 72 4e 61 6d 65 20 65 78 63 65 70 74 69 6f varName exceptio 13710 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 13720 20 20 20 20 73 65 74 20 65 78 63 65 70 74 69 6f set exceptio 13730 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 n [object invoke 13740 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 2d 61 \.. -a 13750 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e lias -flags +Non 13760 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 Public Interpret 13770 65 72 2e 47 65 74 41 63 74 69 76 65 20 45 78 63 er.GetActive Exc 13780 65 70 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 eption].... 13790 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 137a0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 137b0 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 ompileCSharpWith 137c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 137d0 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 text memory symb 137e0 6f 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c ols strict resul 137f0 74 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 tsVarName errors 13800 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 VarName fileName 13810 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 s.. a 13820 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 rgs } {.. # 13830 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 13840 53 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 Since we are goi 13850 6e 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d ng to use this m 13860 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 ethod name a lot 13870 2c 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 , assign it to a 13880 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13890 76 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d variable first.. 138a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 138b0 73 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 set add Referenc 138c0 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 edAssemblies.Add 138d0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 138e0 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 # NOTE: Creat 138f0 65 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 e the base comma 13900 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 nd to evaluate a 13910 6e 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 nd add the prope 13920 72 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 rty settings.. 13930 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that 13940 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 are almost alwa 13950 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 ys needed by our 13960 20 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 unit tests (i.e 13970 2e 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 . the System.. 13980 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 13990 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 System.Data asse 139a0 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 mbly references) 139b0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 139c0 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c set command [l 139d0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 139e0 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 compileCSharp$
139f0 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79  text $memory$sy
13a00 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65  mbols $strict re 13a10 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a sults errors \.. 13a20 20 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53$add S
13a30 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53  ystem.dll $add S 13a40 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 ystem.Data.dll$
13a50 61 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73  add System.Trans
13a60 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20  actions.dll \..
13a70 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy 13a80 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d stem.Xml.dll]... 13a90 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13aa0 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 # NOTE: Add all 13ab0 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c the provided fil 13ac0 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d e names as assem 13ad0 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d bly references.. 13ae0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13af0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 13b00 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20$fileNames {..
13b10 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
13b20 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74  ommand $add [get 13b30 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
13b40 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
13b50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
13b60 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
13b70 20 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d   the extra argum
13b80 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f  ents, if any, to
13b90 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20   the command to
13ba0 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20  evaluate...
13bb0 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c   #..      eval l
13bc0 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24  append command $13bd0 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d args.... #. 13be0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 13bf0 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 lias the compile 13c00 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 r local results 13c10 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 and errors varia 13c20 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 bles to the.. 13c30 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia 13c40 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 ble names provid 13c50 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 13c60 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 13c70 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 13c80 6e 67 74 68 20 24 72 65 73 75 6c 74 73 56 61 72 ngth$resultsVar
13c90 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
13ca0 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72  {..        upvar
13cb0 20 31 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61   1 $resultsVarNa 13cc0 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 me results.. 13cd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 13ce0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 13cf0 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 5d 20$errorsVarName]
13d00 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
13d10 20 20 20 20 20 75 70 76 61 72 20 31 20 24 65 72       upvar 1 $er 13d20 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f rorsVarName erro 13d30 72 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rs.. }.... 13d40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 13d50 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 NOTE: Evaluate t 13d60 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b he constructed [ 13d70 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63 compileCSharp] c 13d80 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 ommand and retur 13d90 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 13da0 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 result... 13db0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 #.. eva 13dc0 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 l$command..
13dd0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69  }.....    proc i
13de0 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65  sMemoryDb { file
13df0 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
13e00 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
13e10 20 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65   Is the specifie
13e20 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  d database file
13e30 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69  name really an i
13e40 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
13e50 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e?..      #..
13e60 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
13e70 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a  {$fileName eq ": 13e80 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 memory:" || \.. 13e90 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 13ea0 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 range$fileName
13eb0 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a   0 12] eq "file:
13ec0 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20  :memory:"}]..
13ed0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13ee0 69 73 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61  isTableInDb { na
13ef0 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20  me {varName db}
13f00 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
13f10 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
13f20 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
13f30 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
13f40 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
13f50 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
13f60 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
13f70 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e  ler.  It contain
13f80 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  s the database c
13f90 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
13fa0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20   that will be..
13fb0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
13fc0 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
13fd0 20 71 75 65 72 79 20 75 73 65 64 20 74 6f 20 64   query used to d
13fe0 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the
13ff0 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a  named table is..
14000 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
14010 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61  esent in that da
14020 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23  tabase...      #
14030 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
14040 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 14050 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 14060 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 71 NOTE: Use the sq 14070 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c lite_master tabl 14080 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 e to determine i 14090 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c f the named tabl 140a0 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 e is.. # 140b0 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 present in t 140c0 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 he database... 140d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 140e0 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 sql {.. 140f0 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 SELECT COUNT(*) 14100 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 FROM sqlite_mast 14110 65 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 er WHERE type = 14120 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 'table' AND name 14130 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a = ?;.. }.. 14140 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14150 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 # NOTE: Return 14160 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 non-zero if the 14170 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 20 70 named table is p 14180 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 resent... # 14190 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 141a0 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 expr {.. 141b0 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 [sql execute -ex 141c0 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 ecute scalar$db
141d0 20 24 73 71 6c 20 5b 6c 69 73 74 20 70 61 72 61   $sql [list para 141e0 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d m1 String$name]
141f0 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d  ] > 0..      }].
14200 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
14210 72 6f 63 20 67 65 74 44 62 44 65 66 61 75 6c 74  roc getDbDefault
14220 50 61 67 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20  PageSize {} {..
14230 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
14240 7b 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 41  {executeSql "PRA
14250 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 20  GMA page_size;"
14260 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20  scalar} result]
14270 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
14280 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 14290 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c sult.. } el 142a0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 142b0 74 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d turn 0.. }. 142c0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 142d0 72 6f 63 20 67 65 74 44 62 44 65 66 61 75 6c 74 roc getDbDefault 142e0 43 61 63 68 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a CacheSize {} {.. 142f0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 14300 20 7b 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 {executeSql "PR 14310 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b AGMA cache_size; 14320 22 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 " scalar} result 14330 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 14340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
14350 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20  result..      }
14360 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
14370 72 65 74 75 72 6e 20 30 0d 0a 20 20 20 20 20 20  return 0..
14380 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
14390 20 70 72 6f 63 20 75 73 65 4c 65 67 61 63 79 44   proc useLegacyD
143a0 62 50 61 67 65 41 6e 64 43 61 63 68 65 53 69 7a  bPageAndCacheSiz
143b0 65 73 20 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b  es { varName } {
143c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
143d0 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
143e0 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
143f0 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
14400 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
14410 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
14420 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
14430 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74  .  It contains t
14440 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
14450 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68  ection handle th
14460 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  at will be..
14470 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74    #       used t
14480 6f 20 65 78 65 63 75 74 65 20 71 75 65 72 69 65  o execute querie
14490 73 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  s used to set th
144a0 65 20 70 61 67 65 20 61 6e 64 20 63 61 63 68 65  e page and cache
144b0 20 73 69 7a 65 73 2e 0d 0a 20 20 20 20 20 20 23   sizes...      #
144c0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
144d0 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 144e0 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 sql execute 144f0 20 24 64 62 20 7b 0d 0a 20 20 20 20 20 20 20 20$db {..
14500 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
14510 20 3d 20 31 30 32 34 3b 0d 0a 20 20 20 20 20 20   = 1024;..
14520 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
14530 69 7a 65 20 3d 20 32 30 30 30 3b 0d 0a 20 20 20  ize = 2000;..
14540 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
14550 74 75 72 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  turn [list \..
14560 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65          [sql exe
14570 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
14580 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA 14590 20 70 61 67 65 5f 73 69 7a 65 3b 22 5d 20 5c 0d page_size;"] \. 145a0 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c 20 . [sql 145b0 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 execute -execute 145c0 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 scalar$db "PRA
145d0 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22  GMA cache_size;"
145e0 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ]]..    }.....
145f0 20 20 70 72 6f 63 20 6e 6f 72 6d 61 6c 69 7a 65    proc normalize
14600 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
14610 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d 0a 20 20   { value } {..
14620 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
14630 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d  length $value] = 14640 3d 20 30 7d 20 74 68 65 6e 20 7b 72 65 74 75 72 = 0} then {retur 14650 6e 20 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 n$value}..
14660 20 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20   return [string
14670 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 22  map [list \r\n "
14680 20 3d 3d 3e 20 22 20 5c 6e 20 22 20 3d 3d 3e 20   ==> " \n " ==>
14690 22 5d 20 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20  "] $value].. 146a0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e 146b0 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 xtractSystemData 146c0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d SQLiteExceptionM 146d0 65 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d essage { value } 146e0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 146f0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 14700 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d e string conform 14710 73 20 74 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74 s to format of t 14720 68 65 20 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74 he normal except 14730 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # 14740 20 20 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 error strings 14750 2c 20 65 78 74 72 61 63 74 20 61 6e 64 20 72 65 , extract and re 14760 74 75 72 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72 turn only the er 14770 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 ror message.. 14780 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 # porti 14790 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 on itself... 147a0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 #.. set p 147b0 61 74 74 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d atterns [list \. 147c0 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e . {System\. 147d0 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 Data\.SQLite\.SQ 147e0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 LiteException $$147f0 30 78 28 3f 3a 30 7c 38 29 5b 30 2d 39 41 2d 46 0x(?:0|8)[0-9A-F 14800 61 2d 66 5d 7b 37 7d 5c 29 3a 5c 0d 0a 20 20 20 a-f]{7}$$:\.. 14810 20 20 20 20 20 20 20 28 2e 2b 3f 29 20 20 28 3f (.+?) (? 14820 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20 : )?at} \.. 14830 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e {System\.Data\. 14840 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 SQLite\.SQLiteEx 14850 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 ception: (.+?) 14860 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 (?: )?at} \.. 14870 20 20 20 7b 45 61 67 6c 65 5c 2e 5f 43 6f 6d 70 {Eagle\._Comp 14880 6f 6e 65 6e 74 73 5c 2e 50 75 62 6c 69 63 5c 2e onents\.Public\. 14890 53 63 72 69 70 74 45 78 63 65 70 74 69 6f 6e 3a ScriptException: 148a0 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 (.+?) (?: )?at 148b0 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 }].... fore 148c0 61 63 68 20 70 61 74 74 65 72 6e 20 24 70 61 74 ach pattern$pat
148d0 74 65 72 6e 73 20 7b 0d 0a 20 20 20 20 20 20 20  terns {..
148e0 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20   if {[regexp --
148f0 24 70 61 74 74 65 72 6e 20 24 76 61 6c 75 65 20  $pattern$value
14900 64 75 6d 6d 79 20 6d 65 73 73 61 67 65 5d 7d 20  dummy message]}
14910 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14920 20 20 73 65 74 20 6d 65 73 73 61 67 65 20 5b 73    set message [s
14930 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list
14940 5c 72 5c 6e 20 5c 6e 5d 20 5b 73 74 72 69 6e 67  \r\n \n] [string
14950 20 74 72 69 6d 20 24 6d 65 73 73 61 67 65 5d 5d   trim $message]] 14960 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 14970 6c 69 6e 65 73 20 5b 73 70 6c 69 74 20 24 6d 65 lines [split$me
14980 73 73 61 67 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  ssage \n]....
14990 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e         if {[llen
149a0 67 74 68 20 24 6c 69 6e 65 73 5d 20 3d 3d 20 32  gth $lines] == 2 149b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 149c0 20 20 20 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 if {[linde 149d0 78 20 24 6c 69 6e 65 73 20 30 5d 20 65 71 20 5b x$lines 0] eq [
149e0 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 5d  lindex $lines 1] 149f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14a00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 14a10 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d lindex$lines 0]
14a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14a30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
14a40 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67  eturn [appendArg
14a50 73 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73  s [lindex $lines 14a60 20 30 5d 20 22 20 2d 2d 20 22 20 5b 6c 69 6e 64 0] " -- " [lind 14a70 65 78 20 24 6c 69 6e 65 73 20 31 5d 5d 0d 0a 20 ex$lines 1]]..
14a80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
14a90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $14aa0 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 20 message.. 14ab0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 14ac0 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 61 6c return$val
14ad0 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ue..    }.....
14ae0 20 20 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b    proc trimSql {
14af0 20 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20   sql } {..
14b00 72 65 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d  return [regsub -
14b10 61 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74  all -- {\s+} [st
14b20 72 69 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20  ring trim $sql] 14b30 22 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a " "].. }..... 14b40 20 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 proc execute 14b50 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 Sql { sql {execu 14b60 74 65 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 te none} {format 14b70 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 none} {fileName 14b80 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 14b90 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 14ba0 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d th$fileName] ==
14bb0 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69   0} then {set fi
14bc0 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d  leName :memory:}
14bd0 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20  ..      setupDb
14be0 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  $fileName "" "" 14bf0 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 66 "" "" "" false f 14c00 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 alse false false 14c10 20 64 62 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 db true.... 14c20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 try {.. 14c30 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c return [uplevel 14c40 20 31 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 1 [list \.. 14c50 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 sql exec 14c60 75 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 ute -execute$ex
14c70 65 63 75 74 65 20 2d 66 6f 72 6d 61 74 20 24 66  ecute -format $f 14c80 6f 72 6d 61 74 20 24 64 62 20 24 73 71 6c 5d 5d ormat$db $sql]] 14c90 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c .. } finall 14ca0 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 y {.. set 14cb0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 connection [get 14cc0 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d DbConnection]... 14cd0 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a . try {.. 14ce0 20 20 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 cleanu 14cf0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 pDb$fileName db
14d00 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c   false false fal
14d10 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69  se..        } fi
14d20 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20  nally {..
14d30 20 20 20 6f 62 6a 65 63 74 20 66 6c 61 67 73 20     object flags
14d40 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 4e 6f 44  $connection -NoD 14d50 69 73 70 6f 73 65 3b 20 66 72 65 65 44 62 43 6f ispose; freeDbCo 14d60 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 nnection.. 14d70 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 14d80 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 14d90 20 68 61 73 4e 6f 46 6c 61 67 73 20 7b 20 76 61 hasNoFlags { va 14da0 72 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a rName none } {.. 14db0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
14dc0 61 72 4e 61 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a  arName flags....
14dd0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
14de0 20 65 78 69 73 74 73 20 66 6c 61 67 73 5d 7d 20   exists flags]}
14df0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14e00 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
14e10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
14e20 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
14e30 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74   $flags] == 0} t 14e40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 14e50 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 14e60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 14e70 7b 24 6e 6f 6e 65 20 26 26 20 24 66 6c 61 67 73 {$none && $flags 14e80 20 65 71 20 22 4e 6f 6e 65 22 7d 20 74 68 65 6e eq "None"} then 14e90 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 14ea0 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } 14eb0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 14ec0 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c false.. }... 14ed0 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f .. proc getCo 14ee0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 nnectionFlags { 14ef0 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b fileName flags { 14f00 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 14f10 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14f20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 # NOTE: Figure 14f30 6f 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61 out which databa 14f40 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 se file name or 14f50 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 14f60 67 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 g these.. # 14f70 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio 14f80 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 n flags will act 14f90 75 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 ually apply to. 14fa0 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 This is not nec 14fb0 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 essary.. # 14fc0 20 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d in quiet m 14fd0 6f 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73 ode because this 14fe0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 information is 14ff0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f only used for lo 15000 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 gging.. # 15010 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 and reporti 15020 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 ng purposes... 15030 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 15040 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
15050 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
15060 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69  tring length $fi 15070 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 leName] > 0} the 15080 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 15090 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 et database [app 150a0 65 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 endArgs "file na 150b0 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 me \""$fileName
150c0 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20   \"]..        }
150d0 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
150e0 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63  ists ::dataSourc
150f0 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  e] && \..
15100 20 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69       ![array exi
15110 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65  sts ::dataSource
15120 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
15130 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73       set databas
15140 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64  e [appendArgs "d
15150 61 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24  ata source \"" $15160 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d ::dataSource \"] 15170 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 15180 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 15190 74 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e t database <unkn 151a0 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d own>.. }. 151b0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 151c0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 151d0 45 3a 20 45 76 65 6e 20 74 68 6f 75 67 68 20 74 E: Even though t 151e0 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 here is only one 151f0 20 73 6f 75 72 63 65 20 6f 66 20 66 6c 61 67 73 source of flags 15200 20 73 6f 20 66 61 72 2c 20 74 68 65 79 0d 0a 20 so far, they.. 15210 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 75 73 # mus 15220 74 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 75 73 t be combined us 15230 69 6e 67 20 74 68 65 20 63 6f 72 72 65 63 74 20 ing the correct 15240 73 79 6e 74 61 78 20 66 6f 72 20 65 6e 75 6d 65 syntax for enume 15250 72 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 rated.. # 15260 20 20 20 20 20 66 6c 61 67 20 76 61 6c 75 65 73 flag values 15270 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 for the .NET Fr 15280 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 amework... 15290 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 #.. set fla 152a0 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 gs [combineFlags 152b0 20 24 66 6c 61 67 73 20 22 22 5d 0d 0a 0d 0a 20$flags ""]....
152c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
152d0 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20  NOTE: Show (and
152e0 6c 6f 67 29 20 74 68 65 20 6c 6f 63 61 6c 20 63  log) the local c
152f0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
15300 61 6e 64 20 74 68 65 20 61 73 73 6f 63 69 61 74  and the associat
15310 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
15320 20 20 64 61 74 61 20 73 6f 75 72 63 65 20 6f 72    data source or
15330 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
15340 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
15350 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 15360 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 15370 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 15380 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 29 5d emitLocalFlags)] 15390 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 153a0 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 (![info exist 153b0 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c s ::no(emitLocal 153c0 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c FlagsIfNone)] || 153d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 153e0 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c ![hasNoFlags fl 153f0 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 ags false])} the 15400 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 15410 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
15420 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
15430 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15440 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f    "---- local co
15450 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66  nnection flags f
15460 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c  or " $database \ 15470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15480 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b " are: " [expr { 15490 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 ![hasNoFlags fla 154a0 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 gs false] ? \.. 154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 [ap 154c0 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 pendArgs \"$fla
154d0 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e  gs \"] : "<none>
154e0 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  "}] \n]..
154f0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
15500 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15510 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20  NOTE: Show (and
15520 6c 6f 67 29 20 74 68 65 20 73 68 61 72 65 64 20  log) the shared
15530 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
15540 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15550 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 15560 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 15570 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 15580 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 15590 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 voke System.Data 155a0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f .SQLite.SQLiteCo 155b0 6e 6e 65 63 74 69 6f 6e 20 53 68 61 72 65 64 46 nnection SharedF 155c0 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 lags.. } 155d0 73 68 61 72 65 64 46 6c 61 67 73 5d 20 3d 3d 20 sharedFlags] == 155e0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 155f0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 15600 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 exists ::no(emit 15610 53 68 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 SharedFlags)] && 15620 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15630 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 (![info exists 15640 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 ::no(emitShared 15650 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c FlagsIfNone)] || 15660 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15670 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 ![hasNoFlags 15680 73 68 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 sharedFlags true 15690 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ])} then {.. 156a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
156b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
156c0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
156e0 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63  -- shared connec
156f0 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22  tion flags for "
15700 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20   $database \.. 15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " 15720 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b are: " [expr {![ 15730 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 hasNoFlags share 15740 64 46 6c 61 67 73 20 74 72 75 65 5d 20 3f 20 5c dFlags true] ? \ 15750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 15760 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 [appendArgs \" 15770 20 24 73 68 61 72 65 64 46 6c 61 67 73 20 5c 22$sharedFlags \"
15780 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c  ] : "<none>"}] \
15790 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
157a0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
157b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
157c0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
157d0 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c  :no(emitSharedFl
157e0 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ags)] && \..
157f0 20 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f            ![info
15800 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69   exists ::no(emi
15810 74 53 68 61 72 65 64 46 6c 61 67 73 49 66 55 6e  tSharedFlagsIfUn
15820 61 76 61 69 6c 61 62 6c 65 29 5d 7d 20 74 68 65  available)]} the
15830 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
15840 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 15850 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 15860 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 15870 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 "---- shar 15880 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl 15890 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 ags for "$datab
158a0 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ase \..
158b0 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 3c 75         " are: <u
158c0 6e 61 76 61 69 6c 61 62 6c 65 3e 5c 6e 22 5d 0d  navailable>\n"].
158d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
158e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
158f0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
15900 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
15910 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 64 65  (and log) the de
15920 74 65 63 74 65 64 20 67 6c 6f 62 61 6c 20 63 6f  tected global co
15930 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20  nnection flags,
15940 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 23  if any...      #
15950 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 15960 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 15970 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 15980 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 exists ::no(emit 15990 47 6c 6f 62 61 6c 46 6c 61 67 73 29 5d 20 26 26 GlobalFlags)] && 159a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 159b0 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a (![info exists : 159c0 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c :no(emitGlobalFl 159d0 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c agsIfNone)] || \ 159e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 21 .. ! 159f0 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f [hasNoFlags ::co 15a00 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 nnection_flags f 15a10 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a alse])} then {.. 15a20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 15a30 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
15a40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
15a60 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63  -- global connec
15a70 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a 20  tion flags are:
15a80 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
15a90 20 20 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e     [expr {![hasN
15aa0 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74  oFlags ::connect
15ab0 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d  ion_flags false]
15ac0 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
15ad0 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20      [appendArgs
15ae0 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e  \" $::connection 15af0 5f 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e _flags \"] : "<n 15b00 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 one>"}] \n].. 15b10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 15b20 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 15b30 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 # NOTE: If the 15b40 72 65 20 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 re are any globa 15b50 6c 20 28 70 65 72 20 74 65 73 74 20 72 75 6e 29 l (per test run) 15b60 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 15b70 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 s currently.. 15b80 20 20 20 23 20 20 20 20 20 20 20 73 65 74 2c 20 # set, 15b90 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e use them now (i. 15ba0 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 e. by combining 15bb0 74 68 65 6d 20 77 69 74 68 20 74 68 65 20 6f 6e them with the on 15bc0 65 73 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 es for this.. 15bd0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 # conne 15be0 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 ction)... # 15bf0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 15c00 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 o exists ::conne 15c10 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 ction_flags]} th 15c20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 15c30 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 15c40 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 Combine and/or 15c50 72 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e replace the conn 15c60 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 ection flags and 15c70 20 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a then show the.. 15c80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 15c90 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 new value... 15ca0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 15cb0 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e et flags [combin 15cc0 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a eFlags$flags $: 15cd0 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag 15ce0 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d s].... #. 15cf0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 15d00 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 Show (and log) 15d10 74 68 65 20 6e 65 77 20 65 66 66 65 63 74 69 76 the new effectiv 15d20 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 e connection fla 15d30 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a gs... #.. 15d40 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
15d50 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
15d60 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
15d70 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d  o exists ::no(em
15d80 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 29  itCombinedFlags)
15d90 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
15da0 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78        (![info ex
15db0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f  ists ::no(emitCo
15dc0 6d 62 69 6e 65 64 46 6c 61 67 73 49 66 4e 6f 6e  mbinedFlagsIfNon
15dd0 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  e)] || \..
15de0 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f           ![hasNo
15df0 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73  Flags flags fals
15e00 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e])} then {..
15e10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $15e20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 15e30 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 15e50 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e --- combined con 15e60 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f nection flags fo 15e70 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d r "$database \.
15e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
15e90 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20   " are: " [expr
15ea0 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c  {![hasNoFlags fl
15eb0 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a  ags false] ? \..
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15ed0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $15ee0 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f flags \"] : "<no 15ef0 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 ne>"}] \n].. 15f00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 15f10 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 15f20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 6c 61 return$fla
15f30 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  gs..    }.....
15f40 20 20 70 72 6f 63 20 67 65 74 46 6c 61 67 73 50    proc getFlagsP
15f50 72 6f 70 65 72 74 79 20 7b 20 7b 66 6c 61 67 73  roperty { {flags
15f60 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73   ""} {quiet fals
15f70 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
15f80 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44  .      # NOTE: D
15f90 65 74 65 72 6d 69 6e 65 20 77 68 61 74 20 74 68  etermine what th
15fa0 65 20 63 6f 6d 62 69 6e 65 64 20 28 67 6c 6f 62  e combined (glob
15fb0 61 6c 20 61 6e 64 20 6c 6f 63 61 6c 29 20 63 6f  al and local) co
15fc0 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nnection..
15fd0 23 20 20 20 20 20 20 20 66 6c 61 67 73 20 73 68  #       flags sh
15fe0 6f 75 6c 64 20 62 65 2c 20 70 6f 73 73 69 62 6c  ould be, possibl
15ff0 79 20 71 75 69 65 74 6c 79 2e 0d 0a 20 20 20 20  y quietly...
16000 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66    #..      set f
16010 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74  lags [getConnect
16020 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61  ionFlags "" $fla 16030 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 gs$quiet]....
16040 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
16050 4f 54 45 3a 20 49 66 20 6e 6f 20 67 6c 6f 62 61  OTE: If no globa
16060 6c 20 6f 72 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65  l or local conne
16070 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 65 72 65  ction flags were
16080 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 0d   specified, the.
16090 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
160a0 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f  efault connectio
160b0 6e 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62  n flags should b
160c0 65 20 75 73 65 64 3b 20 74 68 65 72 65 66 6f 72  e used; therefor
160d0 65 2c 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20  e, return..
160e0 20 23 20 20 20 20 20 20 20 61 6e 20 65 6d 70 74   #       an empt
160f0 79 20 73 74 72 69 6e 67 20 69 6e 20 74 68 61 74  y string in that
16100 20 63 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d   case...      #.
16110 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
16120 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73  ng length $flags 16130 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 16140 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 return " 16150 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 16160 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 16170 4f 54 45 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f OTE: In order to 16180 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 64 65 check if the de 16190 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e fault connection 161a0 20 66 6c 61 67 73 20 61 72 65 20 62 65 69 6e 67 flags are being 161b0 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 used.. # 161c0 20 20 20 20 20 69 74 20 69 73 20 6e 65 63 65 73 it is neces 161d0 73 61 72 79 20 74 6f 20 61 74 74 65 6d 70 74 20 sary to attempt 161e0 61 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 a conversion to 161f0 74 68 65 20 61 63 74 75 61 6c 20 65 6e 75 6d 65 the actual enume 16200 72 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 rated.. # 16210 20 20 20 20 20 74 79 70 65 2e 20 20 46 61 69 6c type. Fail 16220 69 6e 67 20 74 68 61 74 2c 20 74 68 65 20 63 68 ing that, the ch 16230 65 63 6b 20 61 67 61 69 6e 73 74 20 74 68 65 20 eck against the 16240 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 default value wi 16250 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 ll be.. # 16260 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 skipped... 16270 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 16280 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 16290 20 20 20 20 73 65 74 20 65 72 72 6f 72 20 6e 75 set error nu 162a0 6c 6c 3b 20 23 20 49 47 4e 4f 52 45 44 0d 0a 0d ll; # IGNORED... 162b0 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object 162c0 69 6e 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 invoke Utility T 162d0 72 79 50 61 72 73 65 46 6c 61 67 73 45 6e 75 6d ryParseFlagsEnum 162e0 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 "" \.. 162f0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 16300 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e QLite.SQLiteConn 16310 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 ectionFlags ""$
16320 66 6c 61 67 73 20 6e 75 6c 6c 20 74 72 75 65 20  flags null true
16330 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  \..            t
16340 72 75 65 20 74 72 75 65 20 65 72 72 6f 72 0d 0a  rue true error..
16350 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 7d 20        } value]}
16360 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16370 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
16380 45 3a 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  E: Attempting to
16390 20 70 61 72 73 65 20 74 68 65 20 63 6f 6e 6e 65   parse the conne
163a0 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 61 75 73  ction flags caus
163b0 65 64 20 61 20 73 63 72 69 70 74 0d 0a 20 20 20  ed a script..
163c0 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72       #       err
163d0 6f 72 2e 20 20 45 6d 69 74 20 61 20 77 61 72 6e  or.  Emit a warn
163e0 69 6e 67 20 74 6f 20 74 68 65 20 74 65 73 74 20  ing to the test
163f0 6c 6f 67 20 66 69 6c 65 20 61 6e 64 20 63 6f 6e  log file and con
16400 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 23  tinue..        #
16410 20 20 20 20 20 20 20 75 73 69 6e 67 20 61 6e 20         using an
16420 65 6d 74 70 79 20 73 74 72 69 6e 67 20 69 6e 73  emtpy string ins
16430 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  tead...        #
16440 0d 0a 20 20 20 20 20 20 20 20 74 6c 6f 67 20 5b  ..        tlog [
16450 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
16460 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
16470 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
16480 74 6f 20 70 61 72 73 65 20 63 6f 6e 6e 65 63 74  to parse connect
16490 69 6f 6e 20 66 6c 61 67 73 2c 20 65 72 72 6f 72  ion flags, error
164a0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
164b0 20 20 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c     \n\t $value \ 164c0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 n].... se 164d0 74 20 76 61 6c 75 65 20 22 22 0d 0a 20 20 20 20 t value "".. 164e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 164f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 16500 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c the combined fl 16510 61 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 ags string could 16520 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65 not actually be 16530 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 converted.. 16540 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 # to the 16550 20 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 enumerated type 16560 20 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 it is the defau 16570 6c 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a lt value, then j 16580 75 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23 ust use.. # 16590 20 20 20 20 20 20 20 69 74 20 76 65 72 62 61 74 it verbat 165a0 69 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a im; otherwise, j 165b0 75 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d ust return an em 165c0 70 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 pty string. In 165d0 74 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 that.. # 165e0 20 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 65 case, the de 165f0 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e fault connection 16600 20 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75 flags will be u 16610 73 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sed... #.. 16620 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 16630 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 length$value]
16640 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e  == 0 || $value n 16650 65 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65 e "Default"} the 16660 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 16670 20 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e # WARNIN 16680 47 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 G: This returns 16690 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 the string value 166a0 20 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 of the combined 166b0 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 flags, not.. 166c0 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # 166d0 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76 the enumerated v 166e0 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 62 alue. This is b 166f0 79 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f y design and sho 16700 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 uld not.. 16710 20 23 20 20 20 20 20 20 20 20 20 20 62 65 20 63 # be c 16720 68 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63 hanged without c 16730 61 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 areful considera 16740 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f tion (e.g. it wo 16750 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 uld.. # 16760 20 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 prevent 16770 74 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 the SQLiteConnec 16780 74 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 tion class from 16790 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 allowing invalid 167a0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 167b0 20 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d ["magical"] 167c0 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 meta-flags)... 167d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 167e0 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 return [append 167f0 41 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66 Args "Flags="$f
16800 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20  lags \;]..
16810 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
16820 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n ""..    }.....
16830 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 74      proc getTest
16840 50 72 6f 70 65 72 74 69 65 73 20 7b 20 7b 66 6c  Properties { {fl
16850 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20 66  ags ""} {quiet f
16860 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
16870 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
16880 3a 20 53 74 61 72 74 20 77 69 74 68 20 22 46 6c  : Start with "Fl
16890 61 67 73 22 20 70 72 6f 70 65 72 74 79 20 66 6f  ags" property fo
168a0 72 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63  r the new connec
168b0 74 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  tion, if any...
168c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
168d0 74 20 72 65 73 75 6c 74 20 5b 67 65 74 46 6c 61  t result [getFla
168e0 67 73 50 72 6f 70 65 72 74 79 20 24 66 6c 61 67  gsProperty $flag 168f0 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 s$quiet]....
16900 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
16910 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65  TE: Add the name
16920 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current
16930 74 65 73 74 20 66 69 6c 65 2c 20 69 66 20 61 76  test file, if av
16940 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69  ailable.  This i
16950 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
16960 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 64   only used for d
16970 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20  ebugging...
16980 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
16990 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
169a0 74 5f 66 69 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  t_file]} then {.
169b0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
169c0 72 65 73 75 6c 74 20 54 65 73 74 46 69 6c 65 3d  result TestFile=
169d0 20 24 3a 3a 74 65 73 74 5f 66 69 6c 65 20 5c 3b   $::test_file \; 169e0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 169f0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 16a00 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 TE: Add the name 16a10 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 of the current 16a20 74 65 73 74 2c 20 69 66 20 61 76 61 69 6c 61 62 test, if availab 16a30 6c 65 2e 20 20 54 68 69 73 20 69 73 20 6f 6e 6c le. This is onl 16a40 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 16a50 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 used for debugg 16a60 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ing... #.. 16a70 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 16a80 78 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f 74 65 xists ::eagle_te 16a90 73 74 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 sts(CurrentName) 16aa0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 16ab0 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 append result 16ac0 20 54 65 73 74 4e 61 6d 65 3d 20 24 3a 3a 65 61 TestName=$::ea
16ad0 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72 65 6e  gle_tests(Curren
16ae0 74 4e 61 6d 65 29 20 5c 3b 0d 0a 20 20 20 20 20  tName) \;..
16af0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
16b00 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 16b10 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e 16b20 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 nableSharedCache 16b30 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c { channel enabl 16b40 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 e {quiet false} 16b50 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 16b60 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 16b70 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 16b80 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 16b90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16ba0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 16bb0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM 16bc0 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 ethods \.. 16bd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e sqlite3_en 16be0 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 able_shared_cach 16bf0 65 20 5b 65 78 70 72 20 69 6e 74 28 24 65 6e 61 e [expr int($ena
16c00 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72  ble)]..      } r
16c10 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
16c20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
16c30 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 16c40 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 16c50 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
16c60 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16c70 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61          "---- ca
16c80 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  ll sqlite3_enabl
16c90 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22  e_shared_cache("
16ca0 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20   $enable \.. 16cb0 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 ")... 16cc0 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e ok: "$result \n
16cd0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
16ce0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
16cf0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 16d00 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 16d10 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
16d20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
16d30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16d40 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
16d50 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  te3_enable_share
16d60 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c  d_cache(" $enabl 16d70 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 16d80 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 ")... error: 16d90 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c " \n\t$result \
16da0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
16db0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
16dc0 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70  ..    proc setup
16dd0 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  Db {..
16de0 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65    fileName {mode
16df0 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f   ""} {dateTimeFo
16e00 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69  rmat ""} {dateTi
16e10 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67  meKind ""} {flag
16e20 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20  s ""}..
16e30 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71     {extra ""} {q
16e40 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65  ualify true} {de
16e50 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20  lete true} {uri
16e60 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20  false}..
16e70 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74      {temporary t
16e80 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62  rue} {varName db
16e90 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  } {quiet false}
16ea0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
16eb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73      # NOTE: Firs
16ec0 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61  t, see if our ca
16ed0 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74  ller has request
16ee0 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  ed an in-memory
16ef0 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20  database...
16f00 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73   #..      set is
16f10 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79  Memory [isMemory
16f20 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  Db $fileName]... 16f30 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16f40 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c # NOTE: For now, 16f50 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61 all test databa 16f60 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 ses used by the 16f70 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20 70 test suite are p 16f80 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20 laced.. # 16f90 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61 into the da 16fa0 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 tabase directory 16fb0 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73 65 . Each database 16fc0 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c and related fil 16fd0 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 16fe0 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73 74 used by a test 16ff0 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e should be clean 17000 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74 65 ed up by that te 17010 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 st using the.. 17020 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c 65 # "cle 17030 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 72 anupDb" procedur 17040 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 e, below... 17050 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
17060 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61  isMemory && $qua 17070 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lify} then {.. 17080 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 17090 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 me [file join [g 170a0 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 etDatabaseDirect 170b0 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 ory] [file tail 170c0 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20$fileName]]..
170d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
170e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
170f0 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74  y default, delet
17100 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69  e any pre-existi
17110 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68  ng database with
17120 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a   the same file..
17130 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
17140 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e 74  me if it current
17150 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20  ly exists...
17160 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
17170 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65  $isMemory &&$de
17180 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78  lete && [file ex
17190 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} 171a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 171b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 171c0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d 171d0 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 elete any pre-ex 171e0 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 isting database 171f0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 with the same fi 17200 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # 17210 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 name... 17220 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 17230 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d 17240 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
17250 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
17260 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
17270 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
17280 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
17290 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  d to delete the
172a0 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79  file, report why
172b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
172c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$172d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 172e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 172f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
17300 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17320 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
17330 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
17340 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
17350 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 17370 5c 22 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c \" during setup, 17380 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
17390 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
173a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
173b0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
173c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
173d0 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
173e0 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
173f0 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
17400 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
17410 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
17420 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54        caller.  T
17430 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65  he handle to the
17440 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65   opened database
17450 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored
17460 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
17470 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $17480 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 17490 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 174a0 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 OTE: Start build 174b0 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti 174c0 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 on string. The 174d0 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f only required po 174e0 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 rtion.. # 174f0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e of the conn 17500 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 ection string is 17510 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 the data source 17520 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 , which contains 17530 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 17540 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c database fil 17550 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 e name itself. 17560 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 If our caller wa 17570 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 nts to use a URI 17580 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 as.. # 17590 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 the data sour 175a0 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c ce, use the Full 175b0 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 Uri connection s 175c0 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 tring property t 175d0 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 o.. # 175e0 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 prevent the dat 175f0 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 a source string 17600 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c from being mangl 17610 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 17620 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 if {$uri} th
17630 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
17640 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75  t connection {Fu
17650 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65  llUri=${fileName 17660 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }}.. } else 17670 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 17680 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 connection {Data 17690 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 Source=${fileNa
176a0 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  me}}..      }...
176b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
176c0 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68  # NOTE: Since th
176d0 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73  is procedure has
176e0 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77   no special know
176f0 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68  ledge of what th
17700 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20  e default..
17710 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67   #       setting
17720 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75   is for the ToFu
17730 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f  llPath connectio
17740 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79  n string propery
17750 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  , always..
17760 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20  #       add the
17770 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62  value we know ab
17780 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  out to the conne
17790 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20  ction string...
177a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70       #..      ap
177b0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
177c0 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71  {;ToFullPath=${q 177d0 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 ualify}}.... 177e0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 177f0 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller 17800 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 specified a jou 17810 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 rnal mode, add t 17820 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 he necessary por 17830 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # 17840 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 of the conne 17850 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 ction string now 17860 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 17870 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 17880 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d ngth$mode] > 0}
17890 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
178a0 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
178b0 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64  on {;Journal Mod
178c0 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20  e=${mode}}.. 178d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 178e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 178f0 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 our caller spec 17900 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 ified a DateTime 17910 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 format, add the 17920 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 necessary.. 17930 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f # portio 17940 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 n of the connect 17950 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d ion string now.. 17960 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 17970 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 17980 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d th$dateTimeForm
17990 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  at] > 0} then {.
179a0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
179b0 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74  connection {;Dat
179c0 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61  eTimeFormat=${da 179d0 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a teTimeFormat}}.. 179e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 179f0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 17a00 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 : If our caller 17a10 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 specified a Date 17a20 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 TimeKind, add th 17a30 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 e necessary port 17a40 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # 17a50 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 of the connec 17a60 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e tion string now. 17a70 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17a80 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 17a90 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e gth$dateTimeKin
17aa0 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  d] > 0} then {..
17ab0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
17ac0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65  onnection {;Date
17ad0 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54  TimeKind=${dateT 17ae0 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 imeKind}}.. 17af0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 17b00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 # NOTE: Fig 17b10 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 ure out what the 17b20 20 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 final flags for 17b30 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e this connection 17b40 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 need to be... 17b50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 17b60 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 flags [getConne 17b70 63 74 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 ctionFlags$file
17b80 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 71 75 69  Name $flags$qui
17b90 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  et]....      #..
17ba0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
17bb0 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63   our caller spec
17bc0 69 66 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 74  ified some SQLit
17bd0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
17be0 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 20 20 20  , add the..
17bf0 20 23 20 20 20 20 20 20 20 6e 65 63 65 73 73 61   #       necessa
17c00 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68  ry portion of th
17c10 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
17c20 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ing now...
17c30 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
17c40 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61  ring length $fla 17c50 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d gs] > 0} then {. 17c60 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append 17c70 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 connection {;Fla 17c80 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 gs=${flags}}..
17c90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
17ca0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
17cb0 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
17cc0 65 63 69 66 69 65 64 20 61 6e 20 65 78 74 72 61  ecified an extra
17cd0 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 20   payload to the
17ce0 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..
17cf0 20 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67    #       string
17d00 2c 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e  , append it now.
17d10 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
17d20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
17d30 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 7d  gth $extra] > 0} 17d40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17d50 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 17d60 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 on \;$extra..
17d70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
17d80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
17d90 41 64 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  Add the name of
17da0 74 68 65 20 63 75 72 72 65 6e 74 20 74 65 73 74  the current test
17db0 20 66 69 6c 65 2c 20 69 66 20 61 76 61 69 6c 61   file, if availa
17dc0 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0d 0a 20  ble.  This is..
17dd0 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 6e 6c       #       onl
17de0 79 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 67  y used for debug
17df0 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ging...      #..
17e00 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
17e10 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 66 69  exists ::test_fi
17e20 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  le]} then {..
17e30 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
17e40 65 63 74 69 6f 6e 20 7b 3b 54 65 73 74 46 69 6c  ection {;TestFil
17e50 65 3d 24 7b 3a 3a 74 65 73 74 5f 66 69 6c 65 7d  e=${::test_file} 17e60 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 17e70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 17e80 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d OTE: Add the nam 17e90 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 e of the current 17ea0 20 74 65 73 74 2c 20 69 66 20 61 76 61 69 6c 61 test, if availa 17eb0 62 6c 65 2e 20 20 54 68 69 73 20 69 73 20 6f 6e ble. This is on 17ec0 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 17ed0 20 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 used for debug 17ee0 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ging... #.. 17ef0 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 17f00 65 78 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f 74 exists ::eagle_t 17f10 65 73 74 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 ests(CurrentName 17f20 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 17f30 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 17f40 63 74 69 6f 6e 20 7b 3b 54 65 73 74 4e 61 6d 65 ction {;TestName 17f50 3d 24 7b 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 =${::eagle_tests
17f60 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 7d 7d 0d  (CurrentName)}}.
17f70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
17f80 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
17f90 45 3a 20 46 6f 72 20 63 6c 61 72 69 74 79 2c 20  E: For clarity,
17fa0 61 70 70 65 6e 64 20 61 20 66 69 6e 61 6c 20 73  append a final s
17fb0 65 6d 69 63 6f 6c 6f 6e 20 74 6f 20 74 68 65 20  emicolon to the
17fc0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
17fd0 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  g...      #..
17fe0 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
17ff0 74 69 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20 20 20 20  tion \;....
18000 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
18010 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62  : Open the datab
18020 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e  ase connection n
18030 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20  ow, placing the
18040 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61  opaque handle va
18050 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  lue..      #
18060 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69     into the vari
18070 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 62  able specified b
18080 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20  y our caller...
18090 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
180a0 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d  t db [sql open -
180b0 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62  type SQLite [sub
180c0 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d  st $connection]] 180d0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 180e0 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 # NOTE: Confi 180f0 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 gure the tempora 18100 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 ry directory for 18110 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 the newly opene 18120 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 d database.. 18130 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 # connec 18140 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 tion now unless 18150 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 our caller forbi 18160 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d ds it... #. 18170 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70 . if {$temp
18180 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20  orary && ![info
18190 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54  exists ::no(setT
181a0 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72  emporaryDirector
181b0 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  y)]} then {..
181c0 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65       sql execute
181d0 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73   $db [appendArgs 181e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 181f0 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f "PRAGMA temp_sto 18200 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c re_directory = \ 18210 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 "" [getTemporary 18220 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d Directory] \"\;] 18230 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 18240 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 18250 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79 20 TE: Perform any 18260 65 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65 63 extra per-connec 18270 74 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 74 tion setup for t 18280 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 0d he newly opened. 18290 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 182a0 61 74 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c 65 atabase now unle 182b0 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f ss our caller fo 182c0 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 rbids it... 182d0 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 78 #.. set ex 182e0 65 63 75 74 65 4f 6e 53 65 74 75 70 20 5b 67 65 ecuteOnSetup [ge 182f0 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d tExecuteOnSetup] 18300 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s 18310 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 tring length$ex
18320 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e 20  ecuteOnSetup] >
18330 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  0 && \..
18340 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20    ![info exists
18350 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 65  ::no(executeOnSe
18360 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tup)]} then {..
18370 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18380 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63    # NOTE: This c
18390 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 65  ommand may raise
183a0 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 6f   an error; if so
183b0 2c 20 74 68 61 74 20 69 73 20 66 69 6e 65 2c 20  , that is fine,
183c0 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
183d0 20 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e      the enclosin
183e0 67 20 74 65 73 74 20 77 69 6c 6c 20 74 68 65 6e  g test will then
183f0 20 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 62   fail.  The [sub
18400 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a  st] command is..
18410 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
18420 75 73 65 64 20 6f 6e 20 74 68 65 20 53 51 4c 20  used on the SQL
18430 69 6e 20 63 61 73 65 20 69 74 20 6e 65 65 64 73  in case it needs
18440 20 74 6f 20 72 65 66 65 72 20 74 6f 20 73 74 61   to refer to sta
18450 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 20  te in our..
18460 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65     #       conte
18470 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  xt...        #..
18480 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63          sql exec
18490 75 74 65 20 24 64 62 20 5b 73 75 62 73 74 20 24  ute $db [subst$
184a0 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d  executeOnSetup].
184b0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
184c0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
184d0 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72 6e  E: Always return
184e0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
184f0 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 63  handle upon succ
18500 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ess...      #..
18510 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 0d       return $db. 18520 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 18530 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 roc getDbConnect 18540 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 ion { {varName d 18550 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d b} } {.. #. 18560 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 18570 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 18580 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 18590 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 185a0 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 185b0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 185c0 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e caller. The han 185d0 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 dle to the datab 185e0 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f ase previously o 185f0 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 pened via the.. 18600 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 # [se 18610 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 tupDb] procedure 18620 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 should be store 18630 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 18640 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 18650 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
18660 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
18670 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74 75   NOTE: This retu
18680 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 20  rns the ADO.NET
18690 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  IDbConnection ob
186a0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 6f  ject instance fo
186b0 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  r the..      #
186c0 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20 64       specified d
186d0 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 20  atabse handle.
186e0 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74 68  Since getting th
186f0 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 73  is object relies
18700 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20   upon..      #
18710 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 72       Eagle inter
18720 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72 65  nals, great care
18730 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e   should be taken
18740 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f 73   to avoid dispos
18750 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  ing of..      #
18760 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65 63        this objec
18770 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 70  t or otherwise p
18780 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 61  utting it into a
18790 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65 2e  n invalid state.
187a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
187b0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
187c0 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  s db]} then {..
187d0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
187e0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
187f0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
18800 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d  ags +NonPublic -
18810 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44  objectflags +NoD
18820 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c 0d  ispose -alias \.
18830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49  .              I
18840 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
18850 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  tive.connections
18860 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 20   Item $db.. 18870 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 } result] == 18880 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 18890 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 188a0 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 # NOTE: Succes 188b0 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f 70 s, return the op 188c0 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 aque object hand 188d0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 le... # 188e0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .. retu 188f0 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
18900 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
18910 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18920 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69       # NOTE: Fai
18930 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68 79  lure, report why
18940 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
18950 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
18960 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 18970 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 18980 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 18990 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 189a0 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 ed to get connec 189b0 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 tion handle for 189c0 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a database \"" \.. 189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64$d
189e0 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20  b "\", error: "
189f0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 18a00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 18a10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 18a20 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 18a30 61 69 6c 75 72 65 2c 20 72 65 74 75 72 6e 20 61 ailure, return a 18a40 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76 61 n obviously inva 18a50 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 lid opaque objec 18a60 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 t handle... 18a70 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e #.. return 18a80 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "".. }..... 18a90 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 43 6f proc freeDbCo 18aa0 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e nnection { {varN 18ab0 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 ame connection} 18ac0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 18ad0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 # NOTE: Refe 18ae0 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 r to the specifi 18af0 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 ed variable (e.g 18b00 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 . "connection") 18b10 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 18b20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 context of 18b30 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 our caller. Th 18b40 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 e opaque object 18b50 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 handle for an AD 18b60 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20 20 O.NET.. # 18b70 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 connection 18b80 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 previously retur 18b90 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e ned by [getDbCon 18ba0 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 nection] should 18bb0 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 be.. # 18bc0 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d stored there.. 18bd0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 18be0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
18bf0 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20   connection....
18c00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18c10 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
18c20 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 71   remove the opaq
18c30 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65  ue object handle
18c40 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 70   from the interp
18c50 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20 20  reter..      #
18c60 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 20       now.  This
18c70 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 5d  [object dispose]
18c80 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61   call will not a
18c90 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 20  ctually dispose
18ca0 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  of the..      #
18cb0 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e 67        underlying
18cc0 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65 20   object because
18cd0 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66  the +NoDispose f
18ce0 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20 69  lag was set on i
18cf0 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
18d00 20 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f 6e   during creation
18d10 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20 6f   of the opaque o
18d20 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20  bject handle...
18d30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
18d40 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63   {[info exists c
18d50 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d  onnection] && \.
18d60 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 63  .          [catc
18d70 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73  h {object dispos
18d80 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65  e $connection} e 18d90 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. 18da0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18db0 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som 18dc0 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 72 ehow failed to r 18dd0 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c 65 emove the handle 18de0 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 18df0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18e00 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
18e10 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
18e20 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
18e30 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
18e40 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f  : failed to remo
18e50 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
18e60 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63  ndle \"" $connec 18e70 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 tion \.. 18e80 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 "\", error: 18e90 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
18ea0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
18eb0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61  }.....    proc a
18ec0 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b  ddDbConnection {
18ed0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72   connection {var
18ee0 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20  Name db} } {..
18ef0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
18f00 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
18f10 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
18f20 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
18f30 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
18f40 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
18f50 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20        caller...
18f60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
18f70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d 18f80 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. 18f90 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 # NOTE: Crea 18fa0 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20 66 te a correctly f 18fb0 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66 6f ormatted name fo 18fc0 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 r the database c 18fd0 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 onnection to.. 18fe0 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 61 # be a 18ff0 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 dded to the list 19000 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 managed by the 19010 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 Eagle interprete 19020 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. 19030 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 set db [objec 19040 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 19050 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 19060 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 Eagle._C 19070 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 omponents.Privat 19080 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 e.FormatOps Data 19090 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 baseObjectName$
190a0 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20  connection \..
190b0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
190c0 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74  nnection [object
190d0 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
190e0 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
190f0 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  xtId]]....
19100 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
19110 20 41 64 64 20 74 68 65 20 64 61 74 61 62 61 73   Add the databas
19120 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f  e connection pro
19130 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
19140 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0d  ler to the list.
19150 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f  .      #       o
19160 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f  f those known to
19170 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72   the Eagle inter
19180 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23  preter...      #
19190 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69  ..      object i
191a0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
191b0 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65  nPublic Interpre
191c0 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f  ter.GetActive.co
191d0 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d  nnections Add \.
191e0 0a 20 20 20 20 20 20 20 20 20 20 24 64 62 20 24  .          $db$
191f0 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..
19200 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
19210 65 6d 6f 76 65 44 62 54 72 61 6e 73 61 63 74 69  emoveDbTransacti
19220 6f 6e 20 7b 20 74 72 61 6e 73 61 63 74 69 6f 6e  on { transaction
19230 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
19240 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d       # NOTE: Rem
19250 6f 76 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ove the database
19260 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 70 72 6f   transaction pro
19270 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
19280 6c 65 72 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20  ler from the..
19290 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 73 74      #       list
192a0 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20   of those known
192b0 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74  to the Eagle int
192c0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
192d0 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74   #..      object
192e0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
192f0 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70  NonPublic Interp
19300 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e  reter.GetActive.
19310 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 5c 0d 0a  transactions \..
19320 20 20 20 20 20 20 20 20 20 20 52 65 6d 6f 76 65            Remove
19330 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20   $transaction.. 19340 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 19350 63 20 67 65 74 52 6f 77 73 46 72 6f 6d 44 61 74 c getRowsFromDat 19360 61 54 61 62 6c 65 20 7b 20 64 61 74 61 54 61 62 aTable { dataTab 19370 6c 65 20 7b 76 61 6c 75 65 43 61 6c 6c 62 61 63 le {valueCallbac 19380 6b 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 k ""} } {.. 19390 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 73 74 5d set rows [list] 193a0 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e .. set coun 193b0 74 20 5b 24 64 61 74 61 54 61 62 6c 65 20 43 6f t [$dataTable Co
193c0 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a 0d 0a  lumns.Count]....
193d0 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
193e0 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20  ndex 0} {$index 193f0 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 <$count} {incr
19400 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20  index} {..
19410 20 20 73 65 74 20 64 61 74 61 43 6f 6c 75 6d 6e    set dataColumn
19420 20 5b 24 64 61 74 61 54 61 62 6c 65 20 2d 61 6c   [$dataTable -al 19430 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 65 74 5f ias Columns.get_ 19440 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 20 20 Item$index]..
19450 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 73 28        set names(
19460 24 69 6e 64 65 78 29 20 5b 24 64 61 74 61 43 6f  $index) [$dataCo
19470 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65 5d  lumn ColumnName]
19480 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
19490 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
194a0 54 45 3a 20 53 65 74 75 70 20 73 6f 6d 65 20 54  TE: Setup some T
194b0 63 6c 20 72 65 74 75 72 6e 20 63 6f 64 65 20 63  cl return code c
194c0 6f 6e 73 74 61 6e 74 73 2e 0d 0a 20 20 20 20 20  onstants...
194d0 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 4f 6b   #..      set Ok
194e0 20 30 3b 20 73 65 74 20 45 72 72 6f 72 20 31 3b   0; set Error 1;
194f0 20 73 65 74 20 52 65 74 75 72 6e 20 32 3b 20 73   set Return 2; s
19500 65 74 20 42 72 65 61 6b 20 33 3b 20 73 65 74 20  et Break 3; set
19510 43 6f 6e 74 69 6e 75 65 20 34 0d 0a 0d 0a 20 20  Continue 4....
19520 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
19530 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 52 6f  ch -alias dataRo
19540 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 73 20  w [set dataRows
19550 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f 77 73  [$dataTable Rows 19560 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 ]] {.. se 19570 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a 0d 0a t row [list].... 19580 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 for {set 19590 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 index 0} {$inde
195a0 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63  x < $count} {inc 195b0 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 r index} {.. 195c0 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 set value 195d0 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65 61 74 [$dataRow -creat
195e0 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 74 65  e -alias get_Ite
195f0 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20  m $index].... 19600 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 19610 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 ng length$value
19620 43 61 6c 6c 62 61 63 6b 5d 20 3e 20 30 7d 20 74  Callback] > 0} t
19630 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19640 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74     set code [cat
19650 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
19660 20 20 20 20 24 76 61 6c 75 65 43 61 6c 6c 62 61      $valueCallba 19670 63 6b 20 24 64 61 74 61 54 61 62 6c 65 20 24 64 ck$dataTable $d 19680 61 74 61 52 6f 77 20 24 69 6e 64 65 78 20 24 76 ataRow$index $v 19690 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alue.. 196a0 20 20 7d 20 6e 65 77 56 61 6c 75 65 5d 0d 0a 0d } newValue]... 196b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 196c0 7b 24 63 6f 64 65 20 3d 3d 20 24 4f 6b 7d 20 74 {$code == $Ok} t 196d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 196e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 196f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 19700 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 19710 28 6e 65 77 3f 29 20 72 6f 77 20 76 61 6c 75 65 (new?) row value 19720 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 19730 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 19740 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c lappend row [l 19750 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 ist$names($inde 19760 78 29 20 24 6e 65 77 56 61 6c 75 65 5d 0d 0a 20 x)$newValue]..
19770 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
19780 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 45  eif {$code ==$E
19790 72 72 6f 72 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  rror} then {..
197a0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
197c0 4f 54 45 3a 20 55 73 65 20 74 68 65 20 28 6e 65  OTE: Use the (ne
197d0 77 3f 29 20 4e 55 4c 4c 20 72 6f 77 20 76 61 6c  w?) NULL row val
197e0 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue...
197f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19800 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20      lappend row
19810 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e  [list $names($in
19820 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  dex)]..
19830 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f     } elseif {$co 19840 64 65 20 3d 3d 20 24 52 65 74 75 72 6e 7d 20 74 de ==$Return} t
19850 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19860 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19870 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
19880 69 70 20 72 65 6d 61 69 6e 69 6e 67 20 76 61 6c  ip remaining val
19890 75 65 73 20 66 6f 72 20 74 68 69 73 20 72 6f 77  ues for this row
198a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
198b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
198c0 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20    break..
198d0 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24       } elseif {$198e0 63 6f 64 65 20 3d 3d 20 24 42 72 65 61 6b 7d 20 code ==$Break}
198f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
19900 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19910 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
19920 6b 69 70 20 70 72 6f 63 65 73 73 69 6e 67 20 74  kip processing t
19930 68 69 73 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a  his row value...
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
19950 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
19960 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20  lseif {$code == 19970 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68 65 6e 20$Continue} then
19980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
19990 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
199a0 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 64 65    # NOTE: Use de
199b0 66 61 75 6c 74 20 72 6f 77 20 76 61 6c 75 65 20  fault row value
199c0 68 61 6e 64 6c 69 6e 67 2e 0d 0a 20 20 20 20 20  handling...
199d0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
199e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
199f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
19a00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63             set c
19a10 6f 64 65 20 24 43 6f 6e 74 69 6e 75 65 0d 0a 20  ode $Continue.. 19a20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 19a30 20 20 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 if {$cod
19a40 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20  e == $Continue} 19a50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19a60 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 19a70 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3e length$value] >
19a80 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20   0 && \..
19a90 20 20 20 20 20 20 20 20 20 21 5b 6f 62 6a 65 63           ![objec
19aa0 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 65 72 74  t invoke Convert
19ab0 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 6c 75 65   IsDBNull $value 19ac0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 19ad0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend 19ae0 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 row [list$name
19af0 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c 75  s($index) [$valu
19b00 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 20  e ToString]]..
19b10 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
19b20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
19b30 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c    lappend row [l
19b40 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65  ist $names($inde
19b50 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x)]..
19b60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
19b70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
19b80 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f        lappend ro
19b90 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d  ws $row.. } 19ba0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 19bb0 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c$rows..    }...
19bc0 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 6d 70 52  ..    proc dumpR
19bd0 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65  owsFromDataTable
19be0 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20   { channel rows
19bf0 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73  } {..      set s
19c00 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20  equence 1....
19c10 20 20 20 66 6f 72 65 61 63 68 20 72 6f 77 20 24     foreach row $19c20 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 rows {.. 19c30 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
19c40 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
19c50 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
19c60 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 31 20 3f  {$sequence > 1 ? 19c70 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d "\n" : ""}] "-- 19c80 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 71 75 65 -- ROW #"$seque
19c90 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  nce :\n]....
19ca0 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 69 72      foreach pair
19cb0 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20   $row {.. 19cc0 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 19cd0 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65$pair] >= 2} the
19ce0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19cf0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 19d00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c [appendArgs \t \ 19d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19d20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 [list [lindex 19d30 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b$pair 0]] ": " [
19d40 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61  list [lindex $pa 19d50 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 ir 1]] \n].. 19d60 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 19d70 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 [llength$pair]
19d80 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 1} then {..
19d90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
19da0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 19db0 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 Args \t \.. 19dc0 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 [list 19dd0 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 [lindex$pair 0
19de0 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d  ]] ": <null>\n"]
19df0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
19e00 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
19e10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 19e20 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 \t<empty>\n; # 19e30 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a NOTE: No data?.. 19e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 19e50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 19e60 20 20 69 6e 63 72 20 73 65 71 75 65 6e 63 65 0d incr sequence. 19e70 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 19e80 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 .... proc cle 19e90 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d anupDb { fileNam 19ea0 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b e {varName db} { 19eb0 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 collect true} {q 19ec0 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 ualify true}.. 19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19ee0 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d {delete true} 19ef0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 19f00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 19f10 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c empt to force al 19f20 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 l pending "garba 19f30 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 ge" objects to b 19f40 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 e collected,.. 19f50 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c # incl 19f60 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 uding SQLite sta 19f70 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b tements and back 19f80 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 up objects; this 19f90 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 should allow.. 19fa0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 19fb0 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 underlying data 19fc0 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 base file to be 19fd0 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 deleted... 19fe0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f #.. if {$co
19ff0 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  llect} then {..
1a000 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61         collectGa
1a010 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68  rbage $::test_ch 1a020 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a annel.. }.. 1a030 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1a040 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 # NOTE: Refer t 1a050 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 o the specified 1a060 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 variable (e.g. " 1a070 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 db") in the cont 1a080 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 ext of our.. 1a090 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 # caller 1a0a0 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f . The handle to 1a0b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 the database pr 1a0c0 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 eviously opened 1a0d0 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 via the.. # 1a0e0 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d [setupDb] 1a0f0 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c procedure shoul 1a100 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 d be stored ther 1a110 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 1a120 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
1a130 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20  ame db....
1a140 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1a150 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65   Close the conne
1a160 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74  ction to the dat
1a170 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73  abase now.  This
1a180 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73   should allow us
1a190 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1a1a0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e  to delete the un
1a1b0 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73  derlying databas
1a1c0 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23  e file...      #
1a1d0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
1a1e0 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26 26 20  o exists db] &&
1a1f0 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73  [catch {sql clos
1a200 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74  e $db} error]} t 1a210 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 1a220 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1a230 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai 1a240 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 led to close the 1a250 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 database, repor 1a260 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 1a270 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 1a280 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1a290 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1a2a0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1a2b0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1a2c0 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62  d to close datab
1a2d0 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c  ase \"" $db "\", 1a2e0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 1a2f0 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 \n\t$e
1a300 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
1a310 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
1a320 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73      # NOTE: Firs
1a330 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61  t, see if our ca
1a340 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74  ller has request
1a350 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  ed an in-memory
1a360 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20  database...
1a370 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73   #..      set is
1a380 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79  Memory [isMemory
1a390 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  Db $fileName]... 1a3a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1a3b0 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 1a3c0 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 e full path to t 1a3d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 he database file 1a3e0 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c name. For now, 1a3f0 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 all test.. 1a400 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 # databas 1a410 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 e files are stor 1a420 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 ed in the tempor 1a430 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a ary directory... 1a440 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1a450 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 f {!$isMemory &&
1a460 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20   $qualify} then 1a470 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 {.. set f 1a480 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ileName [file jo 1a490 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 in [getDatabaseD 1a4a0 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 irectory] [file 1a4b0 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
1a4c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1a4d0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1a4e0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
1a4f0 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73   file still exis
1a500 74 73 3b 20 69 6e 69 74 69 61 6c 6c 79 2c 20 61  ts; initially, a
1a510 73 73 75 6d 65 20 61 6c 6c 20 66 69 6c 65 73 20  ssume all files
1a520 77 69 6c 6c 0d 0a 20 20 20 20 20 20 23 20 20 20  will..      #
1a530 20 20 20 20 62 65 20 64 65 6c 65 74 65 64 20 73      be deleted s
1a540 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 69 66 20  uccessfully, if
1a550 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...
1a560 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73    #..      set s
1a570 75 63 63 65 73 73 20 74 72 75 65 0d 0a 0d 0a 20  uccess true....
1a580 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem 1a590 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 ory &&$delete &
1a5a0 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  & [file exists $1a5b0 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 1a5c0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1a5d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 1a5e0 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 ip deleting data 1a5f0 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f base files if so 1a600 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 mebody sets the 1a610 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 global.. 1a620 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 1a630 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d to prevent it.. 1a640 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1a650 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1a660 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e xists ::no(clean 1a670 75 70 44 62 46 69 6c 65 73 29 5d 7d 20 74 68 65 upDbFiles)]} the 1a680 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 1a690 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 1a6a0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d 1a6b0 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 57 elete the test W 1a6c0 41 4c 20 66 69 6c 65 2c 20 69 66 20 61 6e 79 2c AL file, if any, 1a6d0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 now... 1a6e0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 1a6f0 74 20 77 61 6c 46 69 6c 65 4e 61 6d 65 20 5b 61 t walFileName [a 1a700 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e ppendArgs$fileN
1a710 61 6d 65 20 2d 77 61 6c 5d 0d 0a 0d 0a 20 20 20  ame -wal]....
1a720 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
1a730 20 65 78 69 73 74 73 20 24 77 61 6c 46 69 6c 65   exists $walFile 1a740 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 1a750 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1a760 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1a770 3a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 : If there is a 1a780 57 41 4c 20 66 69 6c 65 2c 20 69 74 20 73 68 6f WAL file, it sho 1a790 75 6c 64 20 62 65 20 7a 65 72 6f 20 62 79 74 65 uld be zero byte 1a7a0 73 20 61 74 20 74 68 69 73 0d 0a 20 20 20 20 20 s at this.. 1a7b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 # p 1a7c0 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 oint... 1a7d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1a7e0 20 20 69 66 20 7b 5b 73 65 74 20 73 69 7a 65 20 if {[set size 1a7f0 5b 66 69 6c 65 20 73 69 7a 65 20 24 77 61 6c 46 [file size$walF
1a800 69 6c 65 4e 61 6d 65 5d 5d 20 3d 3d 20 30 7d 20  ileName]] == 0}
1a810 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1a820 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a830 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
1a840 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64  e somehow failed
1a850 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 57   to delete the W
1a860 41 4c 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20  AL file, report
1a870 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  why...
1a880 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1a890 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1a8a0 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 77 61  {file delete $wa 1a8b0 6c 46 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 lFileName} error 1a8c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1a8d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1a8e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1a8f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a910 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
1a920 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  G: failed to del
1a930 65 74 65 20 57 41 4c 20 66 69 6c 65 20 5c 22 22  ete WAL file \""
1a940 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 20 5c 0d   $walFileName \. 1a950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1a960 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 1a970 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 cleanup, error: 1a980 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
1a990 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
1a9a0 20 20 20 20 20 73 65 74 20 73 75 63 63 65 73 73       set success
1a9b0 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
1a9c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1a9d0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1a9f0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1aa00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1aa10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1aa20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1aa30 47 3a 20 57 41 4c 20 66 69 6c 65 20 5c 22 22 20 G: WAL file \"" 1aa40 24 77 61 6c 46 69 6c 65 4e 61 6d 65 20 22 5c 22$walFileName "\"
1aa50 20 69 73 20 22 20 24 73 69 7a 65 20 5c 0d 0a 20   is " $size \.. 1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1aa70 20 22 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 " bytes in size 1aa80 2c 20 73 6b 69 70 70 69 6e 67 20 61 6c 6c 20 66 , skipping all f 1aa90 69 6c 65 20 64 65 6c 65 74 69 6f 6e 73 2e 2e 2e ile deletions... 1aaa0 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... 1aab0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 return 1; 1aac0 23 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 # error.. 1aad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1aae0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1aaf0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1ab00 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 1ab10 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 delete the test 1ab20 20 53 48 4d 20 66 69 6c 65 2c 20 69 66 20 61 6e SHM file, if an 1ab30 79 2c 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 y, now... 1ab40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1ab50 73 65 74 20 73 68 6d 46 69 6c 65 4e 61 6d 65 20 set shmFileName 1ab60 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c [appendArgs$fil
1ab70 65 4e 61 6d 65 20 2d 73 68 6d 5d 0d 0a 0d 0a 20  eName -shm]....
1ab80 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
1ab90 6c 65 20 65 78 69 73 74 73 20 24 73 68 6d 46 69  le exists $shmFi 1aba0 6c 65 4e 61 6d 65 5d 20 26 26 20 5c 0d 0a 20 20 leName] && \.. 1abb0 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 [cat 1abc0 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 1abd0 24 73 68 6d 46 69 6c 65 4e 61 6d 65 7d 20 65 72$shmFileName} er
1abe0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
1abf0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1ac00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1ac10 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
1ac20 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  ed to delete the
1ac30 20 53 48 4d 20 66 69 6c 65 2c 20 72 65 70 6f 72   SHM file, repor
1ac40 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
1ac50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1ac60 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1ac70 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1ac80 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1ac90 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1aca0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1acb0 20 64 65 6c 65 74 65 20 53 48 4d 20 66 69 6c 65 delete SHM file 1acc0 20 5c 22 22 20 24 73 68 6d 46 69 6c 65 4e 61 6d \""$shmFileNam
1acd0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1ace0 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20       "\" during
1acf0 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20  cleanup, error:
1ad00 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e  " \n\t $error \n 1ad10 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 1ad20 20 73 65 74 20 73 75 63 63 65 73 73 20 66 61 6c set success fal 1ad30 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d se.. }. 1ad40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1ad50 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1ad60 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c : Attempt to del 1ad70 65 74 65 20 74 68 65 20 74 65 73 74 20 64 61 74 ete the test dat 1ad80 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d abase file now.. 1ad90 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1ada0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1adb0 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 1adc0 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72$fileName} error
1add0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1ade0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1adf0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
1ae00 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20   somehow failed
1ae10 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69  to delete the fi
1ae20 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d  le, report why..
1ae30 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1ae50 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1ae60 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1ae70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ae80 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1ae90 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 1aea0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c database file \ 1aeb0 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a ""$fileName \..
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aed0 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e  "\" during clean
1aee0 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  up, error: " \n\
1aef0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a  t $error \n].... 1af00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 1af10 73 75 63 63 65 73 73 20 66 61 6c 73 65 0d 0a 20 success false.. 1af20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1af30 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1af40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1af50 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 1af60 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 w that we skippe 1af70 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 d deleting the f 1af80 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 1af90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 1afa0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1afb0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1afc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1afd0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73  "==== WARNING: s
1afe0 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
1aff0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
1b000 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 1b020 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c during cleanup\ 1b030 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. 1b040 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1b050 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 return [expr {$
1b060 73 75 63 63 65 73 73 20 3f 20 30 20 3a 20 31 7d  success ? 0 : 1}
1b070 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
1b080 20 70 72 6f 63 20 73 61 76 65 45 6e 76 69 72 6f   proc saveEnviro
1b090 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b  nmentVariables {
1b0a0 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20   names {varName
1b0b0 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
1b0c0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1b0d0 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64  For each name, d
1b0e0 6f 65 73 20 74 68 65 20 6c 69 76 65 20 65 6e 76  oes the live env
1b0f0 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
1b100 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20  e exist?  If..
1b110 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20      #       so,
1b120 73 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 66  save the value f
1b130 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68 65 72 77  or later; otherw
1b140 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ise, make sure t
1b150 68 65 20 73 61 76 65 64 0d 0a 20 20 20 20 20 20  he saved..
1b160 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 64 6f  #       value do
1b170 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74  es not exist eit
1b180 68 65 72 2e 20 20 54 68 65 20 6c 69 76 65 20 65  her.  The live e
1b190 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
1b1a0 62 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20  bles..      #
1b1b0 20 20 20 20 41 52 45 20 4e 4f 54 20 63 68 61 6e      ARE NOT chan
1b1c0 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f 63  ged by this proc
1b1d0 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  edure...      #.
1b1e0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
1b1f0 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61  ng length $varNa 1b200 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b me] == 0} then { 1b210 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 .. set va 1b220 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a rName savedEnv.. 1b230 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1b240 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
1b250 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20  e savedEnv....
1b260 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
1b270 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20   $names {.. 1b280 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 1b290 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 sts ::env($name)
1b2a0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1b2b0 20 20 20 20 20 73 65 74 20 73 61 76 65 64 45 6e       set savedEn
1b2c0 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28  v($name)$::env(
1b2d0 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  $name).. 1b2e0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1b2f0 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d unset -nocom 1b300 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 28 24 plain savedEnv($
1b310 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d  name)..        }
1b320 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1b330 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1b340 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66  TE: This is self
1b350 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e  -cleaning.  If n
1b360 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d  o saved environm
1b370 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f  ent variables no
1b380 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  w..      #
1b390 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74   exist, remove t
1b3a0 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20  he array...
1b3b0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61   #..      if {[a
1b3c0 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 64 45  rray size savedE
1b3d0 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  nv] == 0} then {
1b3e0 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20  ..        unset
1b3f0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65  -nocomplain save
1b400 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  dEnv..      }..
1b410 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1b420 63 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e  c restoreEnviron
1b430 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20  mentVariables {
1b440 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22  names {varName "
1b450 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
1b460 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
1b470 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f  or each name, do
1b480 65 73 20 74 68 65 20 73 61 76 65 64 20 65 6e 76  es the saved env
1b490 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
1b4a0 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20  e exist?  If..
1b4b0 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20      #       so,
1b4c0 72 65 73 74 6f 72 65 20 74 68 65 20 73 61 76 65  restore the save
1b4d0 64 20 76 61 6c 75 65 20 61 6e 64 20 75 6e 73 65  d value and unse
1b4e0 74 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 2c  t it; otherwise,
1b4f0 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20 20 20 20   make sure..
1b500 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c 69    #       the li
1b510 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  ve environment v
1b520 61 72 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  ariable does not
1b530 20 65 78 69 73 74 20 65 69 74 68 65 72 20 28 69   exist either (i
1b540 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 23 20  .e. it..      #
1b550 20 20 20 20 20 20 77 61 73 20 6e 6f 74 20 73 65        was not se
1b560 74 20 74 6f 20 62 65 67 69 6e 20 77 69 74 68 29  t to begin with)
1b570 2e 20 20 42 6f 74 68 20 73 61 76 65 64 20 61 6e  .  Both saved an
1b580 64 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65  d live environme
1b590 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  nt..      #
1b5a0 20 20 76 61 72 69 61 62 6c 65 73 20 41 52 45 20    variables ARE
1b5b0 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this
1b5c0 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20  procedure...
1b5d0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1b5e0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 1b5f0 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 arName] == 0} th 1b600 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 1b610 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 t varName savedE 1b620 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 nv.. }.... 1b630 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
1b640 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a  rName savedEnv..
1b650 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
1b660 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20  name $names {.. 1b670 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 1b680 20 65 78 69 73 74 73 20 73 61 76 65 64 45 6e 76 exists savedEnv 1b690 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b ($name)]} then {
1b6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1b6b0 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20 24 73 61  ::env($name)$sa
1b6c0 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20  vedEnv($name).. 1b6d0 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d unset - 1b6e0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 nocomplain saved 1b6f0 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 Env($name)..
1b700 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1b710 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1b720 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28  ocomplain ::env(
1b730 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  $name).. 1b740 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 1b750 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 1b760 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c OTE: This is sel 1b770 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 f-cleaning. If 1b780 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e no saved environ 1b790 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e ment variables n 1b7a0 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ow.. # 1b7b0 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 exist, remove 1b7c0 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 the array... 1b7d0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 1b7e0 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 64 array size saved 1b7f0 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 Env] == 0} then 1b800 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 {.. unset 1b810 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 -nocomplain sav 1b820 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a edEnv.. }.. 1b830 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1b840 6f 63 20 73 61 76 65 45 61 67 6c 65 53 68 65 6c oc saveEagleShel 1b850 6c 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 lEnvironment {} 1b860 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 {.. upvar 1 1b870 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 savedEnv savedE 1b880 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 nv.... save 1b890 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 EnvironmentVaria 1b8a0 62 6c 65 73 20 5b 6c 69 73 74 20 4e 6f 4d 75 74 bles [list NoMut 1b8b0 65 78 65 73 5d 20 73 61 76 65 64 45 6e 76 0d 0a exes] savedEnv.. 1b8c0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1b8d0 6f 63 20 72 65 73 74 6f 72 65 45 61 67 6c 65 53 oc restoreEagleS 1b8e0 68 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 hellEnvironment 1b8f0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 1b900 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 1b910 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 edEnv.... r 1b920 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e estoreEnvironmen 1b930 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 1b940 20 4e 6f 4d 75 74 65 78 65 73 5d 20 73 61 76 65 NoMutexes] save 1b950 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a dEnv.. }..... 1b960 20 20 20 20 70 72 6f 63 20 73 61 76 65 4d 64 61 proc saveMda 1b970 43 6f 6e 66 69 67 45 6e 76 69 72 6f 6e 6d 65 6e ConfigEnvironmen 1b980 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 t {} {.. up 1b990 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 var 1 savedEnv s 1b9a0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 1b9b0 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 saveEnvironment 1b9c0 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 Variables [list 1b9d0 43 4f 4d 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 COMPLUS_MDA] sav 1b9e0 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d edEnv.. }.... 1b9f0 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 . proc restor 1ba00 65 4d 64 61 43 6f 6e 66 69 67 45 6e 76 69 72 6f eMdaConfigEnviro 1ba10 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 nment {} {.. 1ba20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 upvar 1 savedE 1ba30 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 nv savedEnv.... 1ba40 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 restoreEnvi 1ba50 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 1ba60 20 5b 6c 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d [list COMPLUS_M 1ba70 44 41 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 DA] savedEnv.. 1ba80 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1ba90 20 73 61 76 65 47 65 74 53 65 74 74 69 6e 67 56 saveGetSettingV 1baa0 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 alueEnvironment 1bab0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 1bac0 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 1bad0 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 edEnv.... s 1bae0 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 aveEnvironmentVa 1baf0 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d riables [list \. 1bb00 0a 20 20 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 . No_Ex 1bb10 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 pand No_SQLiteGe 1bb20 74 53 65 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f tSettingValue No 1bb30 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 _SQLiteXmlConfig 1bb40 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 File] \.. 1bb50 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 savedEnv.. 1bb60 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1bb70 72 65 73 74 6f 72 65 47 65 74 53 65 74 74 69 6e restoreGetSettin 1bb80 67 56 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e gValueEnvironmen 1bb90 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 t {} {.. up 1bba0 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 var 1 savedEnv s 1bbb0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 1bbc0 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d restoreEnvironm 1bbd0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 1bbe0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 1bbf0 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c No_Expand No_SQL 1bc00 69 74 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c iteGetSettingVal 1bc10 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 ue No_SQLiteXmlC 1bc20 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 onfigFile] \.. 1bc30 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 savedEnv 1bc40 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1bc50 70 72 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 proc saveSQLiteC 1bc60 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e onnectionEnviron 1bc70 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ment {} {.. 1bc80 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e upvar 1 savedEn 1bc90 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 v savedEnv.... 1bca0 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d saveEnvironm 1bcb0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 1bcc0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 1bcd0 44 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c DefaultFlags_SQL 1bce0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f iteConnection No 1bcf0 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f _SQLiteConnectio 1bd00 6e 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 nNewParser] \.. 1bd10 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e savedEn 1bd20 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 v.. }..... 1bd30 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c proc restoreSQL 1bd40 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 iteConnectionEnv 1bd50 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 ironment {} {.. 1bd60 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 upvar 1 sav 1bd70 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a edEnv savedEnv.. 1bd80 0d 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 .. restoreE 1bd90 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 1bda0 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 les [list \.. 1bdb0 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c DefaultFl 1bdc0 61 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ags_SQLiteConnec 1bdd0 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f tion No_SQLiteCo 1bde0 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 nnectionNewParse 1bdf0 72 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 r] \.. 1be00 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d savedEnv.. }. 1be10 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 .... proc sav 1be20 65 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e eSQLiteConvertEn 1be30 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a vironment {} {.. 1be40 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 upvar 1 sa 1be50 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d vedEnv savedEnv. 1be60 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 ... saveEnv 1be70 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 1be80 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 1be90 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 Use_SQLiteC 1bea0 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 onvert_DefaultDb 1beb0 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 Type Use_SQLiteC 1bec0 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 onvert_DefaultTy 1bed0 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 peName] \.. 1bee0 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 1bef0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1bf00 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 c restoreSQLiteC 1bf10 6f 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e onvertEnvironmen 1bf20 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 t {} {.. up 1bf30 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 var 1 savedEnv s 1bf40 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 1bf50 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d restoreEnvironm 1bf60 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 1bf70 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 1bf80 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 Use_SQLiteConver 1bf90 74 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 t_DefaultDbType 1bfa0 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 Use_SQLiteConver 1bfb0 74 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d t_DefaultTypeNam 1bfc0 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e] \.. 1bfd0 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d savedEnv.. }. 1bfe0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 .... proc set 1bff0 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c upDbInterruptCal 1c000 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 lback { channel 1c010 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 log } {.. t 1c020 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
1c030 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64  --- setting up d
1c040 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70  ebugger interrup
1c050 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d  t callback... ".
1c060 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
1c070 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  tch {..        s
1c080 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  aveEnvironmentVa
1c090 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d  riables [list \.
1c0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69  .            qui
1c0b0 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65  etFindInterprete
1c0c0 72 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53  rTestPath quietS
1c0d0 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54  etupInterpreterT
1c0e0 65 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20  estPath]....
1c0f0 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20      try {..
1c100 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c110 20 20 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e    # NOTE: Preven
1c120 74 20 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72  t the vendor scr
1c130 69 70 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e  ipt from being n
1c140 6f 69 73 79 20 77 68 65 6e 20 63 72 65 61 74 69  oisy when creati
1c150 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ng..          #
1c160 20 20 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74        the isolat
1c170 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  ed interpreter..
1c180 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c190 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e          set ::en
1c1a0 76 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72  v(quietFindInter
1c1b0 70 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20  preterTestPath)
1c1c0 31 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  1..          set
1c1d0 20 3a 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75   ::env(quietSetu
1c1e0 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74  pInterpreterTest
1c1f0 50 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20  Path) 1....
1c200 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c210 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73    # NOTE: Make s
1c220 75 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64  ure the script d
1c230 65 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20  ebugger and the
1c240 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
1c250 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20  eter..
1c260 23 20 20 20 20 20 20 20 61 72 65 20 73 65 74 75  #       are setu
1c270 70 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20  p and ready for
1c280 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  use...
1c290 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  #..          deb
1c2a0 75 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72  ug setup true tr
1c2b0 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ue....
1c2c0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
1c2d0 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65  OTE: Load the ne
1c2e0 63 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73  cessary packages
1c2f0 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74   into the isolat
1c300 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  ed interpreter..
1c310 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c320 20 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76          debug ev
1c330 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  al {..
1c340 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72    package requir
1c350 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20  e Eagle..
1c360 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
1c370 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61  uire Eagle.Libra
1c380 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..
1c390 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require
1c3a0 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20  Eagle.Test..
1c3b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1c3c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c3d0 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74    # NOTE: Copy t
1c3e0 68 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72  he necessary var
1c3f0 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20  iables into the
1c400 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
1c410 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  eter...
1c420 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65   #..          de
1c430 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74  bug invoke 0 set
1c440 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20   ::test_channel
1c450 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45  $channel; # NOTE 1c460 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a : For [tputs]... 1c470 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 debug 1c480 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 invoke 0 set ::t 1c490 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 est_log$log; #
1c4a0 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d  NOTE: For [tlog]
1c4b0 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  .....          #
1c4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1c4d0 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20  TE: Install the
1c4e0 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20  callback script
1c4f0 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20  to be evaluated
1c500 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d  in the isolated.
1c510 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
1c520 20 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77     interpreter w
1c530 68 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72  hen this interpr
1c540 65 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70  eter is interrup
1c550 74 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20  ted by script..
1c560 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1c570 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65   cancellation, e
1c580 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  tc...          #
1c590 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75  ..          debu
1c5a0 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79  g callback apply
1c5b0 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a   {{sender e} {..
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1c5d0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
1c5e0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73  E: Check if this
1c5f0 20 64 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61   debugger callba
1c600 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77  ck is one that w
1c610 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20  e care about...
1c620 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1c630 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e            set in
1c640 74 65 72 72 75 70 74 54 79 70 65 73 20 5b 73 70  terruptTypes [sp
1c650 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70  lit [$e Interrup 1c660 74 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a tType] ", "].... 1c670 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1c680 22 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 "Canceled" in$i
1c690 6e 74 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c  nterruptTypes ||
1c6a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c6b0 20 20 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e      "Unwound" in
1c6c0 20 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73   $interruptTypes 1c6d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c6e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1c6f0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1c700 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b Make sure the [ 1c710 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 object] command 1c720 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 is available. S 1c730 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ince.. 1c740 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 # this 1c750 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 is an isolated 1c760 69 6e 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 interpreter, che 1c770 63 6b 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 ck for it the ha 1c780 72 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rd.. 1c790 20 20 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a # way... 1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 1c7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 1c7c0 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 f {[llength [inf 1c7d0 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 o commands objec 1c7e0 74 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d t]] > 0} then {. 1c7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1c800 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1c810 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 # NOTE: Iter 1c820 61 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 ate through all 1c830 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect 1c840 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 ions known to th 1c850 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 1c860 20 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e # paren 1c870 74 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a t interpreter... 1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c890 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1c8a0 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 object foreac 1c8b0 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f h -alias pair [o 1c8c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 1c8d0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 1c8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c8f0 20 20 20 20 20 20 24 65 20 49 6e 74 65 72 70 72$e Interpr
1c900 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  eter.connections
1c910 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..
1c920 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1c930 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1c940 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63  TE: Attempt to c
1c950 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75  ancel any SQL qu
1c960 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73  eries in progres
1c970 73 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  s on..
1c980 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1c990 74 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  this database co
1c9a0 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  nnection...
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c9d0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70    if {[catch {$p 1c9e0 61 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c air Value.Cancel 1c9f0 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { 1ca00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ca10 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1ca20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1ca30 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20  endArgs \n \..
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ca50 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1ca60 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63  ING: failed to c
1ca70 61 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20  ancel query for
1ca80 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1caa0 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70  nnection \"" [$p 1cab0 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 air Key] "\", er 1cac0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 ror: " \n\t \.. 1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1cae0 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e$error \n
1caf0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
1cb00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1cb10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1cb20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
1cb30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1cb40 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1cb50 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1cb60 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 Args \n \.. 1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1cb80 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 ==== WARNING: ca 1cb90 6e 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 nnot cancel any 1cba0 71 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 queries: " \.. 1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1cbc0 20 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c "the \"object\ 1cbd0 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 " command is not 1cbe0 20 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a available\n"].. 1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1cc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1cc10 20 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 }}.. 1cc20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 } finally 1cc30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 {.. res 1cc40 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 toreEnvironmentV 1cc50 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c ariables [list \ 1cc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1cc70 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 quietFindInterpr 1cc80 65 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 eterTestPath qui 1cc90 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 etSetupInterpret 1cca0 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 erTestPath].. 1ccb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 1ccc0 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 1ccd0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 n {.. add 1cce0 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 Constraint inter 1ccf0 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c ruptCallback.sql 1cd00 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ite3.... 1cd10 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
1cd20 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c  es\n..      } el
1cd30 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
1cd40 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1cd50 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 pendArgs "no, er 1cd60 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
1cd70 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  or \n]..      }.
1cd80 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1cd90 72 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20  roc cleanupFile
1cda0 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c  { fileName {coll
1cdb0 65 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65  ect true} {force
1cdc0 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
1cdd0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1cde0 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66  TE: Attempt to f
1cdf0 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67  orce all pending
1ce00 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63   "garbage" objec
1ce10 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74  ts to be collect
1ce20 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ed,..      #
1ce30 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c     including SQL
1ce40 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ite statements a
1ce50 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  nd backup object
1ce60 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61  s; this should a
1ce70 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20  llow..      #
1ce80 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69      the underlyi
1ce90 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
1cea0 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d   to be deleted..
1ceb0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1cec0 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68  if {$collect} th 1ced0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f en {.. co 1cee0 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a llectGarbage$::
1cef0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..
1cf00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
1cf10 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1cf20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c  Check if the fil
1cf30 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d  e still exists..
1cf40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1cf50 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
1cf60 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 1cf70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 1cf80 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1cf90 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 Skip deleting te 1cfa0 73 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 st files if some 1cfb0 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c body sets the gl 1cfc0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 obal variable.. 1cfd0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 1cfe0 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 o prevent it... 1cff0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1d000 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 if {$force ||
1d010 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1d020 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d  no(cleanupFile)]
1d030 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1d040 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1d050 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
1d060 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74   to delete the t
1d070 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20  est file now...
1d080 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1d090 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63        if {[set c
1d0a0 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65  ode [catch {file
1d0b0 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d   delete $fileNam 1d0c0 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e e} error]]} then 1d0d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d0e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 1d0f0 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f NOTE: We someho 1d100 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 w failed to dele 1d110 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 te the file, rep 1d120 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 1d130 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1d140 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1d150 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1d160 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1d170 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1d180 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1d190 74 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66  to delete test f
1d1a0 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 1d1b0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 1d1c0 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 1d1d0 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 cleanup, error: 1d1e0 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
1d1f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1d200 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1d210 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1d220 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1d230 20 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b   Show that we sk
1d240 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74  ipped deleting t
1d250 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  he file...
1d260 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1d270 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20   set code 0....
1d280 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1d290 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1d2a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1d2c0 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 = WARNING: skipp 1d2d0 65 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 ed deleting test 1d2e0 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
1d2f0 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
1d300 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20       "\" during
1d310 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20  cleanup\n"]..
1d320 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
1d330 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1d340 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1d350 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73  E: The file does
1d360 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63   not exist, succ
1d370 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d  ess!..        #.
1d380 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64  .        set cod
1d390 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e 0..      }....
1d3a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f        return $co 1d3b0 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 de.. }..... 1d3c0 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 proc cleanupMe 1d3d0 6d 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b mory { varName { 1d3e0 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 1d3f0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 1d400 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 1d410 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 mand] && \.. 1d420 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1d430 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e ngth$varName] >
1d440 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1d450 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1d460 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
1d470 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
1d480 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f  riable (e.g. "co
1d490 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68  nnection") in th
1d4a0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1d4b0 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75     context of ou
1d4c0 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f  r caller.  The o
1d4d0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
1d4e0 64 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20  dle for an..
1d4f0 20 20 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e      #       ADO.
1d500 4e 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  NET connection p
1d510 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e  reviously return
1d520 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e  ed by [getDbConn
1d530 65 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20  ection]..
1d540 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
1d550 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
1d560 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1d570 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 1d580 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e rName connection 1d590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1d5a0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1d5b0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1d5c0 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 e$connection Re
1d5d0 6c 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20  leaseMemory..
1d5e0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20       } result]}
1d5f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d600 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1d610 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d620 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1d630 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1d640 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1d650 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1d660 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1d670 20 72 65 6c 65 61 73 65 20 64 61 74 61 62 61 73   release databas
1d680 65 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a  e memory, error:
1d690 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1d6a0 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75        \n\t $resu 1d6b0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 1d6c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1d6d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1d6e0 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 if {[llength [i 1d6f0 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 nfo commands deb 1d700 75 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ug]] > 0} then { 1d710 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 1d720 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1d730 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 1d740 74 20 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a t debug purge].. 1d750 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 1d760 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1d770 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1d780 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1d790 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1d7a0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1d7b0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1d7c0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 1d7d0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 1d7e0 20 74 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 to purge call f 1d7f0 72 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c rame, error: " \ 1d800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d810 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
1d820 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1d830 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1d840 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1d850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70   {..          up
1d860 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65  level 1 [list de
1d870 62 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20  bug cleanup]..
1d880 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d        } result]}
1d890 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d8a0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1d8b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d8c0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1d8d0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1d8e0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1d8f0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
1d900 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
1d910 6f 20 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70  o cleanup interp
1d920 72 65 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20  reter, error: "
1d930 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d940 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20     \n\t $result 1d950 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1d960 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1d970 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 1d980 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 h {.. u 1d990 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 plevel 1 [list d 1d9a0 65 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 ebug collect].. 1d9b0 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 1d9c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1d9d0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1d9e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d9f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1da00 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1da10 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1da20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1da30 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1da40 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 to collect garba 1da50 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a ge, error: " \.. 1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1da70 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
1da80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1da90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1daa0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1dab0 20 70 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72   proc setupMemor
1dac0 79 43 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e  yCounters { varN
1dad0 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ame } {..      i
1dae0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
1daf0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
1db00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70  en {..        up
1db10 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63  var 1 $varName c 1db20 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 ounter.... 1db30 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 set counter(1) 1db40 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 [object create 1db50 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 1db60 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 System.Dia 1db70 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d gnostics.Perform 1db80 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 anceCounter Proc 1db90 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ess \.. 1dba0 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 "Working Set" 1dbb0 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 [file rootname 1dbc0 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 [file tail$::bi
1dbd0 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20  n_file]]]....
1dbe0 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72       set counter
1dbf0 28 32 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  (2) [object crea
1dc00 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  te -alias \..
1dc10 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1dc20 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66  Diagnostics.Perf
1dc30 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50  ormanceCounter P
1dc40 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20  rocess \..
1dc50 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53        "Working S
1dc60 65 74 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72  et Peak" [file r
1dc70 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61  ootname [file ta
1dc80 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d  il $::bin_file]] 1dc90 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 1dca0 20 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a counter(3) [obj 1dcb0 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 ect create -alia 1dcc0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1dcd0 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 System.Diagnost 1dce0 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 ics.PerformanceC 1dcf0 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c ounter Process \ 1dd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 .. "P 1dd10 72 69 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 rivate Bytes" [f 1dd20 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 ile rootname [fi 1dd30 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 le tail$::bin_f
1dd40 69 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  ile]]]..      }.
1dd50 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
1dd60 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ""..    }.....
1dd70 20 20 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d    proc reportMem
1dd80 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68  oryCounters { ch
1dd90 61 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72  annel varName pr
1dda0 65 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20  efix } {..
1ddb0 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
1ddc0 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
1ddd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
1dde0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 1ddf0 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 counter.... 1de00 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1de10 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1de20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
1de30 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63  -- " $prefix " c 1de40 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 ounter \"" \.. 1de50 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 [objec 1de60 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 t invoke$counte
1de70 72 28 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65  r(1) CounterName
1de80 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22  ] "\" value is "
1de90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1dea0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $1deb0 63 6f 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 counter(1) RawVa 1dec0 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 lue] \n].... 1ded0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1dee0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1def0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
1df00 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20  --- " $prefix " 1df10 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 counter \"" \.. 1df20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 [obje 1df30 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 ct invoke$count
1df40 65 72 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d  er(2) CounterNam
1df50 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20  e] "\" value is
1df60 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1df70 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
1df80 24 63 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56  $counter(2) RawV 1df90 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 alue] \n].... 1dfa0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1dfb0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1dfc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
1dfd0 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22  ---- " $prefix " 1dfe0 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a counter \"" \.. 1dff0 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a [obj 1e000 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e ect invoke$coun
1e010 74 65 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61  ter(3) CounterNa
1e020 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73  me] "\" value is
1e030 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1e040 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65    [object invoke
1e050 20 24 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77   $counter(3) Raw 1e060 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 Value] \n].. 1e070 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1e080 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 proc collectG 1e090 61 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c arbage { channel 1e0a0 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 {milliseconds 1 1e0b0 30 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 000} {quiet true 1e0c0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 1e0d0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 1e0e0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 1e0f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 1e100 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1e110 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 1e120 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d e GC GetTotalMem 1e130 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 ory false.. 1e140 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 } result] == 1e150 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1e160 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e170 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e180 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1e190 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1e1a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e1b0 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 "---- memory 1e1c0 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 in use by the C 1e1d0 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 LR before collec 1e1e0 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 tion... " \.. 1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65$re
1e200 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d  sult " bytes\n"]
1e210 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1e220 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1e230 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1e240 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1e250 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1e260 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1e270 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1e280 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1e290 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1e2a0 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72  to get CLR memor
1e2b0 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20  y usage, error:
1e2c0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1e2d0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 1e2e0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 1e2f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1e300 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1e310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1e350 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 1e360 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1e370 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 TE: Repeatedly a 1e380 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 ttempt to collec 1e390 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 t garbage until 1e3a0 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d the allotted num 1e3b0 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ber.. # 1e3c0 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e of millisecon 1e3d0 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 ds has elapsed. 1e3e0 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 Always attempt 1e3f0 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 to collect garba 1e400 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ge.. # 1e410 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e at least once. 1e420 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1e430 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 1e440 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 ObjectCommand]} 1e450 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1e460 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b set start [clock 1e470 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 seconds].. 1e480 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 set stop [exp 1e490 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 r {$start + ($mi 1e4a0 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 lliseconds / 100 1e4b0 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 0)}].... 1e4c0 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 do {.. 1e4d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1e4e0 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 1e4f0 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 force a full gar 1e500 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 bage collection 1e510 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 now. Report any 1e520 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1e530 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 error that i 1e540 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 s encountered if 1e550 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 we fail... 1e560 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e570 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1e580 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 1e590 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 ct invoke GC Get 1e5a0 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 TotalMemory true 1e5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 .. } er 1e5c0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 1e5d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1e5e0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1e600 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1e610 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1e630 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1e640 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 ed full garbage 1e650 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f collection, erro 1e660 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. 1e670 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
1e680 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
1e690 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1e6a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1e6b0 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63     set now [cloc
1e6c0 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20  k seconds]..
1e6d0 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74      } while {$st 1e6e0 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 art <=$now && $1e6f0 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 now <$stop}..
1e700 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
1e710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e750 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
1e760 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
1e770 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d  eObjectCommand]}
1e780 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e790 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
1e7a0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
1e7b0 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
1e7c0 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a  alMemory false..
1e7d0 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74          } result
1e7e0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1e7f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1e800 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1e810 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1e820 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1e830 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1e840 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d           "---- m
1e850 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
1e860 74 68 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f  the CLR after co
1e870 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d  llection... " \.
1e880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1e890 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73   $result " bytes 1e8a0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 1e8b0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1e8c0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 e {.. i 1e8d0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1e8e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1e8f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1e900 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1e920 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1e930 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d led to get CLR m 1e940 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 emory usage, err 1e950 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 1e960 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
1e970 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
1e980 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1e990 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
1e9a0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
1e9b0 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f  etSQLiteHandleCo
1e9c0 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  unts { channel {
1e9d0 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
1e9e0 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75  ..      set resu
1e9f0 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  lt [list]....
1ea00 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
1ea10 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
1ea20 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1ea30 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69   [haveSQLiteDefi
1ea40 6e 65 43 6f 6e 73 74 61 6e 74 20 43 4f 55 4e 54  neConstant COUNT
1ea50 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b  _HANDLE]} then {
1ea60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1ea70 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
1ea80 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 68   each critical h
1ea90 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74  andle count to t
1eaa0 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73  he resulting lis
1eab0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
1eac0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e         foreach n
1ead0 61 6d 65 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ame [list \..
1eae0 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
1eaf0 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65  ionCount stateme
1eb00 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f  ntCount backupCo
1eb10 75 6e 74 20 62 6c 6f 62 43 6f 75 6e 74 5d 20 7b  unt blobCount] {
1eb20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1eb30 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1eb40 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1eb50 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1eb60 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
1eb70 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1eb80 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75  Data.SQLite.Debu
1eb90 67 44 61 74 61 20 24 6e 61 6d 65 0d 0a 20 20 20  gData $name.. 1eba0 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 } value] 1ebb0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1ebc0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1ebd0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1ebf0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1ec00 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1ec20 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 -- critical hand 1ec30 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 le count \""$na
1ec40 6d 65 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c  me "\" is " $val 1ec50 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ue \n].. 1ec60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1ec70 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 lappend res 1ec80 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 ult$value..
1ec90 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1ecb0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1ecc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 1ecd0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1ece0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ed00 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1ed10 69 6c 65 64 20 74 6f 20 67 65 74 20 63 72 69 74  iled to get crit
1ed20 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e  ical handle coun
1ed30 74 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  t \"" \..
1ed40 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65             $name 1ed50 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c "\", error: " \ 1ed60 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a n\t$value \n]..
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1ed80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1ed90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
1eda0 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20  lseif {!$quiet} 1edb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1edc0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1edd0 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 E: The actual ha 1ede0 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 ndle counts are 1edf0 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 not available; t 1ee00 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a herefore, just.. 1ee10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ee20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 1ee30 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 list... # 1ee40 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1ee50 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
1ee60 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
1ee70 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c  ounts unavailabl
1ee80 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  e\n"..      }...
1ee90 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 1eea0 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 1eeb0 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f . proc shutdo 1eec0 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e wnSQLite { chann 1eed0 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d el {force false} 1eee0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 1eef0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1ef00 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 # NOTE: Make 1ef10 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 sure that SQLite 1ef20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 core library is 1ef30 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 completely shut 1ef40 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 down. This.. 1ef50 20 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 # is us 1ef60 65 64 20 62 79 20 74 65 73 74 73 20 74 68 61 74 ed by tests that 1ef70 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 change configur 1ef80 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e ation options an 1ef90 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 d/or those.. 1efa0 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 6e # that n 1efb0 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 eed to make sure 1efc0 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 logging is init 1efd0 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 ialized (i.e. ju 1efe0 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 st in case.. 1eff0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 # the SQ 1f000 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 1f010 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 y was initialize 1f020 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 d in the process 1f030 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 prior to.. 1f040 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c # the SQL 1f050 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 iteLog class bei 1f060 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 ng able to setup 1f070 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c its logging cal 1f080 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 lback)... # 1f090 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c Normally, 1f0a0 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c this should onl 1f0b0 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 y be performed i 1f0c0 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 f SQLite is load 1f0d0 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 ed and.. # 1f0e0 20 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 ready for 1f0f0 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 use by the test 1f100 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d suite... #. 1f110 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 . if {$forc
1f120 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65  e || [isSQLiteRe
1f130 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ady]} then {..
1f140 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1f150 20 23 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20   # BUGFIX: Make
1f160 73 75 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c  sure that any "l
1f170 65 61 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69  eaked" transacti
1f180 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65  ons and/or conne
1f190 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  ctions..
1f1a0 23 20 20 20 20 20 20 20 20 20 61 72 65 20 63 6c  #         are cl
1f1b0 65 61 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20  eaned up before
1f1c0 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69  calling the nati
1f1d0 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63  ve shutdown func
1f1e0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23  tion...        #
1f1f0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
1f200 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69  h transaction [i
1f210 6e 66 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  nfo transactions
1f220 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ] {..          i
1f230 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  f {[string match
1f240 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f250 20 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51    System#Data#SQ
1f260 4c 69 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73  Lite#SQLiteTrans
1f270 61 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61  action#* $transa 1f280 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a ction]} then {.. 1f290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1f2a0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1f2b0 20 20 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e sql tran 1f2c0 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b saction rollback 1f2d0 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20$transaction..
1f2e0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
1f2f0 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
1f300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f310 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1f320 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1f330 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1f340 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1f350 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1f360 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c         "---- rol
1f370 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20  led back leaked
1f380 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20  transaction \""
1f390 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1f3a0 20 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74         $transact 1f3b0 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ion \"\n].. 1f3c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1f3d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1f3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f3f0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1f400 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1f410 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1f420 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1f430 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f440 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1f450 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1f460 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 rollback leaked 1f470 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 transaction \"" 1f480 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f490 20 20 20 20 20 20 20 24 74 72 61 6e 73 61 63 74$transact
1f4a0 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  ion "\", error:
1f4b0 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e  " \n\t $error \n 1f4c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 1f4d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1f4e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1f4f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1f500 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 foreach db 1f510 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e [info connection 1f520 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 s] {.. 1f530 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 if {[string matc 1f540 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h \.. 1f550 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 System#Data#S 1f560 51 4c 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e QLite#SQLiteConn 1f570 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 ection#*$db]} t
1f580 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f590 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73     if {[catch {s
1f5a0 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72  ql close $db} er 1f5b0 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then 1f5c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f5d0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1f5e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1f5f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1f600 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1f610 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f620 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c "---- cl 1f630 6f 73 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 osed leaked data 1f640 62 61 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c base \""$db \"\
1f650 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1f660 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1f670 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1f680 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1f690 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 1f6b0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1f6c0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f6e0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
1f6f0 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c  ailed to close l
1f700 65 61 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c  eaked database \
1f710 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1f720 20 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c            $db "\ 1f730 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 1f740 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
1f750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1f760 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1f770 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1f780 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
1f790 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46  ..        # BUGF
1f7a0 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69  IX: Before calli
1f7b0 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68  ng the native sh
1f7c0 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c  utdown function,
1f7d0 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d   make sure both.
1f7e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1f7f0 20 20 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41     of the PRAGMA
1f800 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f   related directo
1f810 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65  ry names are fre
1f820 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
1f830 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
1f840 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
1f850 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  s $channel true. 1f860 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 1f870 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1f880 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1f890 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 1f8a0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 1f8b0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 1f8c0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 1f8d0 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 iveMethods sqlit 1f8e0 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 e3_shutdown.. 1f8f0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d } result] = 1f900 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1f910 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1f920 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1f930 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1f940 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1f950 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1f960 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 1f970 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 1f980 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 n()... ok: "$re
1f990 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
1f9a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1f9b0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1f9c0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1f9d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f9e0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1f9f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1fa00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1fa10 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
1fa20 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e  ite3_shutdown().
1fa30 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  .. error: " \n\t
1fa40 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1fa50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1fa60 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1fa70 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1fa80 63 20 67 65 74 53 65 74 74 69 6e 67 52 65 61 64 c getSettingRead 1fa90 43 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7b 76 69 Count { name {vi 1faa0 61 46 69 6c 65 20 66 61 6c 73 65 7d 20 7d 20 7b aFile false} } { 1fab0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 1fac0 65 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c eConstraint buil 1fad0 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 dConfiguration.D 1fae0 65 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 ebug] && [catch 1faf0 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 1fb00 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 1fb10 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 +NonPublic -alia 1fb20 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1fb30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1fb40 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 ite.DebugData Ge 1fb50 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e tSettingReadCoun 1fb60 74 73 20 24 76 69 61 46 69 6c 65 0d 0a 20 20 20 ts$viaFile..
1fb70 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64     } settingRead
1fb80 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68  Counts] == 0} th
1fb90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
1fba0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
1fbb0 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65   $name] > 0} the 1fbc0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 1fbd0 66 20 7b 5b 24 73 65 74 74 69 6e 67 52 65 61 64 f {[$settingRead
1fbe0 43 6f 75 6e 74 73 20 54 72 79 47 65 74 56 61 6c  Counts TryGetVal
1fbf0 75 65 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d  ue $name value]} 1fc00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1fc10 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1fc20 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1fc30 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1fc40 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1fc50 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d  setting \"" $nam 1fc60 65 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 e "\" was read " 1fc70 20 24 76 61 6c 75 65 20 22 20 74 69 6d 65 73 22$value " times"
1fc80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1fc90 20 20 20 20 5b 65 78 70 72 20 7b 24 76 69 61 46      [expr {$viaF 1fca0 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 ile ? " from the 1fcb0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 configuration f 1fcc0 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d ile" : ""}] \n]. 1fcd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 ... r 1fce0 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 eturn$value..
1fcf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1fd00 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1fd10 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43         set nameC
1fd20 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 65  ount [$settingRe 1fd30 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d adCounts Count]. 1fd40 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 . set v 1fd50 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 alueCount 0.... 1fd60 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1fd70 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 foreach -alias p 1fd80 61 69 72 20 24 73 65 74 74 69 6e 67 52 65 61 64 air$settingRead
1fd90 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20  Counts {..
1fda0 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65        incr value
1fdb0 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c  Count [$pair Val 1fdc0 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ue].... 1fdd0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1fde0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1fdf0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1fe00 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65          "---- se
1fe10 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72  tting \"" [$pair 1fe20 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 Key] "\" was re 1fe30 61 64 20 22 20 5b 24 70 61 69 72 20 56 61 6c 75 ad " [$pair Valu
1fe40 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e] \..
1fe50 20 20 20 20 20 20 22 20 74 69 6d 65 73 22 20 5b        " times" [
1fe60 65 78 70 72 20 7b 24 76 69 61 46 69 6c 65 20 3f  expr {$viaFile ? 1fe70 20 22 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 " from the conf 1fe80 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 22 20 iguration file" 1fe90 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 : \.. 1fea0 20 20 20 20 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20 ""}] \n].. 1feb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1fec0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 1fed0 6c 69 73 74 20 24 6e 61 6d 65 43 6f 75 6e 74 20 list$nameCount
1fee0 24 76 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20 20  $valueCount].. 1fef0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1ff00 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s 1ff10 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 tring length$na
1ff20 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
1ff30 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1ff40 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1ff50 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1ff60 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1ff70 73 65 74 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d setting \""$nam
1ff80 65 20 22 5c 22 20 77 61 73 20 6e 6f 74 20 72 65  e "\" was not re
1ff90 61 64 22 20 5b 65 78 70 72 20 7b 24 76 69 61 46  ad" [expr {$viaF 1ffa0 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 ile ? \.. 1ffb0 20 20 20 20 20 22 20 66 72 6f 6d 20 74 68 65 20 " from the 1ffc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 configuration fi 1ffd0 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a le" : ""}] \n].. 1ffe0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1fff0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
20000 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
20010 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
20020 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6e           "---- n
20030 6f 20 73 65 74 74 69 6e 67 73 20 77 65 72 65 20  o settings were
20040 72 65 61 64 22 20 5b 65 78 70 72 20 7b 24 76 69  read" [expr {$vi 20050 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 aFile ? \.. 20060 20 20 20 20 20 20 20 22 20 66 72 6f 6d 20 74 68 " from th 20070 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 e configuration 20080 66 69 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d file" : ""}] \n] 20090 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 200a0 20 20 20 72 65 74 75 72 6e 20 2d 31 0d 0a 20 20 return -1.. 200b0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 200c0 20 67 65 74 4f 74 68 65 72 43 6f 75 6e 74 20 7b getOtherCount { 200d0 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 name } {.. 200e0 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 if {[haveConstr 200f0 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 aint buildConfig 20100 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 20 26 uration.Debug] & 20110 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 & [catch {.. 20120 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 20130 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 20140 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 lic -alias \.. 20150 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 20160 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 .Data.SQLite.Deb 20170 75 67 44 61 74 61 20 47 65 74 4f 74 68 65 72 43 ugData GetOtherC 20180 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 6f ounts.. } o 20190 74 68 65 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 therCounts] == 0 201a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 201b0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 201c0 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d ngth$name] > 0}
201d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
201e0 20 20 20 69 66 20 7b 5b 24 6f 74 68 65 72 43 6f     if {[$otherCo 201f0 75 6e 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 unts TryGetValue 20200 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74$name value]} t
20210 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20220 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 20230 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 20240 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 20250 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 "---- ot 20260 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 her counter \"" 20270 24 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 76 61$name "\" has va
20280 6c 75 65 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d  lue " $value \n] 20290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 202a0 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 return$value..
202b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
202c0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
202d0 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65          set name
202e0 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75  Count [$otherCou 202f0 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 nts Count].. 20300 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 set valueC 20310 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 ount 0.... 20320 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 object forea 20330 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 ch -alias pair$
20340 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20  otherCounts {..
20350 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20             incr
20360 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69  valueCount [$pai 20370 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 r Value].... 20380 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
20390 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
203a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
203c0 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72  -- other counter
203d0 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d   \"" [$pair Key] 203e0 20 22 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 "\" has value " 203f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20400 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
20410 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
20420 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
20430 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61  return [list $na 20440 6d 65 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f meCount$valueCo
20450 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  unt]..        }.
20460 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
20470 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
20480 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d  ngth $name] > 0} 20490 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 204a0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
204b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
204c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
204d0 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f    "---- other co
204e0 75 6e 74 65 72 20 5c 22 22 20 24 6e 61 6d 65 20  unter \"" $name 204f0 22 5c 22 20 68 61 73 20 6e 6f 20 76 61 6c 75 65 "\" has no value 20500 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c \n"].. } el 20510 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 20520 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
20530 6e 65 6c 20 22 2d 2d 2d 2d 20 74 68 65 72 65 20  nel "---- there
20540 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 63 6f 75  are no other cou
20550 6e 74 65 72 73 5c 6e 22 0d 0a 20 20 20 20 20 20  nters\n"..
20560 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
20570 6e 20 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n -1..    }.....
20580 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53      proc reportS
20590 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b  QLiteResources {
205a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68  ..            ch
205b0 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c  annel {quiet fal
205c0 73 65 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d  se} {reset true}
205d0 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20   {collect true}
205e0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
205f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 70      # NOTE: If p
20600 6f 73 73 69 62 6c 65 2c 20 61 6c 77 61 79 73 20  ossible, always
20610 72 65 73 65 74 20 74 68 65 20 63 61 63 68 65 64  reset the cached
20620 20 61 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74   assembly direct
20630 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ory..      #
20640 20 20 20 61 6e 64 20 74 68 65 20 63 61 63 68 65     and the cache
20650 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74  d XML configurat
20660 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a  ion file name...
20670 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
20680 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
20690 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
206a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
206b0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
206c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
206d0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
206e0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
206f0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
20700 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
20710 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d  NativeMethods \.
20720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52  .              R
20730 65 73 65 74 43 61 63 68 65 64 41 73 73 65 6d 62  esetCachedAssemb
20740 6c 79 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  lyDirectory..
20750 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d       } error] ==
20760 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
20770 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 20780 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 20790 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
207a0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65  annel "---- rese
207b0 74 20 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c  t cached assembl
207c0 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 0d 0a  y directory\n"..
207d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
207e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
207f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 20800 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 20810 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 20820 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
20830 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
20840 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
20850 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
20860 20 72 65 73 65 74 20 63 61 63 68 65 64 20 61 73   reset cached as
20870 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79  sembly directory
20880 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  , " \..
20890 20 20 20 20 20 20 20 22 65 72 72 6f 72 3a 20 22         "error: "
208a0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 208b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 208c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 208d0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 208e0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 208f0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 20900 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 20910 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 20920 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 20930 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 20940 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. 20950 20 20 20 20 20 52 65 73 65 74 43 61 63 68 65 64 ResetCached 20960 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d XmlConfigFileNam 20970 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 e.. } err 20980 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b or] == 0} then { 20990 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 209a0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
209b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
209c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 209d0 2d 20 72 65 73 65 74 20 63 61 63 68 65 64 20 58 - reset cached X 209e0 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ML configuration 209f0 20 66 69 6c 65 20 6e 61 6d 65 5c 6e 22 0d 0a 20 file name\n".. 20a00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 20a10 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 20a20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
20a30 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
20a40 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $20a50 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20a60 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 20a70 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 20a80 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 20a90 72 65 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c reset cached XML 20aa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 configuration " 20ab0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20ac0 20 20 20 20 22 66 69 6c 65 20 6e 61 6d 65 2c 20 "file name, 20ad0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
20ae0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
20af0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
20b00 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
20b10 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
20b20 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65  TE: If available
20b30 2c 20 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64  , report on (and
20b40 20 70 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29   possibly reset)
20b50 20 74 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20   the runtime..
20b60 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66      #       conf
20b70 69 67 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73  iguration statis
20b80 74 69 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  tics...      #..
20b90 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
20ba0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
20bb0 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  nd] && \..
20bc0 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61      [haveConstra
20bd0 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75  int buildConfigu
20be0 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74  ration.Debug]} t
20bf0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
20c00 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
20c10 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
20c20 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
20c30 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d  Public -alias \.
20c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
20c50 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
20c60 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 53  e.DebugData GetS
20c70 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73  ettingReadCounts
20c80 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
20c90 7d 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75  } settingReadCou
20ca0 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
20cb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
20cc0 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74   nameCount [$set 20cd0 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 tingReadCounts C 20ce0 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 ount].. 20cf0 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 set valueCount 20d00 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 0.... o 20d10 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 bject foreach -a 20d20 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69 lias pair$setti
20d30 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a  ngReadCounts {..
20d40 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72              incr
20d50 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61   valueCount [$pa 20d60 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 ir Value].... 20d70 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
20d80 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
20d90 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
20da0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 20db0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 20dc0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20dd0 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 - setting \"" [$
20de0 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61  pair Key] "\" wa
20df0 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 20  s read " \..
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24                [$20e10 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 74 69 pair Value] " ti 20e20 6d 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 mes\n"].. 20e30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 20e40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 20e50 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 if {$reset} the
20e60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
20e70 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
20e80 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
20e90 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
20ea0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c  s +NonPublic -al
20eb0 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
20ec0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
20ed0 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75  Data.SQLite.Debu
20ee0 67 44 61 74 61 20 43 6c 65 61 72 53 65 74 74 69  gData ClearSetti
20ef0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 66 61 6c  ngReadCounts fal
20f00 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..
20f10 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74  } error] == 0} t
20f20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20f30 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 20f40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20f50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 20f60 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
20f70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
20f80 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
20f90 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20  - reset setting
20fa0 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 74  statistics for t
20fb0 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d  he previous " \.
20fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20fd0 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20       $nameCount 20fe0 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
20ff0 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75  alueCount " valu
21000 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 20  es read\n"]..
21010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
21020 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
21030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21040 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 21050 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 21060 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
21070 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
21080 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
21090 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
210a0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
210b0 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 20  o reset setting
210c0 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 22  statistics for "
210d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
210e0 20 20 20 20 20 20 20 20 22 74 68 65 20 70 72 65          "the pre
210f0 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75  vious " $nameCou 21100 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 nt " names and " 21110 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a$valueCount \..
21120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21130 20 20 20 20 22 20 76 61 6c 75 65 73 20 72 65 61      " values rea
21140 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  d, error: " \n\t
21150 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 21160 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 21170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 21180 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 21190 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 211a0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 211b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 211c0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 211d0 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d Public -alias \. 211e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 211f0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 21200 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 53 e.DebugData GetS 21210 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 ettingReadCounts 21220 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d true.. } 21230 20 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 settingFileRead 21240 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 Counts] == 0} th 21250 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 21260 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 set nameCount [$
21270 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43  settingFileReadC
21280 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20  ounts Count]..
21290 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
212a0 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20  eCount 0....
212b0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
212c0 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72  each -alias pair
212d0 20 24 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61   $settingFileRea 212e0 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 dCounts {.. 212f0 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 incr valu 21300 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 eCount [$pair Va
21310 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue]....
21320 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 21330 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21340 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
21350 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
21360 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
21370 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74         "---- set
21380 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20  ting \"" [$pair 21390 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61 Key] "\" was rea 213a0 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 d " \.. 213b0 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 [$pair
213c0 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 20 66  Value] " times f
213d0 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72  rom the configur
213e0 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a  ation file\n"]..
213f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
21400 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
21410 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73          if {$res 21420 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 21430 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 21440 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 21450 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 21460 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 21470 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 lic -alias \.. 21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21490 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 214a0 74 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65 te.DebugData Cle 214b0 61 72 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 arSettingReadCou 214c0 6e 74 73 20 74 72 75 65 0d 0a 20 20 20 20 20 20 nts true.. 214d0 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d } error] = 214e0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 214f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 21500 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21520 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 21530 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21550 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 "---- reset se 21560 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 tting statistics 21570 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 for the previou 21580 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 s " \.. 21590 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65$name
215a0 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e  Count " names an
215b0 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20  d " $valueCount 215c0 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 22 20 " values read " 215d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 215e0 20 20 20 20 20 20 20 22 66 72 6f 6d 20 74 68 65 "from the 215f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 configuration f 21600 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ile\n"].. 21610 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 21620 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 21640 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
21650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
21660 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 21670 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 21680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 21690 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 216a0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 NG: failed to re 216b0 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 set setting stat 216c0 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a istics for " \.. 216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 216e0 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f 75 "the previou 216f0 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 s "$nameCount "
21700 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61   names and " $va 21710 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 lueCount \.. 21720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21730 22 20 76 61 6c 75 65 73 20 72 65 61 64 20 66 72 " values read fr 21740 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 om the configura 21750 74 69 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f 72 tion file, error 21760 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 : " \n\t \.. 21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21780 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
21790 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
217a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
217b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
217c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
217d0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
217e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
217f0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
21800 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a  ublic -alias \..
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
21820 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
21830 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 4f 74  .DebugData GetOt
21840 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20  herCounts..
21850 20 20 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73     } otherCounts
21860 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
21870 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61            set na
21880 6d 65 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43  meCount [$otherC 21890 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 ounts Count].. 218a0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 set valu 218b0 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 eCount 0.... 218c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 218d0 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 218e0 20 24 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d$otherCounts {.
218f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63  .            inc
21900 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70  r valueCount [$p 21910 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 air Value].... 21920 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
21930 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
21950 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 21960 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 21970 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 21980 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 -- other counter 21990 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d \"" [$pair Key]
219a0 20 22 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22   "\" has value "
219b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
219c0 20 20 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c        [$pair Val 219d0 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ue] \n].. 219e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 219f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 21a00 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 if {$reset} the
21a10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21a20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
21a40 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
21a50 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c  s +NonPublic -al
21a60 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
21a70 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
21a80 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75  Data.SQLite.Debu
21a90 67 44 61 74 61 20 43 6c 65 61 72 4f 74 68 65 72  gData ClearOther
21aa0 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  Counts..
21ab0 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20      } error] ==
21ac0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
21ad0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 21ae0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 21b00 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
21b10 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21b30 22 2d 2d 2d 2d 20 72 65 73 65 74 20 6f 74 68 65  "---- reset othe
21b40 72 20 63 6f 75 6e 74 65 72 73 20 66 6f 72 20 74  r counters for t
21b50 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d  he previous " \.
21b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21b70 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20       $nameCount 21b80 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
21b90 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75  alueCount " valu
21ba0 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
21bb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21bc0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
21be0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 21bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21c00 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
21c10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
21c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21c30 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
21c40 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73  G: failed to res
21c50 65 74 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72  et other counter
21c60 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20  s for " \..
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21c80 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 24  the previous " $21c90 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 nameCount " name 21ca0 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f s and "$valueCo
21cb0 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  unt \..
21cc0 20 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c             " val
21cd0 75 65 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  ues, error: " \n
21ce0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 21cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 21d00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 21d10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 21d20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 21d30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 21d40 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 21d50 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 mand] && \.. 21d60 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 [haveSQLit 21d70 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 eDefineConstant 21d80 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f INTEROP_VIRTUAL_ 21d90 54 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 TABLE] && \.. 21da0 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 [haveSQLi 21db0 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant 21dc0 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 TRACK_MEMORY_BY 21dd0 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 TES]} then {.. 21de0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
21df0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
21e00 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 21e10 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e nel "---- curren 21e20 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 t memory in use 21e30 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e by SQLiteMemory. 21e40 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d .. ".. }. 21e50 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 21e60 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 21e70 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 21e80 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 21e90 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 21ea0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 21eb0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d SQLite.SQLiteMem 21ec0 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 ory bytesAllocat 21ed0 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 ed.. } me 21ee0 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e mory] == 0} then 21ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 21f00 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
21f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
21f20 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 21f30 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
21f40 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
21f50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
21f60 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
21f70 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
21f80 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20  ry unknown....
21f90 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 21fa0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 21fb0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
21fc0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
21fd0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 21fe0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 21ff0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 22000 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
22010 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
22020 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 22030 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d "---- maximum m 22040 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 22050 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 SQLiteMemory... 22060 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ".. }.... 22070 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 22080 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 22090 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 220a0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 220b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 220c0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 220d0 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 ite.SQLiteMemory 220e0 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c maximumBytesAll 220f0 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 ocated.. 22100 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 22110 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 22120 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
22130 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
22140 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 22150 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
22160 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
22170 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
22180 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
22190 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
221a0 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
221b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
221c0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 221d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 221e0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
221f0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 22200 5c 6e 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 0d 0a 20 20 20 .. }.. 22220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 22230 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
22240 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
22250 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 22260 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 22270 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e n use by SQLite. 22280 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d .. ".. }... 22290 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 222a0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 222b0 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 and]} then {.. 222c0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 222d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 222e0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 222f0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 22300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 22310 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 22320 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 22330 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 thods sqlite3_me 22340 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 mory_used.. 22350 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 } memory] == 22360 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 22370 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
22380 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
22390 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 223a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 223b0 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
223c0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
223d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
223e0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
223f0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
22400 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51  TE: Maybe the SQ
22410 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
22420 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
22430 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ?..          #..
22440 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65            set me
22450 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a  mory unknown....
22460 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$22470 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 22480 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 22490 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
224a0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 224b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 224c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 224d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 224e0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 224f0 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 available.... 22500 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
22510 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
22520 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 22530 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
22540 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
22550 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
22560 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75  ..      set resu
22570 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f  lt $memory; # NO 22580 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 TE: Return memor 22590 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 y in-use to our 225a0 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 caller..... 225b0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
225c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
225d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 225e0 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 -- maximum memor 225f0 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi 22600 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d te... ".. } 22610 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 .... if {[h 22620 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 22630 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d ommand]} then {. 22640 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 22650 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 22660 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 22670 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 22680 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22690 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 226a0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 226b0 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 eMethods \.. 226c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite 226d0 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 3_memory_highwat 226e0 65 72 20 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 er 0.. } 226f0 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 22700 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22710 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
22720 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
22730 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 22740 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
22750 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
22760 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
22770 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
22780 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
22790 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
227a0 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20  aybe the SQLite
227b0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
227c0 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20  unavailable?..
227d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
227e0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
227f0 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20  unknown....
22800 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 22810 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22820 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
22830 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22840 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 22850 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 22860 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 22870 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 se {.. se 22880 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c t memory unavail 22890 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 able.... 228a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
228b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
228c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 228d0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
228e0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y \n]..        }
228f0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
22900 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d     if {$collect} 22910 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22920 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 collectGarbage 22930 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20$channel..
22940 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  }....      if {!
22950 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 22960 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
22970 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
22980 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
22990 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e  se by the CLR...
229a0 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   "..      }....
229b0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
229c0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
229d0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
229e0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
229f0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
22a00 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
22a10 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
22a20 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  e..        } mem
22a30 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
22a40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
22a50 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65  {[string is inte
22a60 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d  ger -strict $mem 22a70 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. 22a80 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
22a90 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
22ab0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 22ac0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
22ad0 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
22ae0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
22af0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
22b00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
22b10 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a  memory invalid..
22b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
22b30 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 22b40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22b50 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
22b60 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 22b70 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 22b80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 22b90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 22ba0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 22bb0 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e set memory unkn 22bc0 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 own.... 22bd0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
22be0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
22bf0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 22c00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
22c10 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mory \n]..
22c20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
22c30 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
22c40 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65  ..        set me
22c50 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65  mory unavailable
22c60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
22c70 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 22c80 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 22c90 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
22ca0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 22cb0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 22cc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 22cd0 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
22ce0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
22cf0 63 20 72 65 73 65 74 53 51 4c 69 74 65 44 69 72  c resetSQLiteDir
22d00 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e  ectories { chann
22d10 65 6c 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20  el native } {..
22d20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
22d30 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
22d40 20 75 73 65 20 74 68 65 20 6e 61 74 69 76 65 20   use the native
22d50 41 50 49 20 28 76 69 61 20 74 68 65 20 6d 61 6e  API (via the man
22d60 61 67 65 64 20 61 73 73 65 6d 62 6c 79 29 3f 0d  aged assembly)?.
22d70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
22d80 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65  if {$native} the 22d90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 22da0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 22db0 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 Now make sure th 22dc0 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t 22dd0 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo 22de0 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 ries are.. 22df0 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20 # reset 22e00 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 their default va 22e10 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 lues, which shou 22e20 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 ld be null for b 22e30 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 oth... # 22e40 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 Since the 22e50 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 22e60 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 22e70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c tion is availabl 22e80 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 e,.. # 22e90 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 use it... 22ea0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22eb0 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 for {set index 1 22ec0 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b } {$index < 3} {
22ed0 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20  incr index} {..
22ee0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
22ef0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
22f00 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
22f10 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
22f20 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
22f30 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
22f40 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
22f50 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22f70 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
22f80 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64  t_directory $ind 22f90 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 ex null.. 22fa0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 } result] == 22fb0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 22fc0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
22fd0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
22fe0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
22ff0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
23000 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
23010 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69  t_directory(" $i 23020 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 ndex \.. 23030 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 ", null) 23040 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c ... ok: "$resul
23050 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
23060 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
23070 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 23080 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 23090 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 230a0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 230b0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 230c0 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 t_directory("$i
230d0 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20  ndex \..
230e0 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29          ", null)
230f0 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  ... error: " \n\
23100 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 23110 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 23120 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 23130 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 23140 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 23150 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 : Now make sure 23160 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 the database and 23170 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 temporary direc 23180 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 tories are.. 23190 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 # rese 231a0 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 t their default 231b0 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 values, which sh 231c0 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 ould be null for 231d0 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 both... 231e0 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 # Since th 231f0 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f e sqlite3_win32_ 23200 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 set_directory fu 23210 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d nction does not. 23220 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 23230 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 61 76 appear to be av 23240 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65 ailable, use the 23250 20 61 73 73 6f 63 69 61 74 65 64 20 50 52 41 47 associated PRAG 23260 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 MA commands.. 23270 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 # ins 23280 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 tead... # 23290 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 232a0 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 h directory [lis 232b0 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 t data_store_dir 232c0 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 ectory temp_stor 232d0 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a e_directory] {.. 232e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 set sq 232f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 l [appendArgs "P 23300 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f RAGMA "$directo
23310 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a  ry " = \"\";"]..
23320 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
23330 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53  [catch {executeS
23340 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d  ql $sql} result] 23350 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 23360 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 23370 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
23380 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
23390 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65           "---- e
233a0 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20  xecute PRAGMA "
233b0 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20  $directory "... 233c0 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ok: \"" \.. 233d0 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75$resu
233e0 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  lt \"\n]..
233f0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
23400 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
23410 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 23420 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 23430 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 "---- ex 23440 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 ecute PRAGMA "$
23450 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65  directory "... e
23460 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
23470 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
23480 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 23490 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 234a0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 234b0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 234c0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 234d0 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 irectories { cha 234e0 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 nnel {reset fals 234f0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 23500 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 23510 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 heck if the sqli 23520 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 23530 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function 23540 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a is available... 23550 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 #.. t 23560 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d puts$channel \.
23570 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d  .          "----
23580 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75   checking for fu
23590 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77  nction sqlite3_w
235a0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
235b0 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ry... "....
235c0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
235d0 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74  : This call to t
235e0 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
235f0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
23600 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65  unction uses the
23610 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
23620 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20  invalid value 0
23630 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72  for the first ar
23640 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  gument.  This co
23650 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a  de is designed..
23660 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
23670 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e   check if callin
23680 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77  g the function w
23690 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63  ill raise an exc
236a0 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20  eption (i.e...
236b0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
236c0 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66  actual result of
236d0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f   the function do
236e0 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73  es not matter as
236f0 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20   long as no..
23700 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
23710 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29  tory is changed)
23720 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
23730 20 20 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73    if {[isWindows
23740 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20  ] && [catch {..
23750 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
23760 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
23770 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
23780 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
23790 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
237a0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
237b0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
237c0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
237d0 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a  rectory 0 null..
237e0 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74        }] == 0} t
237f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
23800 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
23810 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71  : Calling the sq
23820 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
23830 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
23840 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20  on does not..
23850 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 75       #       cau
23860 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b  se an exception;
23870 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d   therefore, it m
23880 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ust be available
23890 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20   (i.e...
238a0 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f  #       even tho
238b0 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65  ugh it should re
238c0 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72  turn a failure r
238d0 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68  eturn code in th
238e0 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
238f0 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20      case)...
23900 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61      #..        a
23910 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c  ddConstraint sql
23920 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
23930 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20  irectory....
23940 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 23950 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 el yes\n.... 23960 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 23970 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 NOTE: Does our 23980 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 caller want to r 23990 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f eset the directo 239a0 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 ries?.. # 239b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
239c0 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  eset} then {..
239d0 20 20 20 20 20 20 20 20 72 65 73 65 74 53 51 4c          resetSQL
239e0 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24  iteDirectories $239f0 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 channel true.. 23a00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 23a10 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 23a20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
23a30 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  no\n....
23a40 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
23a50 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c  E: Does our call
23a60 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74  er want to reset
23a70 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73   the directories
23a80 3f 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79  ?  This can only
23a90 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23aa0 20 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69    be performed i
23ab0 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64  f SQLite is load
23ac0 65 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72  ed and ready for
23ad0 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
23ae0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23af0 20 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20    suite...
23b00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
23b10 7b 24 72 65 73 65 74 20 26 26 20 5b 69 73 53 51  {$reset && [isSQ 23b20 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e LiteReady]} then 23b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 23b40 73 65 74 53 51 4c 69 74 65 44 69 72 65 63 74 6f setSQLiteDirecto 23b50 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 66 61 ries$channel fa
23b60 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lse..        }..
23b70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
23b80 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
23b90 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20  : Finally, show
23ba0 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
23bb0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
23bc0 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d  e and temporary.
23bd0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
23be0 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69  irectories.  Thi
23bf0 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65  s can only be pe
23c00 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74  rformed if SQLit
23c10 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  e is loaded..
23c20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
23c30 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
23c40 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
23c50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
23c60 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61  if {[isSQLiteRea
23c70 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  dy]} then {..
23c80 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72       foreach dir
23c90 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74  ectory [list dat
23ca0 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
23cb0 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  y temp_store_dir
23cc0 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20  ectory] {..
23cd0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 23ce0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 23cf0 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 "---- checking " 23d00 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
23d10 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   "]....
23d20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64   set sql [append
23d30 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24  Args "PRAGMA " $23d40 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d directory \;]... 23d50 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 23d60 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 catch {executeSq 23d70 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 l$sql scalar} r
23d80 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
23d90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
23da0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 23db0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a [appendArgs "ok: 23dc0 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c \""$result \"\
23dd0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
23de0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
23df0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 23e00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 23e10 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
23e20 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
23e30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
23e40 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
23e50 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c  }.....    proc l
23e60 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
23e70 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20  tings { channel
23e80 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69  {suffix ""} {qui
23e90 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
23ea0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
23eb0 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69  NOTE: Skip loadi
23ec0 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20  ng the settings
23ed0 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68  if their usage h
23ee0 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
23ef0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
23f00 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
23f10 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54  sts ::no(sqliteT
23f20 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74  estSettings)]} t
23f30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
23f40 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
23f50 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65  : Load custom pe
23f60 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
23f70 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74  r-host test sett
23f80 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
23f90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
23fa0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
23fb0 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73  :tcl_platform(us
23fc0 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  er)]} then {..
23fd0 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72          set user
23fe0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
23ff0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
24000 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d  CommonDirectory]
24010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24020 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65    [appendArgs se
24030 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e  ttings $suffix . 24040 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
24050 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d  (user) .eagle]].
24060 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
24070 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75  {[file exists $u 24080 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 24090 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 240a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
240b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
240d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 240e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 24100 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 -- loading per-u 24110 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 ser test setting 24120 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24140 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
24150 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  eName \"...\n]..
24160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24170 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
24180 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
24190 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c           uplevel
241a0 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source
241b0 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil 241c0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 241d0 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 } error]} th 241e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 241f0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
24200 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
24210 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $24220 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 24230 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 24240 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 24250 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 24260 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 to load per-use 24270 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 r settings file 24280 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 24290 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72$user
242a0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
242b0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
242c0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 242e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 242f0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 24300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24310 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
24320 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
24330 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 24340 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 24350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 24360 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped 24370 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 loading per-use 24380 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 r test settings 24390 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75$u
243b0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
243c0 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73  ame "\", it does
243d0 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
243e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
243f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
24400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
24410 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
24420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24450 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
24460 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
24470 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
24480 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e  orm(host)]} then
24490 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
244a0 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69  t hostSettingsFi
244b0 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  leName [file joi
244c0 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65  n [getCommonDire
244d0 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20  ctory] \..
244e0 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41          [appendA
244f0 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75  rgs settings $su 24500 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c ffix .$::tcl_pl
24510 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61  atform(host) .ea
24520 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  gle]]....
24530 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
24540 73 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67  sts $hostSetting 24550 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e sFileName]} then 24560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 24570 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
24580 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
24590 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 245a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 245b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 245c0 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 "---- loading 245d0 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 per-host test s 245e0 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 245f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24600 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69$hostSetti
24610 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e  ngsFileName \"..
24620 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  .\n]..
24630 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
24640 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
24650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
24660 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73  plevel 1 [list s
24670 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 69  ource $hostSetti 24680 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 ngsFileName].. 24690 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f } erro 246a0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 246b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
246c0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
246e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 246f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24710 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 24720 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 failed to load p 24730 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 er-host settings 24740 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24760 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69$hostSettingsFi
24770 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f  leName "\", erro
24780 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 24790 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 247a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 247b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 247c0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 247d0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
247e0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
247f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $24800 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 24810 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 24820 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 24830 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 kipped loading p 24840 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 24850 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 24860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24870 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67$hostSetting
24880 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69  sFileName "\", i
24890 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
248a0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
248b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
248c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
248d0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
248e0 20 20 20 20 70 72 6f 63 20 63 6f 70 79 53 61 6d      proc copySam
248f0 70 6c 65 44 61 74 61 62 61 73 65 46 69 6c 65 73  pleDatabaseFiles
24900 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c   {} {..      upl
24910 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20  evel 1 {..
24920 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
24930 4f 54 45 3a 20 43 6f 70 79 20 28 6f 72 20 72 65  OTE: Copy (or re
24940 2d 63 6f 70 79 29 20 74 68 65 20 72 65 66 65 72  -copy) the refer
24950 65 6e 63 65 20 64 61 74 61 62 61 73 65 20 66 69  ence database fi
24960 6c 65 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  le used for this
24970 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
24980 20 20 75 6e 69 74 20 74 65 73 74 20 74 6f 20 74    unit test to t
24990 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  he build directo
249a0 72 79 20 69 6e 20 63 61 73 65 20 69 74 20 68 61  ry in case it ha
249b0 73 20 62 65 65 6e 20 63 68 61 6e 67 65 64 0d 0a  s been changed..
249c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
249d0 62 79 20 61 20 70 72 65 76 69 6f 75 73 20 74 65  by a previous te
249e0 73 74 20 72 75 6e 2e 0d 0a 20 20 20 20 20 20 20  st run...
249f0 20 23 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65   #..        file
24a00 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 6e 6f   copy -force $no 24a10 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 rthwindEfDbFile 24a20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 \.. [fi 24a30 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c le join [getBuil 24a40 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c 73 65 dDirectory false 24a50 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f ] [file tail$no
24a60 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 5d  rthwindEfDbFile]
24a70 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
24a80 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
24a90 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c  unSQLiteTestProl
24aa0 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ogue {} {..
24ab0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
24ac0 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f  : Skip running o
24ad0 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67  ur custom prolog
24ae0 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f  ue if the main o
24af0 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ne has been..
24b00 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70     #       skipp
24b10 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
24b20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
24b30 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f  xists ::no(prolo
24b40 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65  gue.eagle)]} the
24b50 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
24b60 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
24b70 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 65  Load the "before
24b80 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75  -constraints" cu
24b90 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e  stom per-user an
24ba0 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20  d/or per-host..
24bb0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
24bc0 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77  est settings now
24bd0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
24be0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
24bf0 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65  [list loadSQLite
24c00 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a  TestSettings $:: 24c10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 test_channel .be 24c20 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 fore].... 24c30 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 24c40 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 24c50 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e [object] comman 24c60 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 3b 20 d is available; 24c70 69 66 20 6e 6f 74 2c 20 61 64 64 20 73 6f 6d 65 if not, add some 24c80 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 24c90 20 20 73 68 69 6d 73 20 74 6f 20 6d 61 6b 65 20 shims to make 24ca0 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 72 the test suite r 24cb0 75 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a 20 20 un smoother... 24cc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 24cd0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f checkForSQLiteO 24ce0 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 24 3a 3a bjectCommand$::
24cf0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
24d00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24d10 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72     # NOTE: Deter
24d20 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 20 6f  mine the names o
24d30 66 20 74 68 65 20 6e 61 74 69 76 65 20 70 6c 61  f the native pla
24d40 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74  tform and archit
24d50 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ecture...
24d60 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
24d70 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69  platform [getBui
24d80 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 5d  ldPlatform true]
24d90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 72  ..        set ar
24da0 63 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 68  chitecture [arch
24db0 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 66  itectureForPlatf
24dc0 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  orm $platform].. 24dd0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 24de0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 24df0 77 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 61 w the platform a 24e00 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65 20 nd architecture 24e10 75 73 65 64 20 74 6f 20 68 65 6c 70 20 6c 6f 63 used to help loc 24e20 61 74 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ate the.. 24e30 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 # native 24e40 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a 20 20 build files... 24e50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 24e60 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
24e70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
24e80 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
24e90 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f 72 6d    "---- platform
24ea0 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61   for locating na
24eb0 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73  tive build files
24ec0 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20   is \"" \..
24ed0 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 24ee0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 \"\n].... 24ef0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
24f00 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
24f10 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
24f20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69 74 65     "---- archite
24f30 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 61 74 69  cture for locati
24f40 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20  ng native build
24f50 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a  files is \"" \..
24f60 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63              $arc 24f70 68 69 74 65 63 74 75 72 65 20 5c 22 5c 6e 5d 0d hitecture \"\n]. 24f80 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 24f90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 24fa0 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 63 6f ild a list of co 24fb0 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 nfiguration file 24fc0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 24fd0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 24fe0 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 set config 24ff0 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 FileNames [list 25000 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 25010 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 25020 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d 0a 0d e.dll.config]... 25030 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 25040 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 25050 64 20 61 20 6c 69 73 74 20 6f 66 20 61 75 78 69 d a list of auxi 25060 6c 69 61 72 79 20 4d 61 6e 61 67 65 64 20 44 65 liary Managed De 25070 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e bugging Assistan 25080 74 73 20 28 4d 44 41 29 0d 0a 20 20 20 20 20 20 ts (MDA).. 25090 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 # config 250a0 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 uration files th 250b0 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 at we handle... 250c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 250d0 20 20 73 65 74 20 6d 64 61 43 6f 6e 66 69 67 46 set mdaConfigF 250e0 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c ileNames [list \ 250f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 61 .. Ea 25100 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78 65 2e 6d gleShell32.exe.m 25110 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74 61 6c da.config Instal 25120 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 ler.exe.mda.conf 25130 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ig \.. 25140 20 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 test.exe.mda.c 25150 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e 71 2e 65 onfig testlinq.e 25160 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d xe.mda.config \. 25170 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 . tes 25180 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e tef6.exe.mda.con 25190 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 fig].... 251a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 251b0 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 E: Build the lis 251c0 74 20 6f 66 20 65 78 74 65 72 6e 61 6c 20 66 69 t of external fi 251d0 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 les that we hand 251e0 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a 20 20 le. Some of.. 251f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 25200 65 73 65 20 66 69 6c 65 73 20 6d 61 79 20 62 65 ese files may be 25210 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 20 6d native and/or m 25220 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 25230 73 20 74 68 61 74 20 61 72 65 0d 0a 20 20 20 20 s that are.. 25240 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 # requ 25250 69 72 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 ired to perform 25260 76 61 72 69 6f 75 73 20 74 65 73 74 73 2e 0d 0a various tests... 25270 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 25280 20 20 20 73 65 74 20 65 78 74 65 72 6e 61 6c 46 set externalF 25290 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c ileNames [list \ 252a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 252b0 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74 79 46 ile join EntityF 252c0 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b 73 74 ramework lib [st 252d0 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 46 ring map [list F 252e0 78 20 22 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 x ""] \.. 252f0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6d 61 70 [string map 25300 20 5b 6c 69 73 74 20 6e 65 74 46 78 34 35 31 20 [list netFx451 25310 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 35 32 netFx45 netFx452 25320 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 netFx45 netFx46 25330 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25340 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 31 netFx45 netFx461 25350 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 netFx45 netFx46 25360 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 2 netFx45 netFx4 25370 37 20 6e 65 74 46 78 34 35 20 5c 0d 0a 20 20 20 7 netFx45 \.. 25380 20 20 20 20 20 20 20 20 20 6e 65 74 46 78 34 37 netFx47 25390 31 20 6e 65 74 46 78 34 35 20 6e 65 74 53 74 61 1 netFx45 netSta 253a0 6e 64 61 72 64 32 30 20 6e 65 74 46 78 34 35 5d ndard20 netFx45] 253b0 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d [getBuildNetFx] 253c0 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ]] \.. 253d0 20 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 EntityFramewor 253e0 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 k.dll]].... 253f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 25400 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 25410 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 61 list of native a 25420 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 ssembly files th 25430 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 at we handle... 25440 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 25450 20 20 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65 set nativeFile 25460 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a Names [list].... 25470 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 eval lap 25480 70 65 6e 64 20 6e 61 74 69 76 65 46 69 6c 65 4e pend nativeFileN 25490 61 6d 65 73 20 5b 67 65 74 4e 61 74 69 76 65 4c ames [getNativeL 254a0 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f ibraryFileNamesO 254b0 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 20 20 65 76 nly].. ev 254c0 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 al lappend nativ 254d0 65 46 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 49 eFileNames [getI 254e0 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 nteropAssemblyFi 254f0 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a leNamesOnly].... 25500 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 25510 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 25520 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 the list of mix 25530 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 25540 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 files that we h 25550 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... 25560 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d #.. set m 25570 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c ixedFileNames [l 25580 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ist].... 25590 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f if {[hasRuntimeO 255a0 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 ption native]} t 255b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 255c0 20 6c 61 70 70 65 6e 64 20 6d 69 78 65 64 46 69 lappend mixedFi 255d0 6c 65 4e 61 6d 65 73 20 53 79 73 74 65 6d 2e 44 leNames System.D 255e0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a ata.SQLite.dll.. 255f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 25600 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 25610 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 25620 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 e list of manage 25630 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 d assembly files 25640 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e that we handle. 25650 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 25660 20 20 20 20 20 73 65 74 20 6d 61 6e 61 67 65 64 set managed 25670 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 FileNames [list 25680 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 25690 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 256a0 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53 79 73 74 65 e.Linq.dll Syste 256b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 m.Data.SQLite.EF 256c0 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 6.dll].... 256d0 20 20 69 66 20 7b 21 5b 68 61 73 52 75 6e 74 69 if {![hasRunti 256e0 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d meOption native] 256f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 25700 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 61 lappend mana 25710 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 gedFileNames Sys 25720 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 25730 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a dll.. }.. 25740 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 25750 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 25760 77 20 74 68 65 20 76 61 72 69 6f 75 73 20 6c 69 w the various li 25770 73 74 73 20 6f 66 20 66 69 6c 65 20 6e 61 6d 65 sts of file name 25780 73 20 74 68 61 74 20 61 72 65 20 68 61 6e 64 6c s that are handl 25790 65 64 20 62 79 20 74 68 69 73 0d 0a 20 20 20 20 ed by this.. 257a0 20 20 20 20 23 20 20 20 20 20 20 20 70 72 6f 63 # proc 257b0 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 edure... 257c0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 257d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
257e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
257f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
25800 2d 20 6c 69 73 74 20 6f 66 20 5c 22 63 6f 6e 66  - list of \"conf
25810 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65  iguration\" file
25820 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a   names is: " \..
25830 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 6e              $con 25840 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d figFileNames \n] 25850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 25860 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
25870 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
25880 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
25890 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 4d 44 41  -- list of \"MDA
258a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22   configuration\"
258b0 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20   file names is:
258c0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
258d0 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e   $mdaConfigFileN 258e0 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 ames \n].... 258f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
25900 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
25910 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
25920 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20       "---- list
25930 6f 66 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20  of \"external\"
25940 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22  file names is: "
25950 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61   $externalFileNa 25960 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 mes \n].... 25970 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
25980 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
25990 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
259a0 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f      "---- list o
259b0 66 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c  f \"native\" fil
259c0 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 24 6e  e names is: " $n 259d0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5c ativeFileNames \ 259e0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 n].... tp 259f0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
25a00 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
25a10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
25a20 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d  ---- list of \"m
25a30 69 78 65 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65  ixed\" file name
25a40 73 20 69 73 3a 20 22 20 24 6d 69 78 65 64 46 69  s is: " $mixedFi 25a50 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 leNames \n].... 25a60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
25a70 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
25a80 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
25a90 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69          "---- li
25aa0 73 74 20 6f 66 20 5c 22 6d 61 6e 61 67 65 64 5c  st of \"managed\
25ab0 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a  " file names is:
25ac0 20 22 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e   " $managedFileN 25ad0 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 ames \n].... 25ae0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 25af0 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e NOTE: Remove an 25b00 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e y test constrain 25b10 74 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f ts that refer to 25b20 20 74 68 65 20 6e 61 74 69 76 65 20 61 6e 64 2f the native and/ 25b30 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 or.. # 25b40 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 managed asse 25b50 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 mbly files that 25b60 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 we handle unless 25b70 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d forbidden from. 25b80 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 25b90 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 doing so... 25ba0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 25bb0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 25bc0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f ::no(sqliteRemo 25bd0 76 65 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d veConstraints)]} 25be0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 25bf0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 25c00 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e ame$configFileN
25c10 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
25c20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
25c30 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
25c40 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 25c50 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 25c60 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 25c70 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 ach fileName$md
25c80 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  aConfigFileNames
25c90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
25ca0 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  removeConstraint
25cb0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
25cc0 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  e_ $fileName].. 25cd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 25ce0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 25cf0 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e fileName$extern
25d00 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  alFileNames {..
25d10 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
25d20 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
25d30 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5b 66  endArgs file_ [f
25d40 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 25d50 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 me]].. 25d60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 }.... f 25d70 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 25d80 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
25d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
25da0 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  removeConstraint
25db0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
25dc0 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  e_ $fileName].. 25dd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 25de0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 25df0 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 fileName$mixedF
25e00 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
25e10 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
25e20 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
25e30 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 25e40 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 25e50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 25e60 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 25e70 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d$managedFileNam
25e80 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
25e90 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69    removeConstrai
25ea0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
25eb0 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ile_ $fileName]. 25ec0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 25ed0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 25ee0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 25ef0 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 NOTE: Skip all S 25f00 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 25f10 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 e related file h 25f20 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e andling (deletin 25f30 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 g,.. # 25f40 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 copying, and 25f50 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 6e 73 loading) if ins 25f60 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 25f70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 25f80 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 25f90 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29 :no(sqliteFiles) 25fa0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 25fb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 25fc0 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 25fd0 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 rying to delete 25fe0 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 any files if ins 25ff0 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 26000 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 26010 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 26020 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 ts ::no(deleteSq 26030 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the 26040 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 26050 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 26060 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 ts ::no(deleteSq 26070 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 liteConfigFiles) 26080 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 26090 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 260a0 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 fileName$confi
260b0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
260d0 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c  yDeleteBinaryFil
260e0 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  e $fileName.. 260f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 26100 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 26110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 26120 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 26130 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 o(deleteSqliteEx 26140 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 ternalFiles)]} t 26150 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 26160 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 26170 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 eName$mdaConfig
26180 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
261a0 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20  DeleteBuildFile
261b0 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d  $fileName false. 261c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 261d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 261e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 261f0 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 me$externalFile
26200 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
26210 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
26220 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69  teBinaryFile $fi 26230 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 26240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 26250 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 26260 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 26270 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 26280 65 74 65 53 71 6c 69 74 65 4e 61 74 69 76 65 46 eteSqliteNativeF 26290 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 262b0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 262c0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 262d0 65 49 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 46 eImplicitNativeF 262e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26300 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 26310 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
26320 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
26330 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
26340 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 26350 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 26360 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 26370 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 26380 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 26390 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 263a0 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d eleteSqliteNonIm 263b0 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 263c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 263d0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 263e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 263f0 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f leteSqlitePlatfo 26400 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a rmFiles)] && \.. 26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26420 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 26430 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
26440 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
26460 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 26470 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 26480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26490 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 tryDeleteA 264a0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
264b0 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  e $platform.. 264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 264d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 264e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 264f0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 26500 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 26510 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 74 leteSqliteArchit 26520 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 ectureFiles)] && 26530 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 26540 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 26550 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 length$architec
26560 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ture] > 0} then
26570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
26580 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
26590 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 265a0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 265c0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 yDeleteAssembly 265d0 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69$fileName $archi 265e0 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 tecture.. 265f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 26610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 26620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 26630 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 26640 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 26650 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 26660 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 teMixedFiles)]} 26670 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 26680 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 26690 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 266a0 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 f the "native" r 266b0 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 untime option is 266c0 20 73 65 74 2c 20 64 65 6c 65 74 65 20 69 6d 70 set, delete imp 266d0 6c 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 licit.. 266e0 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 # mix 266f0 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 26700 20 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 files as well. 26710 20 54 68 69 73 20 72 75 6e 74 69 6d 65 20 6f 70 This runtime op 26720 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 tion.. 26730 20 20 20 20 23 20 20 20 20 20 20 20 63 68 65 63 # chec 26740 6b 20 69 73 20 68 61 6e 64 6c 65 64 20 77 68 65 k is handled whe 26750 6e 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 6c n building the l 26760 69 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 ist of mixed-mod 26770 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 26780 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c # assembl 26790 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 y file names... 267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 267c0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 267d0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 267e0 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 46 69 eImplicitMixedFi 267f0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 26810 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 26820 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20$mixedFileNames
26830 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
26840 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
26850 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 26860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26870 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 26880 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 26890 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 268a0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 268b0 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c eteSqliteNonImpl 268c0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 icitFiles)]} the 268d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 268e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 268f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 26900 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d teSqlitePlatform 26910 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 26920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26930 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 26940 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
26950 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
26960 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
26970 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78  ch fileName $mix 26980 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 269a0 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 tryDeleteAsse 269b0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 mbly$fileName $269c0 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. 269d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 269e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 269f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 26a00 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 26a10 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 xists ::no(delet 26a20 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 eSqliteArchitect 26a30 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ureFiles)] && \. 26a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 26a50 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 26a60 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 gth$architectur
26a70 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26a90 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
26aa0 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  me $mixedFileNam 26ab0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 26ac0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 26ad0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
26ae0 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63 74  eName $architect 26af0 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 26b00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 26b10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 26b20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 26b30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 26b40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 26b50 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 26b60 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 o(deleteSqliteMa 26b70 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 nagedFiles)]} th 26b80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 26b90 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 26ba0 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c Name$managedFil
26bb0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
26bc0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
26bd0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  eteAssembly $fil 26be0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 26bf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 26c00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 26c10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 26c20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 26c30 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 OTE: Check for t 26c40 68 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 he "autoSelect" 26c50 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 runtime option. 26c60 20 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 If present,.. 26c70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26c80 61 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d attempt to autom 26c90 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 atically select 26ca0 74 68 65 20 66 69 72 73 74 20 61 76 61 69 6c 61 the first availa 26cb0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ble.. # 26cc0 20 20 20 20 20 20 20 62 75 69 6c 64 20 28 6f 72 build (or 26cd0 20 22 72 65 6c 65 61 73 65 22 29 20 6f 66 20 53 "release") of S 26ce0 51 4c 69 74 65 20 61 6e 64 20 53 79 73 74 65 6d QLite and System 26cf0 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 .Data.SQLite.. 26d00 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26d10 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 for use with the 26d20 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 26d30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 26d40 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 26d50 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 timeOption autoS 26d60 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a elect]} then {.. 26d70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 26d80 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 ![checkForSQLite 26d90 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 Builds$::test_c
26da0 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68  hannel true]} th
26db0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
26dc0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
26dd0 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65  teReleases $::te 26de0 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d st_channel true. 26df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 26e00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 26e10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 26e20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 26e30 69 70 20 74 72 79 69 6e 67 20 74 6f 20 76 65 72 ip trying to ver 26e40 69 66 79 20 74 68 65 20 62 75 69 6c 64 20 64 69 ify the build di 26e50 72 65 63 74 6f 72 79 20 69 66 20 69 6e 73 74 72 rectory if instr 26e60 75 63 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 ucted;.. 26e70 20 20 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 # otherw 26e80 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 ise, make sure i 26e90 74 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 t actually exist 26ea0 73 20 6f 72 20 68 61 6c 74 20 74 68 65 20 65 6e s or halt the en 26eb0 74 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 tire.. 26ec0 23 20 20 20 20 20 20 20 74 65 73 74 69 6e 67 20 # testing 26ed0 70 72 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f process if it do 26ee0 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 es not exist... 26ef0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 26f00 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 26f10 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 exists ::no(ver 26f20 69 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 ifyBuildDirector 26f30 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 y)]} then {.. 26f40 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 26f50 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 26f60 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 At this point, t 26f70 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 26f80 72 79 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 ry MUST exist as 26f90 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 a.. 26fa0 23 20 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 # valid di 26fb0 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 rectory for the 26fc0 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 testing process 26fd0 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 to continue... 26fe0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 26ff0 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 set dir 27000 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 ectory [getBuild 27010 44 69 72 65 63 74 6f 72 79 20 66 61 6c 73 65 5d Directory false] 27020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 27030 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist 27040 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c s$directory] ||
27050 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
27060 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72      ![file isdir
27070 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72  ectory $director 27080 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 27090 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 270a0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 270b0 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f E: Just prior to 270c0 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e actually haltin 270d0 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 g the testing pr 270e0 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 ocess,.. 270f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 # ad 27100 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 d an error to th 27110 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e e test log file. 27120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27130 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 27140 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
27150 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
27160 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
27170 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
27180 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62  uld not verify b
27190 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c  uild directory \
271a0 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d  "" $directory \. 271b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 271c0 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 "\", all test 271d0 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a ing halted\n"].. 271e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 271f0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 27200 20 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 # NOTE: Raising 27210 20 61 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 a script error 27220 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 from this point 27230 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 should halt.. 27240 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 27250 20 20 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 the testing p 27260 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 rocess... 27270 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 27280 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 error [a 27290 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 272b0 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 could not verify 272c0 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 272d0 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 \""$directory
272e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
272f0 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65       "\", all te
27300 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a  sting halted"]..
27310 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
27320 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
27330 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
27340 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
27350 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79  p trying to copy
27360 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e   any files if in
27370 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
27380 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27390 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
273a0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
273b0 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
273c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
273d0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
273e0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
273f0 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20  eConfigFiles)]}
27400 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
27410 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 27420 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 27430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27440 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c "---- copying \ 27450 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 "configuration\" 27460 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a files...\n".... 27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 27480 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
27490 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  configFileNames
274a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
274b0 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46     tryCopyBuildF
274c0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61  ile $fileName fa 274d0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse.. 274e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 274f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 27500 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 27510 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 27520 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 liteExternalFile 27530 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 27540 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 27550 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 27560 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d 61 6e TE: Copy the Man 27570 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41 aged Debugging A 27580 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 20 ssistants (MDA) 27590 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 configuration.. 275a0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 275b0 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20 74 68 file for th 275c0 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f e Eagle shell to 275d0 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75 the build outpu 275e0 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 t directory,.. 275f0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 27600 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e 67 20 while using 27610 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 each of the name 27620 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75 73 s of the various 27630 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a 20 20 legacy test.. 27640 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 27650 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 73 2e executables. 27660 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 6c 70 This will help 27670 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 to make sure th 27680 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 at all the.. 27690 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 276a0 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 20 72 legacy tests r 276b0 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c 79 20 un with exactly 276c0 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66 20 the same set of 276d0 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 Managed.. 276e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 44 # D 276f0 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 ebugging Assista 27700 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d nts configured.. 27710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 27720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27730 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
27740 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
27750 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
27760 20 63 6f 70 79 69 6e 67 20 5c 22 4d 44 41 20 63   copying \"MDA c
27770 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66  onfiguration\" f
27780 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
27790 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
277a0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64  ach fileName $md 277b0 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 aConfigFileNames 277c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 277d0 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 tryCopyBinar 277e0 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c yFile EagleShell 277f0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 .exe.mda.config 27800 74 72 75 65 20 22 22 20 24 66 69 6c 65 4e 61 6d true ""$fileNam
27810 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
27820 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
27830 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
27840 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70       # NOTE: Cop
27850 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62  y the external b
27860 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e 79 2c  inaries, if any,
27870 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72   to the director
27880 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20  y that..
27890 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
278a0 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67 6c 65  ntains the Eagle
278b0 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 69 73   shell.  This is
278c0 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20   typically used
278d0 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20  to make..
278e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
278f0 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73 20 72  ure assemblies r
27900 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
27910 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 73 74   ones being test
27920 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  ed are..
27930 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76        #       av
27940 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 20 74  ailable during t
27950 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
27960 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...
27970 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
27980 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 27990 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 t_channel "---- 279a0 63 6f 70 79 69 6e 67 20 5c 22 65 78 74 65 72 6e copying \"extern 279b0 61 6c 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 al\" files...\n" 279c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 279d0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 279e0 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 me$externalFile
279f0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
27a00 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
27a10 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 24 66 69  ExternalFile $fi 27a20 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 27a30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 27a40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 27a50 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 27a60 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 27a70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c ySqliteNativeFil 27a80 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 27a90 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 27ab0 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 73 74 OTE: If the test 27ac0 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6c 69 6b platform is lik 27ad0 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 ely the default 27ae0 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 for this.. 27af0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 27b00 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f 20 74 72 machine, also tr 27b10 79 20 74 6f 20 63 6f 70 79 20 74 68 65 20 6e 61 y to copy the na 27b20 74 69 76 65 20 66 69 6c 65 73 20 74 6f 20 74 68 tive files to th 27b30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 27b40 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 # binary 27b50 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 location... 27b60 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 27b70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 27b80 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 27b90 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 (copySqliteImpli 27ba0 63 69 74 4e 61 74 69 76 65 46 69 6c 65 73 29 5d citNativeFiles)] 27bb0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 27bc0 20 20 20 20 20 20 20 20 20 5b 69 73 44 65 66 61 [isDefa 27bd0 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d ultBuildPlatform 27be0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 27bf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 27c00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
27c10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
27c20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
27c30 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c  pying implicit \
27c40 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 73 2e  "native\" files.
27c50 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n"....
27c60 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
27c70 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 27c80 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27ca0 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 27cb0 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d$fileName false.
27cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
27cd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
27ce0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
27cf0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
27d00 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
27d10 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69  SqliteNonImplici
27d20 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
27d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
27d40 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
27d50 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
27d60 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73  itePlatformFiles
27d70 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
27d80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
27d90 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61  ring length $pla 27da0 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e tform] > 0} then 27db0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 27dc0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
27dd0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
27de0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27e00 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c   "---- copying \
27e10 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 73 20  "native\" files
27e20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20 5c 22 22  for platform \""
27e30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
27e40 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66            $platf 27e50 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a orm \"...\n].... 27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27e70 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 27e80 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
27e90 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
27ea0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
27eb0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  pyAssembly $file 27ec0 4e 61 6d 65 20 66 61 6c 73 65 20 24 70 6c 61 74 Name false$plat
27ed0 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..
27ee0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
27ef0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27f10 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
27f20 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
27f30 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c  eArchitectureFil
27f40 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
27f60 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61  string length $a 27f70 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 rchitecture] > 0 27f80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 27f90 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 27fa0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
27fb0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
27fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
27fd0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
27fe0 79 69 6e 67 20 5c 22 6e 61 74 69 76 65 5c 22 20  ying \"native\"
27ff0 66 69 6c 65 73 20 66 6f 72 20 61 72 63 68 69 74  files for archit
28000 65 63 74 75 72 65 20 5c 22 22 20 5c 0d 0a 20 20  ecture \"" \..
28010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28020 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72      $architectur 28030 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 e \"...\n].... 28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28050 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 28060 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
28070 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
28080 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
28090 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 280a0 6d 65 20 66 61 6c 73 65 20 24 61 72 63 68 69 74 me false$archit
280b0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
280c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
280d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
280e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
280f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28110 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
28120 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d  ::no(copySqliteM
28130 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65  ixedFiles)]} the
28140 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
28150 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
28160 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
28170 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
28180 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73 65  ime option is se
28190 74 2c 20 63 6f 70 79 20 69 6d 70 6c 69 63 69 74  t, copy implicit
281a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
281b0 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f  #       mixed-mo
281c0 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  de assembly file
281d0 73 20 61 73 20 77 65 6c 6c 2e 20 20 54 68 65 20  s as well.  The
281e0 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 0d 0a  runtime option..
281f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
28200 20 20 20 20 20 20 63 68 65 63 6b 20 69 73 20 68        check is h
28210 61 6e 64 6c 65 64 20 77 68 65 6e 20 62 75 69 6c  andled when buil
28220 64 69 6e 67 20 74 68 65 20 6c 69 73 74 20 6f 66  ding the list of
28230 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a 20 20 20   mixed-mode..
28240 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
28250 20 20 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65     assembly file
28260 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20 20 20 20   names...
28270 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
28280 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
28290 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
282a0 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 63 69  opySqliteImplici
282b0 74 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74  tMixedFiles)]} t
282c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
282d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 282e0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 282f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28300 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e "---- copyin 28310 67 20 69 6d 70 6c 69 63 69 74 20 5c 22 6d 69 78 g implicit \"mix 28320 65 64 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 ed\" files...\n" 28330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 28340 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 28350 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e Name$mixedFileN
28360 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
28370 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70            tryCop
28380 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  yAssembly $fileN 28390 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 ame false.. 283a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 283b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 283c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 283d0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 283e0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 283f0 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 NonImplicitFiles 28400 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 28410 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 28420 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 28430 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 no(copySqlitePla 28440 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 tformFiles)] && 28450 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28460 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 28470 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
28480 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
28490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
284a0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 284b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 284c0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 284d0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 284e0 20 63 6f 70 79 69 6e 67 20 5c 22 6d 69 78 65 64 copying \"mixed 284f0 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 70 6c 61 \" files for pla 28500 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20 20 20 tform \"" \.. 28510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28520 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 2e$platform \".
28530 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n]....
28540 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
28550 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78  ch fileName $mix 28560 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 28570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28580 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 28590 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c ly$fileName fal
285a0 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  se $platform.. 285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 285c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 285d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 285e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 285f0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 28600 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69 74 65 opySqliteArchite 28610 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 ctureFiles)] && 28620 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28630 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 28640 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 ength$architect
28650 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ure] > 0} then {
28660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
28670 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 28680 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 28690 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 286a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 286b0 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d ---- copying \"m 286c0 69 78 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 ixed\" files for 286d0 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 architecture \" 286e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 286f0 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
28700 69 74 65 63 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e  itecture \"...\n
28710 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
28720 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
28730 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69  ileName $mixedFi 28740 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 28750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 28760 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 ryCopyAssembly$
28770 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24  fileName false $28780 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 architecture.. 28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 287a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 287b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 287c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 287d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 287e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 287f0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 28800 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 qliteManagedFile 28810 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 28820 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 28830 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
28840 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c   "---- copying \
28850 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 6c 65 73  "managed\" files
28860 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20  ...\n"....
28870 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
28880 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage 28890 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 dFileNames {.. 288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 288b0 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 yCopyAssembly$f
288c0 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d 0a 20 20  ileName true..
288d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
288e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
288f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
28900 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
28910 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
28920 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20   trying to load
28930 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73  any files if ins
28940 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20  tructed...
28950 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
28960 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
28970 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69  ts ::no(loadSqli
28980 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
28990 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
289a0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
289b0 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
289c0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
289d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
289e0 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73         tryLoadAs
289f0 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61  sembly System.Da
28a00 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20  ta.SQLite.dll..
28a10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28a20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
28a30 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
28a40 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e  no(loadSqliteLin
28a50 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  qFiles)]} then {
28a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
28a70 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20  tryLoadAssembly
28a80 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
28a90 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20  te.Linq.dll..
28aa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
28ab0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
28ac0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
28ad0 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 36 46 69  (loadSqliteEf6Fi
28ae0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
28b00 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73  LoadAssembly Sys
28b10 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
28b20 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  EF6.dll..
28b30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
28b40 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
28b50 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61   exists ::no(loa
28b60 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63  dSqliteNonImplic
28b70 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  itFiles)]} then
28b80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
28b90 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
28ba0 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69  ts ::no(loadSqli
28bb0 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29  tePlatformFiles)
28bc0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
28bd0 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
28be0 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo 28bf0 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rm] > 0} then {. 28c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 28c10 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 tryLoadAssembly 28c20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 28c30 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 ite.dll$platfor
28c40 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..
28c50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
28c60 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
28c70 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53  xists ::no(loadS
28c80 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72  qliteArchitectur
28c90 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20  eFiles)] && \..
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28cb0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
28cc0 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e  $architecture] > 28cd0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 28ce0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c tryL 28cf0 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 oadAssembly Syst 28d00 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 28d10 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 ll$architecture
28d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
28d30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28d40 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
28d50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
28d60 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
28d70 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65  NameOnly $native 28d80 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 28d90 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 28da0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 28db0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
28dc0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
28dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
28de0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
28df0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65  ion of \"" $file 28e00 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 NameOnly "\"... 28e10 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 28e20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 [file ver 28e30 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 sion [getBinaryF 28e40 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
28e50 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  eOnly]] \"\n]..
28e60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
28e70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
28e80 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
28e90 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65  eOnly $mixedFile 28ea0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 28eb0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 28ec0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
28ed0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
28ee0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
28f00 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
28f10 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  of \"" $fileName 28f20 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 Only "\"... \"" 28f30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28f40 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 28f50 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 28f60 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ame$fileNameOnl
28f70 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  y]] \"\n]..
28f80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
28f90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  }....        for
28fa0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  each fileNameOnl
28fb0 79 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  y $managedFileNa 28fc0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 28fd0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 28fe0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
28ff0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
29000 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
29010 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
29020 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
29030 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e   \"" $fileNameOn 29040 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d ly "\"... \"" \. 29050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 29060 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 29070 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 29080 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d e$fileNameOnly]
29090 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ] \"\n]..
290a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
290b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
290c0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p 290d0 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 latform] > 0} th 290e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 290f0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 29100 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 Only$nativeFile
29110 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
29120 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
29130 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
29140 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 29150 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 29160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 29170 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 29180 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c rsion of \""$pl
29190 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20  atform \..
291a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66              / $f 291b0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e ileNameOnly "\". 291c0 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 .. \"" [file ver 291d0 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 sion \.. 291e0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 [getBi 291f0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
29200 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74  leNameOnly $plat 29210 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 form]] \"\n].. 29220 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 29230 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 29240 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 29250 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 leNameOnly$mixe
29260 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
29270 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch
29280 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
29290 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 292a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 292b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 292c0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 292d0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 292e0 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 "$platform \..
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29300 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79   / $fileNameOnly 29310 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c "\"... \"" [fil 29320 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 e version \.. 29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 29340 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 29350 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 e$fileNameOnly
29360 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e  $platform]] \"\n 29370 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 29380 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 29390 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 293a0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 293b0 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 length$architec
293c0 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ture] > 0} then
293d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  {..          for
293e0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  each fileNameOnl
293f0 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  y $nativeFileNam 29400 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 29410 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 29420 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
29430 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
29440 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29460 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
29470 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69  on of \"" $archi 29480 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 tecture \.. 29490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 /$
294a0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22  fileNameOnly "\"
294b0 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65  ... \"" [file ve
294c0 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  rsion \..
294d0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
294e0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 294f0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63 ileNameOnly$arc
29500 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e  hitecture]] \"\n
29510 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
29520 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
29530 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
29540 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
29550 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20  $mixedFileNames 29560 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 {.. c 29570 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 29580 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
29590 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
295a0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
295c0 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
295d0 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63  of \"" $architec 295e0 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 ture \.. 295f0 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c /$fil
29600 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e  eNameOnly "\"...
29610 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69   \"" [file versi
29620 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  on \..
29630 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61          [getBina
29640 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 29650 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 NameOnly$archit
29660 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a  ecture]] \"\n]..
29670 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
29680 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
29690 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
296a0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
296b0 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73  TE: Grab the lis
296c0 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 73  t of managed ass
296d0 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 68 65 20  emblies for the
296e0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 0d  current process.
296f0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
29700 20 61 6e 64 20 72 65 70 6f 72 74 20 6f 6e 20 74   and report on t
29710 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
29720 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e  QLite related on
29730 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es...        #..
29740 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76          if {[hav
29750 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
29760 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mand]} then {..
29770 20 20 20 20 20 20 20 20 20 73 65 74 20 61 73 73           set ass
29780 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20  emblies [object
29790 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e  invoke AppDomain
297a0 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47  .CurrentDomain G
297b0 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d  etAssemblies]...
297c0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
297d0 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62  t foreach assemb
297e0 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b  ly $assemblies { 297f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 29800 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 29810 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \{System.Data.SQ 29820 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d Lite*$assembly]
29830 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
29840 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 29850 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 29860 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 29870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 29880 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 ---- found loade 29890 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 d assembly: "$a
298a0 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20  ssembly \n]..
298b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
298c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
298d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
298e0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
298f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 29900 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 29910 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 "---- de 29920 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 fine constants f 29930 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 or \"System.Data 29940 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a .SQLite\"... ".. 29950 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 29960 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 29970 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 29980 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 29990 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 299a0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 299b0 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 299c0 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 te3 DefineConsta 299d0 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d nts.. } 299e0 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 defineConstants 299f0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 29a00 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 29a10 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
29a20 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66  l [appendArgs [f
29a30 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
29a40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
29a50 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73 74      $defineConst 29a60 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e ants] <none>] \n 29a70 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 29a80 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 29a90 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
29aa0 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e  _channel unknown
29ab0 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  \n..          }.
29ac0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
29ad0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
29ae0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $29af0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 29b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29b10 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65 72 "---- source ver 29b20 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d sion of \"System 29b30 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 29b40 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 \"... ".... 29b50 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 29b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 29b70 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 29b80 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 29b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29ba0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 29bb0 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 Lite.SQLiteConne 29bc0 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 56 65 ction ProviderVe 29bd0 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 rsion.. 29be0 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 } version] == 0 29bf0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 29c00 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 29c10 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f g length$versio
29c20 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  n] == 0} then {.
29c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
29c40 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
29c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29c60 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
29c70 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 29c80 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 76 l [appendArgs$v
29c90 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20  ersion \n]..
29ca0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
29cc0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 29cd0 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 l unknown\n.. 29ce0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 29cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 29d00 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 29d10 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
29d20 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
29d30 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
29d40 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20 6f  ource checkout o
29d50 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  f \"System.Data.
29d60 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20  SQLite.dll\"...
29d70 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
29d80 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
29d90 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
29da0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
29db0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
29dd0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
29de0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection
29df0 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 49 64  ProviderSourceId
29e00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 73 6f  ..          } so
29e10 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68  urceId] == 0} th
29e20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
29e30 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
29e40 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20  ngth $sourceId] 29e50 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 29e60 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 29e70 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 sourceId null.. 29e80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 29e90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 29ea0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
29eb0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 6f 75  [appendArgs $sou 29ec0 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 rceId \n].. 29ed0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 29ee0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 29ef0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
29f00 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20   unknown\n..
29f10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
29f20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
29f30 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
29f40 20 52 65 73 65 74 20 63 61 63 68 65 64 20 22 62   Reset cached "b
29f50 72 65 61 6b 20 69 6e 74 6f 20 64 65 62 75 67 67  reak into debugg
29f60 65 72 22 20 73 65 74 74 69 6e 67 20 73 6f 20 74  er" setting so t
29f70 68 61 74 20 69 74 20 63 61 6e 20 62 65 0d 0a 20  hat it can be..
29f80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75         #       u
29f90 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 74  sed during the t
29fa0 65 73 74 20 66 69 6c 65 2c 20 69 66 20 6e 65 65  est file, if nee
29fb0 64 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ded...        #.
29fc0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
29fd0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
29fe0 72 65 73 65 74 42 72 65 61 6b 49 6e 74 6f 44 65  resetBreakIntoDe
29ff0 62 75 67 67 65 72 29 5d 20 26 26 20 5c 0d 0a 20  bugger)] && \..
2a000 20 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65             [have
2a010 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
2a020 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  and]} then {..
2a030 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
2a040 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
2a050 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
2a060 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
2a070 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
2a080 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
2a090 2e 53 51 4c 69 74 65 2e 48 65 6c 70 65 72 4d 65  .SQLite.HelperMe
2a0a0 74 68 6f 64 73 20 52 65 73 65 74 42 72 65 61 6b  thods ResetBreak
2a0b0 49 6e 74 6f 44 65 62 75 67 67 65 72 0d 0a 20 20  IntoDebugger..
2a0c0 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74          } result
2a0d0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
2a0e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
2a0f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2a100 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 2a110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2a120 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 52 65 73 65 "---- call Rese 2a130 74 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 tBreakIntoDebugg 2a140 65 72 28 29 2e 2e 2e 20 6f 6b 5c 6e 22 5d 0d 0a er()... ok\n"].. 2a150 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 2a160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2a170 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2a180 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2a190 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
2a1a0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
2a1b0 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f 44 65  ResetBreakIntoDe
2a1c0 62 75 67 67 65 72 28 29 2e 2e 2e 20 65 72 72 6f  bugger()... erro
2a1d0 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
2a1e0 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 2a1f0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 2a200 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 2a210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 2a220 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 2a230 68 65 63 6b 20 74 68 65 20 61 76 61 69 6c 61 62 heck the availab 2a240 6c 65 20 62 75 69 6c 64 73 20 28 61 6e 64 20 22 le builds (and " 2a250 72 65 6c 65 61 73 65 73 22 29 20 6f 66 20 53 51 releases") of SQ 2a260 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 Lite and.. 2a270 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d # System 2a280 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 .Data.SQLite... 2a290 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2a2a0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 2a2b0 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 Builds$::test_c
2a2c0 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20  hannel..
2a2d0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65  checkForSQLiteRe
2a2e0 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63  leases $::test_c 2a2f0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 2a300 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a310 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 OTE: Now, we nee 2a320 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 d to know if the 2a330 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 2a340 72 61 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c rary is availabl 2a350 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 2a360 20 20 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 (i.e. because 2a370 20 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c the managed-onl 2a380 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 2a390 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 20 63 61 Lite assembly ca 2a3a0 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 n.. # 2a3b0 20 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 load without 2a3c0 69 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 it; however, it 2a3d0 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 cannot do anythi 2a3e0 6e 67 20 75 73 65 66 75 6c 20 77 69 74 68 6f 75 ng useful withou 2a3f0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 2a400 20 20 20 69 74 29 2e 20 20 49 66 20 77 65 20 61 it). If we a 2a410 72 65 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 re using the mix 2a420 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 2a430 20 61 6e 64 20 77 65 20 61 6c 72 65 61 64 79 0d and we already. 2a440 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2a450 20 66 6f 75 6e 64 20 69 74 20 28 61 62 6f 76 65 found it (above 2a460 29 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 ), this should a 2a470 6c 77 61 79 73 20 73 75 63 63 65 65 64 2e 0d 0a lways succeed... 2a480 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2a490 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 2a4a0 65 4c 69 62 72 61 72 79 20 24 3a 3a 74 65 73 74 eLibrary$::test
2a4b0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
2a4c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2a4d0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
2a4e0 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72  the SQLite inter
2a4f0 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 73 20 61  op assembly is a
2a500 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20  vailable...
2a510 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
2a520 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65  eckForSQLiteInte
2a530 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  rop $::test_chan 2a540 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 2a550 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2a560 3a 20 43 68 65 63 6b 20 74 68 65 20 53 51 4c 69 : Check the SQLi 2a570 74 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 te database and 2a580 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 2a590 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ories... 2a5a0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 2a5b0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f ForSQLiteDirecto 2a5c0 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ries$::test_cha
2a5d0 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
2a5e0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
2a5f0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65  E: Attempt to de
2a600 74 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f  termine if vario
2a610 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  us compile-time
2a620 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66  options needed f
2a630 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  or..        #
2a640 20 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61      test constra
2a650 69 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65  ints were enable
2a660 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65  d for the manage
2a670 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 68 65  d assembly.  The
2a680 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #
2a690 20 20 20 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d      are some com
2a6a0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
2a6b0 73 20 74 68 61 74 20 6d 75 73 74 20 61 6c 73 6f  s that must also
2a6c0 20 68 61 76 65 20 62 65 65 6e 20 65 6e 61 62 6c   have been enabl
2a6d0 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ed..        #
2a6e0 20 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65      for the inte
2a6f0 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 6e 20  rop assembly in
2a700 6f 72 64 65 72 20 74 6f 20 62 65 20 65 66 66 65  order to be effe
2a710 63 74 69 76 65 2e 20 20 46 6f 72 20 74 68 6f 73  ctive.  For thos
2a720 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
2a730 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77     options, it w
2a740 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 20 74  ill be assumed t
2a750 68 61 74 20 69 74 20 77 61 73 20 65 6e 61 62 6c  hat it was enabl
2a760 65 64 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72  ed for the inter
2a770 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  op..        #
2a780 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69 66 20      assembly if
2a790 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66  it was enabled f
2a7a0 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  or the managed a
2a7b0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
2a7c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
2a7d0 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74  each defineConst
2a7e0 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ant [list \..
2a7f0 20 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53           CHECK_S
2a800 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c  TATE COUNT_HANDL
2a810 45 20 44 45 42 55 47 20 49 4e 54 45 52 4f 50 5f  E DEBUG INTEROP_
2a820 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f 44 45  CODEC INTEROP_DE
2a830 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  BUG \..
2a840 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e     INTEROP_EXTEN
2a850 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49  SION_FUNCTIONS I
2a860 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 54 45  NTEROP_FTS5_EXTE
2a870 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
2a880 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e 43       INTEROP_INC
2a890 4c 55 44 45 5f 43 45 52 4f 44 20 49 4e 54 45 52  LUDE_CEROD INTER
2a8a0 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 52 41  OP_INCLUDE_EXTRA
2a8b0 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45   INTEROP_INCLUDE
2a8c0 5f 53 45 45 20 5c 0d 0a 20 20 20 20 20 20 20 20  _SEE \..
2a8d0 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c      INTEROP_INCL
2a8e0 55 44 45 5f 5a 49 50 56 46 53 20 49 4e 54 45 52  UDE_ZIPVFS INTER
2a8f0 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49  OP_JSON1_EXTENSI
2a900 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ON \..
2a910 20 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59    INTEROP_LEGACY
2a920 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c  _CLOSE INTEROP_L
2a930 4f 47 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 45  OG INTEROP_PERCE
2a940 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20  NTILE_EXTENSION
2a950 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  \..            I
2a960 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58  NTEROP_REGEXP_EX
2a970 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f  TENSION INTEROP_
2a980 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f  SESSION_EXTENSIO
2a990 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  N \..
2a9a0 20 49 4e 54 45 52 4f 50 5f 53 48 41 31 5f 45 58   INTEROP_SHA1_EX
2a9b0 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f  TENSION INTEROP_
2a9c0 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c  TEST_EXTENSION \
2a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e  ..            IN
2a9e0 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54  TEROP_TOTYPE_EXT
2a9f0 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56  ENSION INTEROP_V
2aa00 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c 0d 0a  IRTUAL_TABLE \..
2aa10 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f              NET_
2aa20 32 30 20 4e 45 54 5f 33 35 20 4e 45 54 5f 34 30  20 NET_35 NET_40
2aa30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 31 20   NET_45 NET_451
2aa40 4e 45 54 5f 34 35 32 20 4e 45 54 5f 34 36 20 4e  NET_452 NET_46 N
2aa50 45 54 5f 34 36 31 20 5c 0d 0a 20 20 20 20 20 20  ET_461 \..
2aa60 20 20 20 20 20 20 4e 45 54 5f 34 36 32 20 4e 45        NET_462 NE
2aa70 54 5f 34 37 20 4e 45 54 5f 34 37 31 20 4e 45 54  T_47 NET_471 NET
2aa80 5f 43 4f 4d 50 41 43 54 5f 32 30 20 50 4c 41 54  _COMPACT_20 PLAT
2aa90 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
2aaa0 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 20 20 20  EWORK \..
2aab0 20 20 20 20 20 50 52 45 4c 4f 41 44 5f 4e 41 54       PRELOAD_NAT
2aac0 49 56 45 5f 4c 49 42 52 41 52 59 20 52 45 54 41  IVE_LIBRARY RETA
2aad0 52 47 45 54 41 42 4c 45 20 53 51 4c 49 54 45 5f  RGETABLE SQLITE_
2aae0 53 54 41 4e 44 41 52 44 20 5c 0d 0a 20 20 20 20  STANDARD \..
2aaf0 20 20 20 20 20 20 20 20 54 48 52 4f 57 5f 4f 4e          THROW_ON
2ab00 5f 44 49 53 50 4f 53 45 44 20 54 52 41 43 45 20  _DISPOSED TRACE
2ab10 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e  TRACE_CONNECTION
2ab20 20 54 52 41 43 45 5f 44 45 54 45 43 54 49 4f 4e   TRACE_DETECTION
2ab30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2ab40 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 54 52 41  TRACE_HANDLE TRA
2ab50 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 41 43 45  CE_PRELOAD TRACE
2ab60 5f 53 48 41 52 45 44 20 54 52 41 43 45 5f 53 54  _SHARED TRACE_ST
2ab70 41 54 45 4d 45 4e 54 20 5c 0d 0a 20 20 20 20 20  ATEMENT \..
2ab80 20 20 20 20 20 20 20 54 52 41 43 45 5f 57 41 52         TRACE_WAR
2ab90 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52  NING TRACK_MEMOR
2aba0 59 5f 42 59 54 45 53 20 55 53 45 5f 45 4e 54 49  Y_BYTES USE_ENTI
2abb0 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 20 5c  TY_FRAMEWORK_6 \
2abc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 53  ..            US
2abd0 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53  E_INTEROP_DLL US
2abe0 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e  E_PREPARE_V2 WIN
2abf0 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20  DOWS] {..
2ac00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2ac10 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
2ac20 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
2ac30 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74  e option is list
2ac40 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ed in the list o
2ac50 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  f..          #
2ac60 20 20 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e       "define con
2ac70 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61  stants" kept tra
2ac80 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e  ck of by the man
2ac90 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  aged assembly...
2aca0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2acb0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
2acc0 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
2acd0 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ant $::test_chan 2ace0 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 nel$defineConst
2acf0 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ant..        }..
2ad00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2ad10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
2ad20 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e  empt to determin
2ad30 65 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d  e if various com
2ad40 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
2ad50 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20  s needed for..
2ad60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
2ad70 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77  st constraints w
2ad80 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20  ere enabled for
2ad90 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65  the interop asse
2ada0 6d 62 6c 79 20 61 6e 64 2f 6f 72 0d 0a 20 20 20  mbly and/or..
2adb0 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
2adc0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
2add0 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...
2ade0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f     #..        fo
2adf0 72 65 61 63 68 20 63 6f 6d 70 69 6c 65 4f 70 74  reach compileOpt
2ae00 69 6f 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ion [list \..
2ae10 20 20 20 20 20 20 20 20 20 43 4f 44 45 43 20 45           CODEC E
2ae20 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f  XTENSION_FUNCTIO
2ae30 4e 53 20 48 41 53 5f 43 4f 44 45 43 20 49 4e 43  NS HAS_CODEC INC
2ae40 4c 55 44 45 5f 43 45 52 4f 44 20 49 4e 43 4c 55  LUDE_CEROD INCLU
2ae50 44 45 5f 45 58 54 52 41 20 5c 0d 0a 20 20 20 20  DE_EXTRA \..
2ae60 20 20 20 20 20 20 20 20 49 4e 43 4c 55 44 45 5f          INCLUDE_
2ae70 53 45 45 20 49 4e 43 4c 55 44 45 5f 5a 49 50 56  SEE INCLUDE_ZIPV
2ae80 46 53 20 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49  FS JSON1_EXTENSI
2ae90 4f 4e 20 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20  ON LEGACY_CLOSE
2aea0 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  LOG \..
2aeb0 20 20 20 50 45 52 43 45 4e 54 49 4c 45 5f 45 58     PERCENTILE_EX
2aec0 54 45 4e 53 49 4f 4e 20 52 45 47 45 58 50 5f 45  TENSION REGEXP_E
2aed0 58 54 45 4e 53 49 4f 4e 20 53 45 53 53 49 4f 4e  XTENSION SESSION
2aee0 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
2aef0 20 20 20 20 20 20 20 20 20 20 53 48 41 31 5f 45            SHA1_E
2af00 58 54 45 4e 53 49 4f 4e 20 54 45 53 54 5f 45 58  XTENSION TEST_EX
2af10 54 45 4e 53 49 4f 4e 20 54 4f 54 59 50 45 5f 45  TENSION TOTYPE_E
2af20 58 54 45 4e 53 49 4f 4e 20 56 49 52 54 55 41 4c  XTENSION VIRTUAL
2af30 5f 54 41 42 4c 45 5d 20 7b 0d 0a 20 20 20 20 20  _TABLE] {..
2af40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2af50 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
2af60 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  if the compile-t
2af70 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69  ime option is li
2af80 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74  sted in the list
2af90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
2afa0 20 20 20 20 6b 65 70 74 20 74 72 61 63 6b 20 6f      kept track o
2afb0 66 20 62 79 20 74 68 65 20 69 6e 74 65 72 6f 70  f by the interop
2afc0 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 2f 6f 72   assembly and/or
2afd0 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20   the SQLite..
2afe0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
2aff0 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...
2b000 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2b010 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
2b020 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
2b030 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2b040 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 0d$compileOption.
2b050 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2b060 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2b070 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
2b080 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  f the System.Dat
2b090 61 2e 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65  a.SQLite provide
2b0a0 72 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  r was compiled w
2b0b0 69 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ith..        #
2b0c0 20 20 20 20 20 73 75 70 70 6f 72 74 20 66 6f 72       support for
2b0d0 20 61 6e 79 20 65 6e 63 72 79 70 74 65 64 20 64   any encrypted d
2b0e0 61 74 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 20  atabases...
2b0f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
2b100 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66   {[haveSQLiteDef
2b110 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45  ineConstant INTE
2b120 52 4f 50 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d  ROP_CODEC] || \.
2b130 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 68 61  .            [ha
2b140 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  veSQLiteDefineCo
2b150 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 49  nstant INTEROP_I
2b160 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 65  NCLUDE_SEE]} the
2b170 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
2b180 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
2b190 54 45 3a 20 4e 6f 77 20 63 68 65 63 6b 20 69 66  TE: Now check if
2b1a0 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73   the interop ass
2b1b0 65 6d 62 6c 79 20 77 61 73 20 61 6c 73 6f 20 63  embly was also c
2b1c0 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20  ompiled with..
2b1d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2b1e0 73 75 70 70 6f 72 74 20 66 6f 72 20 65 6e 63 72  support for encr
2b1f0 79 70 74 65 64 20 64 61 74 61 62 61 73 65 73 2e  ypted databases.
2b200 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2b210 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61           if {[ha
2b220 76 65 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f  veSQLiteCompileO
2b230 70 74 69 6f 6e 20 43 4f 44 45 43 5d 20 7c 7c 20  ption CODEC] ||
2b240 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2b250 20 5b 68 61 76 65 53 51 4c 69 74 65 43 6f 6d 70   [haveSQLiteComp
2b260 69 6c 65 4f 70 74 69 6f 6e 20 49 4e 43 4c 55 44  ileOption INCLUD
2b270 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a  E_SEE]} then {..
2b280 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
2b290 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
2b2a0 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 63 68 65 63  E: Finally, chec
2b2b0 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  k if the SQLite
2b2c0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73  core library was
2b2d0 20 63 6f 6d 70 69 6c 65 64 0d 0a 20 20 20 20 20   compiled..
2b2e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
2b2f0 69 74 68 20 73 75 70 70 6f 72 74 20 66 6f 72 20  ith support for
2b300 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61  encrypted databa
2b310 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ses...
2b320 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
2b330 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
2b340 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 48 41  CompileOption HA
2b350 53 5f 43 4f 44 45 43 5d 7d 20 74 68 65 6e 20 7b  S_CODEC]} then {
2b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2b370 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
2b380 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 61 64   # NOTE: Yes, ad
2b390 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72  d constraint for
2b3a0 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
2b3b0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   suite...
2b3c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2b3d0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
2b3e0 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74  raint System.Dat
2b3f0 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74  a.SQLite.Encrypt
2b400 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..
2b410 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2b420 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2b430 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2b440 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
2b450 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64  he current build
2b460 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c   year.  Basicall
2b470 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 65  y, this indicate
2b480 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
2b490 20 20 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e     which version
2b4a0 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f   of MSBuild and/
2b4b0 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  or Visual Studio
2b4c0 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20   was used to..
2b4d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
2b4e0 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62  mpile the assemb
2b4f0 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  ly binaries unde
2b500 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20  r test...
2b510 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
2b520 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2b530 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 2b540 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 2b550 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. 2b560 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 SQLite build yea 2b570 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 r... ".... 2b580 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 set year [getB 2b590 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 uildYear].. 2b5a0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 2b5b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 2b5c0 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a ldYear.$year]..
2b5d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2b5e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 2b5f0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65 ppendArgs \"$ye
2b600 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ar \"\n]....
2b610 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2b620 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
2b630 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 2e   current build .
2b640 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20  NET Framework.
2b650 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d  Basically, this.
2b660 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2b670 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 68   indicates which
2b680 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the
2b690 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 69  .NET Framework i
2b6a0 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  s being..
2b6b0 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79   #       used by
2b6c0 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69   the assembly bi
2b6d0 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73  naries under tes
2b6e0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
2b6f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2b700 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 2b710 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 2b720 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 2b730 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2b740 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 e build .NET Fra 2b750 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 mework... ".... 2b760 20 20 20 20 20 20 20 73 65 74 20 6e 65 74 46 78 set netFx 2b770 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d [getBuildNetFx] 2b780 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 2b790 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 2b7a0 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65 77 6f rgs buildFramewo 2b7b0 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 rk.$netFx]..
2b7c0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2b7d0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 2b7e0 6e 64 41 72 67 73 20 5c 22 20 24 6e 65 74 46 78 ndArgs \"$netFx
2b7f0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20   \"\n]....
2b800 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2b810 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63  OTE: Check the c
2b820 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e  urrent build con
2b830 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69  figuration.  Thi
2b840 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  s should normall
2b850 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
2b860 20 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65     be either "De
2b870 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65  bug" or "Release
2b880 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
2b890 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2b8a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 2b8c0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 2b8d0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2b8e0 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 e build configur 2b8f0 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 ation... ".... 2b900 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 set config 2b910 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c uration [getBuil 2b920 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d dConfiguration]. 2b930 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 2b940 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 2b950 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 gs buildConfigur 2b960 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 ation.$configur
2b970 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ation]..
2b980 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 2b990 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 2b9a0 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 s \"$configurat
2b9b0 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20  ion \"\n]....
2b9c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2b9d0 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73  # NOTE: Try to s
2b9e0 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70  etup an interrup
2b9f0 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  t callback using
2ba00 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75   the script debu
2ba10 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20  gger..        #
2ba20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20        that will
2ba30 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71  cancel all SQL q
2ba40 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65  ueries in progre
2ba50 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62  ss for all datab
2ba60 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ase..        #
2ba70 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73       connections
2ba80 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69   known to this i
2ba90 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
2baa0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2bab0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2bac0 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74  s ::no(sqliteInt
2bad0 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d  erruptCallback)]
2bae0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2baf0 20 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72      setupDbInter
2bb00 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a  ruptCallback $:: 2bb10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a test_channel$::
2bb20 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20  test_log..
2bb30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
2bb40 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2bb50 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20  : Check for the
2bb60 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f  native runtime o
2bb70 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75  ption, which wou
2bb80 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a  ld mean we are..
2bb90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2bba0 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d  using the mixed-
2bbb0 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  mode assembly...
2bbc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2bbd0 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69     checkForRunti
2bbe0 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74  meOption $::test 2bbf0 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d _channel native. 2bc00 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2bc10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 2bc20 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 eck if the test 2bc30 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 suite should cou 2bc40 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 nt the number of 2bc50 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 connections.. 2bc60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f # "o 2bc70 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 pened" and "clos 2bc80 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f ed" from the poo 2bc90 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 l when determini 2bca0 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 ng if a test.. 2bcb0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 2bcc0 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 ssed. Disabling 2bcd0 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 this behavior i 2bce0 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 s sometimes nece 2bcf0 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 ssary (e.g... 2bd00 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 # dur 2bd10 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 ing the release 2bd20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 testing process) 2bd30 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 because there a 2bd40 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 re several.. 2bd50 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 2bd60 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 s that rely on t 2bd70 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 he "opened from 2bd80 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e pool" count bein 2bd90 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 g greater.. 2bda0 20 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 # than 2bdb0 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 zero. These tes 2bdc0 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 ts may fail due 2bdd0 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 to the non-deter 2bde0 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 ministic.. 2bdf0 20 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 # behavi 2be00 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 or of the CLR GC 2be10 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 , even when ther 2be20 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 e is no bug in t 2be30 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 he code.. 2be40 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 # being t 2be50 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ested... 2be60 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 2be70 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e ForRuntimeOption 2be80 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2be90 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d   noPoolCounts...
2bea0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2beb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
2bec0 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75  k if the test su
2bed0 69 74 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73  ite should use s
2bee0 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
2bef0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2bf00 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75        checkForRu
2bf10 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74  ntimeOption $::t 2bf20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 est_channel shar 2bf30 65 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 edCache.... 2bf40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 2bf50 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 NOTE: Report the 2bf60 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 resource usage 2bf70 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 prior to running 2bf80 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 any tests... 2bf90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2bfa0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f reportSQLiteReso 2bfb0 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 urces$::test_ch
2bfc0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
2bfd0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2bfe0 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73  TE: Grab the lis
2bff0 74 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75  t of native modu
2c000 6c 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72  les for the curr
2c010 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d  ent process and.
2c020 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2c030 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53   report on the S
2c040 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2c050 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d  e related ones..
2c060 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2c070 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
2c080 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
2c090 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2c0a0 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73       set modules
2c0b0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
2c0c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2c0d0 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74   System.Diagnost
2c0e0 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43  ics.Process.GetC
2c0f0 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f  urrentProcess Mo
2c100 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  dules]....
2c110 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
2c120 63 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65  ch -alias module
2c130 20 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20   $modules {.. 2c140 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2c150 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2c160 54 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 The module file 2c170 6e 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 name here must b 2c180 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 e normalized... 2c190 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 2c1a0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 set fi 2c1b0 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 leName [file nor 2c1c0 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 malize [$module
2c1d0 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20  FileName]]..
2c1e0 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
2c1f0 4e 61 6d 65 4f 6e 6c 79 20 5b 66 69 6c 65 20 74  NameOnly [file t
2c200 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ail $fileName].. 2c210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2c220 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 {[lsearch -exac 2c230 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a t -nocase -- \.. 2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c250 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 [getNativeLibrar 2c260 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 yFileNamesOnly] 2c270 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21$fileNameOnly] !
2c280 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  = -1} then {..
2c290 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
2c2a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2c2b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 2c2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2c2d0 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c "---- found l 2c2e0 6f 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 oaded SQLite nat 2c2f0 69 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 ive library modu 2c300 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 le: " \.. 2c310 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65$file
2c320 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  Name \n]..
2c330 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
2c340 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact
2c350 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20  -nocase -- \..
2c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
2c370 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c  etInteropAssembl
2c380 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20  yFileNamesOnly]
2c390 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21  $fileNameOnly] ! 2c3a0 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 = -1} then {.. 2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 2c3c0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2c3d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
2c3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2c3f0 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c     "---- found l
2c400 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74  oaded SQLite int
2c410 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f  erop assembly mo
2c420 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20  dule: " \..
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69               $fi 2c440 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 leName \n].. 2c450 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2c460 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2c470 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 2c480 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 2c490 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2c4a0 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
2c4b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d         "---- com
2c4c0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
2c4d0 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72  s for SQLite cor
2c4e0 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a  e library... "..
2c4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
2c500 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
2c510 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
2c520 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
2c530 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
2c540 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
2c550 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
2c560 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c  te3 SQLiteCompil
2c570 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  eOptions..
2c580 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74      } compileOpt
2c590 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ions] == 0} then
2c5a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2c5b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 2c5c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 2c5d0 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c s [formatList [l 2c5e0 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 sort \.. 2c5f0 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65$compile
2c600 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d  Options] <none>]
2c610 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
2c620 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
2c630 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 2c640 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 2c650 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 2c660 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 2c670 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 2c680 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 2c690 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2c6a0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
2c6b0 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65     "---- compile
2c6c0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f  -time options fo
2c6d0 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70  r SQLite interop
2c6e0 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a   assembly... "..
2c6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
2c700 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
2c710 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
2c720 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
2c730 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
2c740 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
2c750 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
2c760 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69  te3 InteropCompi
2c770 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  leOptions..
2c780 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70       } compileOp
2c790 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tions] == 0} the
2c7a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2c7b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2c7c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2c7d0 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b gs [formatList [ 2c7e0 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 lsort \.. 2c7f0 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c$compil
2c800 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e  eOptions] <none>
2c810 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
2c820 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
2c830 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2c840 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b test_channel unk 2c850 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 nown\n.. 2c860 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 2c870 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2c880 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 2c890 77 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73 w the active tes 2c8a0 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a t constraints... 2c8b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2c8c0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
2c8d0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
2c8e0 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74  Args "---- const
2c8f0 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20  raints: " \..
2c900 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74           [format
2c910 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74  List [lsort [get
2c920 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e  Constraints]] <n
2c930 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  one>] \n]....
2c940 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2c950 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65  # NOTE: Save the
2c960 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
2c970 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72  s for use by thr
2c980 65 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20  eads created in
2c990 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  this..        #
2c9a0 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f        applicatio
2c9b0 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20  n domain.  This
2c9c0 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63  is necessary bec
2c9d0 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67  ause all the Eag
2c9e0 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
2c9f0 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78      "test contex
2ca00 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  t" information i
2ca10 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20  s per-thread...
2ca20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2ca30 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2ca40 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74  sts ::test_const
2ca50 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d  raints]} then {.
2ca60 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a  .          set :
2ca70 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74  :test_constraint
2ca80 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73  s $::eagle_tests 2ca90 28 43 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 (Constraints).. 2caa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2cab0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2cac0 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 NOTE: Load the 2cad0 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e "after-constrain 2cae0 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 ts" custom per-u 2caf0 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 ser and/or per-h 2cb00 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ost.. # 2cb10 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e test settin 2cb20 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 gs now... 2cb30 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 #.. uple 2cb40 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 vel 1 [list load 2cb50 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e SQLiteTestSettin 2cb60 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e gs$::test_chann
2cb70 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20  el .after]....
2cb80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2cb90 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65   # NOTE: If nece
2cba0 73 73 61 72 79 2c 20 65 6e 61 62 6c 65 20 73 68  ssary, enable sh
2cbb0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode
2cbc0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
2cbd0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
2cbe0 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73  sRuntimeOption s
2cbf0 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65  haredCache]} the
2cc00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  n {..          e
2cc10 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65  nableSharedCache
2cc20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2cc30 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d true.. } 2cc40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 2cc50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 2cc60 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 how when our tes 2cc70 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 ts actually bega 2cc80 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 n (now)... 2cc90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 2cca0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
2ccb0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
2ccc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
2ccd0 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  --- System.Data.
2cce0 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67  SQLite tests beg
2ccf0 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20  an at " \..
2cd00 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f         [clock fo
2cd10 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
2cd20 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  nds]] \n]..
2cd30 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
2cd40 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65    proc runSQLite
2cd50 54 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75  TestFilesPrologu
2cd60 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e {} {..      #.
2cd70 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
2cd80 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20  kip running our
2cd90 63 75 73 74 6f 6d 20 66 69 6c 65 73 20 70 72 6f  custom files pro
2cda0 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69  logue if the mai
2cdb0 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a  n one has been..
2cdc0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b        #       sk
2cdd0 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ipped...      #.
2cde0 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66  .      if {![inf
2cdf0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72  o exists ::no(pr
2ce00 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20  ologue.eagle)]}
2ce10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2ce20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20  uplevel 1 {..
2ce30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2ce40 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75      # NOTE: Setu
2ce50 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20  p the variables
2ce60 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
2ce70 65 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d 64 61  e various non-da
2ce80 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20  ta files..
2ce90 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75      #       requ
2cea0 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74  ired by the test
2ceb0 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d  s in this file..
2cec0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
2ced0 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69          set enti
2cee0 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69  tyFrameworkDllFi
2cef0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
2cf00 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
2cf10 65 4e 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d  eName EntityFram
2cf20 65 77 6f 72 6b 2e 64 6c 6c 20 66 61 6c 73 65 5d  ework.dll false]
2cf30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
2cf40 74 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69  t installerExeFi
2cf50 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
2cf60 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
2cf70 65 4e 61 6d 65 20 49 6e 73 74 61 6c 6c 65 72 2e  eName Installer.
2cf80 65 78 65 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20  exe false]....
2cf90 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 69          set sqli
2cfa0 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c  teDesignerDllFil
2cfb0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
2cfc0 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
2cfd0 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44 65 73 69  Name SQLite.Desi
2cfe0 67 6e 65 72 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d  gner.dll false].
2cff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
2d000 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
2d010 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20  eDllFile \..
2d020 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
2d030 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  ildFileName Syst
2d040 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
2d050 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20  ll false]....
2d060 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65         set syste
2d070 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44  mDataSQLiteLinqD
2d080 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  llFile \..
2d090 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
2d0a0 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  dFileName System
2d0b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
2d0c0 71 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a  q.dll false]....
2d0d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 79            set sy
2d0e0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66  stemDataSQLiteEf
2d0f0 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20  6DllFile \..
2d100 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
2d110 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  ildFileName Syst
2d120 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
2d130 46 36 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a 0d  F6.dll false]...
2d140 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74  .          set t
2d150 65 73 74 45 78 65 46 69 6c 65 20 5b 67 65 74 42  estExeFile [getB
2d160 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73  uildFileName tes
2d170 74 2e 65 78 65 20 66 61 6c 73 65 5d 0d 0a 20 20  t.exe false]..
2d180 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
2d190 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 67 65 74  LinqExeFile [get
2d1a0 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65  BuildFileName te
2d1b0 73 74 6c 69 6e 71 2e 65 78 65 20 66 61 6c 73 65  stlinq.exe false
2d1c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ]..          set
2d1d0 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20   testEf6ExeFile
2d1e0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
2d1f0 65 20 74 65 73 74 65 66 36 2e 65 78 65 20 66 61  e testef6.exe fa
2d200 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse]....
2d210 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
2d220 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65   NOTE: Setup the
2d230 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20   variables that
2d240 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72  refer to the var
2d250 69 6f 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d  ious data files.
2d260 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
2d270 20 20 20 72 65 71 75 69 72 65 64 20 62 79 20 74     required by t
2d280 68 65 20 74 65 73 74 73 20 69 6e 20 74 68 69 73  he tests in this
2d290 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
2d2a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
2d2b0 65 74 20 74 65 73 74 4c 69 6e 71 4f 75 74 46 69  et testLinqOutFi
2d2c0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
2d2d0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
2d2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2d2f0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
2d300 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 6e 71  taPath] testlinq
2d310 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .out]]....
2d320 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e      set northwin
2d330 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20  dEfDbFile [file
2d340 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
2d350 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
2d360 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72         [file dir
2d370 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61  name [file dirna
2d380 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73  me [getSQLiteTes
2d390 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a  tDataPath]]] \..
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
2d3b0 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64  stlinq northwind
2d3c0 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20  EF.db]]....
2d3d0 20 20 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44       set nonWalD
2d3e0 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  bFile [file nati
2d3f0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
2d400 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
2d410 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
2d420 74 44 61 74 61 50 61 74 68 5d 20 6e 6f 6e 57 61  tDataPath] nonWa
2d430 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  l.db]]....
2d440 20 20 20 20 73 65 74 20 77 61 6c 44 62 46 69 6c      set walDbFil
2d450 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
2d460 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
2d470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2d480 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
2d490 61 50 61 74 68 5d 20 77 61 6c 2e 64 62 5d 5d 0d  aPath] wal.db]].
2d4a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
2d4b0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2d4c0 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e  : The various in
2d4d0 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20  stall/uninstall
2d4e0 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20 74  log files used t
2d4f0 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20  o test the..
2d500 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65        #       de
2d510 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e  sign-time compon
2d520 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a  ent installer...
2d530 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2d540 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
2d550 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
2d560 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
2d570 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
2d580 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2d590 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
2d5a0 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c  ataPath] Install
2d5b0 65 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c  er_Test_Vs2005.l
2d5c0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
2d5d0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c    set testInstal
2d5e0 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b  lVs2008LogFile [
2d5f0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
2d600 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
2d610 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
2d620 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
2d630 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65  th] Installer_Te
2d640 73 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d  st_Vs2008.log]].
2d650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
2d660 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
2d670 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  10LogFile [file
2d680 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
2d690 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
2d6a0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
2d6b0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
2d6c0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
2d6d0 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2010.log]]....
2d6e0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
2d6f0 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67  InstallVs2012Log
2d700 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
2d710 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
2d720 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2d730 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
2d740 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
2d750 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e  ler_Test_Vs2012.
2d760 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
2d770 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
2d780 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20  llVs2013LogFile
2d790 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
2d7a0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
2d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
2d7c0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
2d7d0 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
2d7e0 65 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d  est_Vs2013.log]]
2d7f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
2d800 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
2d810 30 31 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  015LogFile [file
2d820 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
2d830 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
2d840 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
2d850 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
2d860 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
2d870 73 32 30 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2015.log]]....
2d880 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73           set tes
2d890 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f  tInstallVs2017Lo
2d8a0 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
2d8b0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
2d8c0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
2d8d0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
2d8e0 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61  tDataPath] Insta
2d8f0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37  ller_Test_Vs2017
2d900 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
2d910 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
2d920 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
2d930 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
2d940 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
2d950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2d960 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
2d970 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c  taPath] Uninstal
2d980 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e  ler_Test_Vs2005.
2d990 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
2d9a0 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73     set testUnins
2d9b0 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c  tallVs2008LogFil
2d9c0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
2d9d0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
2d9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2d9f0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
2da00 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
2da10 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c  er_Test_Vs2008.l
2da20 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
2da30 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74    set testUninst
2da40 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65  allVs2010LogFile
2da50 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
2da60 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
2da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
2da80 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
2da90 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65  Path] Uninstalle
2daa0 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f  r_Test_Vs2010.lo
2dab0 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  g]]....
2dac0 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61   set testUninsta
2dad0 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20  llVs2012LogFile
2dae0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
2daf0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
2db10 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
2db20 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72  ath] Uninstaller
2db30 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67  _Test_Vs2012.log
2db40 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ]]....
2db50 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c  set testUninstal
2db60 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b  lVs2013LogFile [
2db70 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
2db80 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
2db90 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
2dba0 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
2dbb0 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f  th] Uninstaller_
2dbc0 54 65 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d  Test_Vs2013.log]
2dbd0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ]....          s
2dbe0 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  et testUninstall
2dbf0 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5b 66  Vs2015LogFile [f
2dc00 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
2dc10 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
2dc20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
2dc30 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
2dc40 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54  h] Uninstaller_T
2dc50 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d  est_Vs2015.log]]
2dc60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
2dc70 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56  t testUninstallV
2dc80 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69  s2017LogFile [fi
2dc90 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
2dca0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
2dcb0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
2dcc0 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
2dcd0 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65  ] Uninstaller_Te
2dce0 73 74 5f 56 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d  st_Vs2017.log]].
2dcf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 23 23  ...          ###
2dd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2dd40 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ##....
2dd50 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2dd60 73 20 3a 3a 6e 6f 28 63 68 65 63 6b 46 6f 72 53  s ::no(checkForS
2dd70 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68  qliteFiles)]} th
2dd80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2dd90 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
2dda0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2ddb0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
2ddc0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2ddd0 65 20 74 61 69 6c 20 24 65 6e 74 69 74 79 46 72  e tail $entityFr 2dde0 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d ameworkDllFile]] 2ddf0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2de00 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2de10 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
2de20 6e 65 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65  nel $entityFrame 2de30 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 workDllFile.. 2de40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2de50 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2de60 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2de70 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2de80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2de90 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2dea0 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
2deb0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
2dec0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
2ded0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 2dee0 61 6e 6e 65 6c 20 24 69 6e 73 74 61 6c 6c 65 72 annel$installer
2def0 45 78 65 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65  ExeFile Installe
2df00 72 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 20  r.exe..
2df10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2df20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2df30 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2df40 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2df60 69 6c 65 20 74 61 69 6c 20 24 73 71 6c 69 74 65  ile tail $sqlite 2df70 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d DesignerDllFile] 2df80 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 2df90 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2dfa0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2dfb0 6e 6e 65 6c 20 24 73 71 6c 69 74 65 44 65 73 69  nnel $sqliteDesi 2dfc0 67 6e 65 72 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 gnerDllFile.. 2dfd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2dfe0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2dff0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2e000 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2e010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2e020 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2e030 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
2e040 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  DllFile]]]} then
2e050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2e060 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2e070 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 test_channel$sy
2e080 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c  stemDataSQLiteDl
2e090 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  lFile..
2e0a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2e0b0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2e0c0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2e0d0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2e0f0 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d  ile tail $system 2e100 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c DataSQLiteLinqDl 2e110 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b lFile]]]} then { 2e120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2e130 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
2e140 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74  st_channel $syst 2e150 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 emDataSQLiteLinq 2e160 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 DllFile.. 2e170 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2e180 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 2e190 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 2e1a0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 2e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e1c0 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 [file tail$syst
2e1d0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44  emDataSQLiteEf6D
2e1e0 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  llFile]]]} then
2e1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2e200 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2e210 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 est_channel$sys
2e220 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36  temDataSQLiteEf6
2e230 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  DllFile..
2e240 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2e250 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2e260 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2e270 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e290 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 2e2a0 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e ExeFile]]]} then 2e2b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e2c0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2e2d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 2e2e0 73 74 45 78 65 46 69 6c 65 20 74 65 73 74 2e 65 stExeFile test.e 2e2f0 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 xe.. 2e300 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2e310 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 2e320 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 2e330 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 2e340 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 2e350 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 tail$testLinqE
2e360 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
2e370 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2e380 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2e390 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
2e3a0 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 74 65 73  tLinqExeFile tes
2e3b0 74 6c 69 6e 71 2e 65 78 65 0d 0a 20 20 20 20 20  tlinq.exe..
2e3c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2e3d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
2e3e0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
2e3f0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
2e400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2e410 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 2e420 73 74 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d stEf6ExeFile]]]} 2e430 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2e440 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 2e450 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
2e460 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c  l $testEf6ExeFil 2e470 65 20 74 65 73 74 65 66 36 2e 65 78 65 0d 0a 20 e testef6.exe.. 2e480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2e490 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2e4a0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2e4b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2e4c0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2e4d0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2e4e0 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c$testLinqOutFil
2e4f0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2e500 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
2e510 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 2e520 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 hannel$testLinq
2e530 4f 75 74 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  OutFile..
2e540 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2e550 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2e560 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2e570 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e590 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74  [file tail $nort 2e5a0 68 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d hwindEfDbFile]]] 2e5b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2e5c0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2e5d0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
2e5e0 65 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44  el $northwindEfD 2e5f0 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 bFile.. 2e600 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2e610 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 2e620 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 2e630 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 2e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 2e650 69 6c 65 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c ile tail$nonWal
2e660 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  DbFile]]]} then
2e670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2e680 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2e690 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 6e est_channel$non
2e6a0 57 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20  WalDbFile..
2e6b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2e6c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
2e6d0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
2e6e0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
2e6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2e700 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 77 61    [file tail $wa 2e710 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e lDbFile]]]} then 2e720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e730 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
2e740 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 77 61  test_channel $wa 2e750 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 lDbFile.. 2e760 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2e770 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 2e780 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 2e790 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e7b0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
2e7c0 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67  InstallVs2005Log
2e7d0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2e7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2e7f0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2e800 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 t_channel$testI
2e810 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
2e820 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
2e830 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
2e840 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
2e850 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2e860 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
2e870 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2e880 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 2e890 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 2e8a0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 2e8b0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 2e8c0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2e8d0 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61  annel $testInsta 2e8e0 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 0d llVs2008LogFile. 2e8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2e900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2e910 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 2e920 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 2e930 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 2e940 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 2e950 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 il$testInstallV
2e960 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2010LogFile]]]}
2e970 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2e980 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
2e990 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 2e9a0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
2e9b0 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2010LogFile..
2e9c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2e9d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2e9e0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2e9f0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2ea00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2ea10 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2ea20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 2ea30 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 2LogFile]]]} the 2ea40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2ea50 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 2ea60 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 2ea70 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 estInstallVs2012 2ea80 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 2ea90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2eaa0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 2eab0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 2eac0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 2ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2eae0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
2eaf0 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  InstallVs2013Log
2eb00 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2eb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2eb20 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2eb30 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 t_channel$testI
2eb40 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
2eb50 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
2eb60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
2eb70 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
2eb80 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2eb90 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
2eba0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2ebb0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 2ebc0 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 2ebd0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 2ebe0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 2ebf0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
2ec00 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61  annel $testInsta 2ec10 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 0d llVs2015LogFile. 2ec20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2ec30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2ec40 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 2ec50 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 2ec60 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 2ec70 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 2ec80 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 il$testInstallV
2ec90 73 32 30 31 37 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2017LogFile]]]}
2eca0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2ecb0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
2ecc0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 2ecd0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
2ece0 32 30 31 37 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2017LogFile..
2ecf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2ed00 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2ed10 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2ed20 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2ed30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2ed40 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2ed50 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2ed60 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 005LogFile]]]} t 2ed70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2ed80 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2ed90 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2eda0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2edb0 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2005LogFile.. 2edc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2edd0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2ede0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2edf0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2ee00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2ee10 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2ee20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
2ee30 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  008LogFile]]]} t
2ee40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2ee50 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2ee60 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2ee70 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2ee80 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2008LogFile..
2ee90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2eea0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2eeb0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2eec0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2eed0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2eee0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2eef0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2ef00 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 010LogFile]]]} t 2ef10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2ef20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2ef30 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2ef40 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2ef50 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2010LogFile.. 2ef60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2ef70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2ef80 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2ef90 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2efa0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2efb0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2efc0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
2efd0 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  012LogFile]]]} t
2efe0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2eff0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2f000 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2f010 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2f020 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2012LogFile..
2f030 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2f040 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2f050 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2f060 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2f070 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2f080 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2f090 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2f0a0 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 013LogFile]]]} t 2f0b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2f0c0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2f0d0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2f0e0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2f0f0 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2013LogFile.. 2f100 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2f110 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2f120 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2f130 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2f140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2f150 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2f160 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
2f170 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  015LogFile]]]} t
2f180 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2f190 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2f1a0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2f1b0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
2f1c0 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2015LogFile..
2f1d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
2f1e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2f1f0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
2f200 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
2f210 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2f220 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $2f230 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2f240 30 31 37 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 017LogFile]]]} t 2f250 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2f260 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 2f270 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
2f280 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 2f290 32 30 31 37 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2017LogFile.. 2f2a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2f2b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2f2c0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 2f2d0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 2f2e0 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c runSQLiteTestFil 2f2f0 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d esEpilogue {} {. 2f300 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2f310 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e # NOTE: Skip run 2f320 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 ning our custom 2f330 66 69 6c 65 73 20 65 70 69 6c 6f 67 75 65 20 69 files epilogue i 2f340 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 f the main one h 2f350 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 as been.. # 2f360 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d skipped.. 2f370 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2f380 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2f390 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e s ::no(epilogue. 2f3a0 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d eagle)]} then {. 2f3b0 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c . uplevel 2f3c0 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 1 {.. 2f3d0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 2f3e0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 2f3f0 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c testUninstall 2f400 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 74 65 Vs2017LogFile te 2f410 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2f420 35 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 5LogFile \.. 2f430 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e testUn 2f440 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 installVs2013Log 2f450 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 File testUninsta 2f460 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 llVs2012LogFile 2f470 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2f480 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 2f490 32 30 31 30 4c 6f 67 46 69 6c 65 20 74 65 73 74 2010LogFile test 2f4a0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c UninstallVs2008L 2f4b0 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 ogFile \.. 2f4c0 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e testUnin 2f4d0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 stallVs2005LogFi 2f4e0 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 le testInstallVs 2f4f0 32 30 31 37 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 2017LogFile \.. 2f500 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes 2f510 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 2f520 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c gFile testInstal 2f530 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c lVs2013LogFile \ 2f540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2f550 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 2f560 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 2LogFile testIns 2f570 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 2f580 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 2f590 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 testInstallVs 2f5a0 32 30 30 38 4c 6f 67 46 69 6c 65 20 74 65 73 74 2008LogFile test 2f5b0 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 InstallVs2005Log 2f5c0 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 File.... 2f5d0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 2f5e0 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ain \.. 2f5f0 20 20 20 20 20 6e 6f 72 74 68 77 69 6e 64 45 66 northwindEf 2f600 44 62 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 4f DbFile testLinqO 2f610 75 74 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 utFile \.. 2f620 20 20 20 20 20 20 20 20 77 61 6c 44 62 46 69 6c walDbFil 2f630 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a e nonWalDbFile.. 2f640 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 .. unse 2f650 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d t -nocomplain \. 2f660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 2f670 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 estEf6ExeFile te 2f680 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d stLinqExeFile \. 2f690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 2f6a0 65 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 65 estExeFile syste 2f6b0 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c mDataSQLiteEf6Dl 2f6c0 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 lFile \.. 2f6d0 20 20 20 20 20 20 20 73 79 73 74 65 6d 44 61 74 systemDat 2f6e0 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 aSQLiteLinqDllFi 2f6f0 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c le systemDataSQL 2f700 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 iteDllFile \.. 2f710 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 sqli 2f720 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c teDesignerDllFil 2f730 65 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 e installerExeFi 2f740 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 2f750 20 20 20 20 65 6e 74 69 74 79 46 72 61 6d 65 77 entityFramew 2f760 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 orkDllFile.. 2f770 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 2f780 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 2f790 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 oc runSQLiteTest 2f7a0 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 Epilogue {} {.. 2f7b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2f7c0 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 NOTE: Skip runni 2f7d0 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 ng our custom ep 2f7e0 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 ilogue if the ma 2f7f0 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d in one has been. 2f800 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 2f810 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 kipped... # 2f820 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e .. if {![in 2f830 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 2f840 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d pilogue.eagle)]} 2f850 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2f860 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2f870 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 TE: Show when ou 2f880 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 r tests actually 2f890 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 ended (now)... 2f8a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2f8b0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2f8c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2f8d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2f8e0 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e     "---- System.
2f8f0 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
2f900 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a  s ended at " \..
2f910 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f              [clo
2f920 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b  ck format [clock
2f930 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a   seconds]] \n]..
2f940 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2f950 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61       # NOTE: Loa
2f960 64 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22  d the "epilogue"
2f970 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72   custom per-user
2f980 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74   and/or per-host
2f990 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
2f9a0 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20         settings
2f9b0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
2f9c0 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c  .        uplevel
2f9d0 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c   1 [list loadSQL
2f9e0 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20  iteTestSettings
2f9f0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2fa00 2e 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 .epilogue].... 2fa10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2fa20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 # BUGFIX: Befor 2fa30 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 e checking the f 2fa40 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 inal resources i 2fa50 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c n use by SQLite, 2fa60 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 make.. # 2fa70 20 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f sure bo 2fa80 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 th of the PRAGMA 2fa90 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f related directo 2faa0 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 ry names are fre 2fab0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 2fac0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2fad0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 2fae0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2faf0 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20  l true....
2fb00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2fb10 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74  OTE: Also report
2fb20 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73   the resource us
2fb30 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e  age after runnin
2fb40 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20  g the tests...
2fb50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2fb60 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73   reportSQLiteRes
2fb70 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63  ources $::test_c 2fb80 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 2fb90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2fba0 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 OTE: Report the 2fbb0 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 critical handle 2fbc0 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e counts after run 2fbd0 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d ning the tests.. 2fbe0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2fbf0 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e getSQLiteHan 2fc00 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 dleCounts$::tes
2fc10 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
2fc20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2fc30 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73  # NOTE: If neces
2fc40 73 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68  sary, disable sh
2fc50 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode
2fc60 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
2fc70 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
2fc80 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73  sRuntimeOption s
2fc90 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65  haredCache]} the
2fca0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  n {..          e
2fcb0 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65  nableSharedCache
2fcc0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   \$::test_channel
2fcd0 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
2fce0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
2fcf0 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23  }.....    ######
2fd00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd40 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
2fd50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd60 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67  ######## END Eag
2fd70 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23  le ONLY ########
2fd80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd90 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
2fda0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fdb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fdc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fdd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fde0 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a  #######..  }....
2fdf0 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53    #..  # NOTE: S
2fe00 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ave the name of
2fe10 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f  the directory co
2fe20 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69  ntaining this fi
2fe30 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b  le...  #..  if {
2fe40 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f  ![info exists co
2fe50 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d  mmon_directory]}
2fe60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74   then {..    set
2fe70 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72   common_director
2fe80 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
2fe90 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a  [info script]]..
2fea0 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
2feb0 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68  NOTE: Provide th
2fec0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
2fed0 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67  Lite test packag
2fee0 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72  e to the interpr
2fef0 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61  eter...  #..  pa
2ff00 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79  ckage provide Sy
2ff10 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2ff20 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a        .Test 1.0..}..